remove files unneeded for lttv
[lttv.git] / verif / Spin / Xspin5.1 / xspin510.tcl
diff --git a/verif/Spin/Xspin5.1/xspin510.tcl b/verif/Spin/Xspin5.1/xspin510.tcl
deleted file mode 100755 (executable)
index 3597ebe..0000000
+++ /dev/null
@@ -1,7095 +0,0 @@
-#!/bin/sh
-# the next line restarts using wish \
-exec wish c:/cygwin/bin/xspin -- $*
-
-# cd   ;# enable to cd to home directory by default
-
-# on PCs:
-# adjust the first argument to wish above with the name and
-# location of this tcl/tk file on your system, if different.
-#
-# Cygwin:
-# if you use cygwin, do not refer to the file as /usr/bin/xspin
-# /usr/bin is a symbolic link to /bin, which really
-# lives in c:/cygwin, hence the contortions above
-#
-# on Unix/Linux/Solaris systems
-# replace the first line with something like
-#      #!/usr/bin/wish -f
-# using the pathname for the wish executable on your system
-
-#======================================================================#
-# Tcl/Tk Spin Controller, written by Gerard J. Holzmann, 1995-2005.    #
-# See the README.html file for full installation notes.                #
-#        http://spinroot.com/spin/whatispin.html                       #
-#======================================================================#
-set xversion "5.1.0 -- 24 April 2008"
-
-# -- Xspin Installation Notes (see also README.html):
-
-# 1. On Unix systems: change the first line of this file to point to the wish
-#    executable you want to use (e.g., wish4.2 or /usr/local/bin/wish8.0)
-#    ==> be careful, the pathname should be 30 characters or less
-#
-# 2. If you use another C compiler than gcc, change the set CC line below
-#
-# 3. Browse the configurable options below if you would like to
-#    change or adjust the visual appearance of the GUI
-#
-# 4. If you run on a PC, and have an ancient version of tcl/tk,
-#    you must set the values fo Unix, CMD, and Go32 by hand below
-#    => with Tcl/Tk 7.5/4.1 or later, this happens automatically
-
-# set CC   "cc -w -Wl -woff,84"        ;# ANSI-C compiler, suppress warnings
-# set CC   "cl -w -nologo"     ;# Visual Studio C/C++ compiler, prefered on PCs
-  set CC   "gcc -w"            ;# standard gcc compiler - no warnings
-  set CC0  "gcc"
-
-# set CPP  "cpp"               ;# the normal default C preprocessor
-  set CPP  "gcc -E -x c"       ;# c preprocessor, assuming we have gcc
-
-  set SPIN "spin"      ;# use a full path-name if necessary, e.g. c:/cygwin/bin/spin.exe
-  set DOT  "dot"       ;# optional, graph layout interface
-                       ;# no prob if dot is not available
-  set BG   "white"     ;# default background color for text
-  set FG   "black"     ;# default foreground color for text
-  set CMD  ""          ;# default is empty, and adjusted below
-  set Unix 1           ;# default is Unix, but this is adjusted below
-  set Ptype "color"    ;# printer-type: mono, color, or gray
-  set NT 0             ;# scratch variable, ignore
-
-  set debug_on 0
-  if {$debug_on} {
-       toplevel .debug ;   #debugging window
-       text .debug.txt -width 80 -height 60 -relief raised -bd 2 \
-               -yscrollcommand ".debug.scroll set"
-       scrollbar .debug.scroll -command ".debug.txt yview"
-       pack .debug.scroll -side right -fill y
-       pack .debug.txt -side left
-  }
-  proc debug {txt} {
-       global debug_on
-       if {$debug_on} {
-       catch { .debug.txt insert end "\n$txt" }
-  }    }
-
-  if [info exists tcl_platform] {
-       set sys $tcl_platform(platform)
-#      if {$sys == "macintosh"} {
-#              ... no adjustments needed? ...
-#      }
-        if {[string match windows $sys]} {
-               set Unix 0      ;# means Windows95/98/2000/NT/XP
-
-#              if {[auto_execok cl] != ""} {
-#                      set CC   "cl -w -nologo"        ;# Visual Studio compiler, PCs
-#                      set CC0  "cl"
-#              }
-
-               if {$tcl_platform(os) == "Windows 95"} {
-                       set CMD  "command.com"  ;# Windows95
-               } else {
-                       set CMD  "cmd"
-                       set NT 1
-  }    }       }
-
-#-- GUI configuration options - by Leszek Holenderski <lhol@win.tue.nl>
-#-- basic text size:
-       set HelvBig     -Adobe-Helvetica-Medium-R-Normal--*-120-*-*-*-*-*-*
-# mscs:
-       if {$NT} {      ;# on a windows nt machine
-       set SmallFont   "-*-Courier-Bold-R-Normal--*-110-*"
-       set BigFont     "-*-Courier-Bold-R-Normal--*-110-*"
-       } else {
-       set SmallFont   "-*-Courier-Bold-R-Normal--*-80-*"
-       set BigFont     "-*-Courier-Bold-R-Normal--*-80-*"
-       }
-
-# Some visual aspects of Xspin GUI can be configured by the user.
-# On PCs, the values of configuration options that are hard-coded
-# into this script can be modified (see below). On Unix, in addition to
-# (or rather, instead of) the manual modification, the values can be set in
-# an Xspin resource file ($HOME/.xspinrc) and/or in the X11 default resource
-# file (usually, $HOME/.Xdefaults).
-
-# Since the same option can be specified in several places, options can have
-# several, possibly inconsistent, values. The value which takes effect is
-# determined by the order in which options are scanned. The values specified
-# later in the order have higher priority. First, hard-coded options are
-# scanned, then options specified in .Xdefaults, and finally options
-# specified in .xspinrc.
-
-# When setting configuration options in an .xspinrc file, convert the 
-# settings below to the format of an X11 resource file. For example,
-#
-#      # width of scrollbars (any Tk dimension, default 15 pixels)
-#      option add *Scrollbar.width     13      startupFile
-#
-# should be converted to
-#
-#      ! width of scrollbars (any Tk dimension, default 15 pixels)
-#      *Scrollbar.width        13
-# In .Xdefaults file, configuration options should be preceded by the
-# application's name, so the above option should be converted to
-#
-#      ! width of scrollbars (any Tk dimension, default 15 pixels)
-#      xspin*Scrollbar.width   13
-# side on which side scrollbars are put (left or right, default=right)
-
-option add *Scrollbar.side     left    startupFile
-
-#--- sizes
-       # width of scrollbars (any Tk dimension, default 15 pixels)
-       option add *Scrollbar.width     13      startupFile
-       # width of borders (in pixels, typically 1 or 2, default 2)
-       option add *borderWidth         1       startupFile
-       # initial width of the input/log area (in characters, default 80)
-       option add *Input*Text.width    72      startupFile
-       option add *Log*Text.width      72      startupFile
-       # initial height of the input area (in lines, default 24)
-       option add *Input*Text.height   20      startupFile
-       # initial height of the log area (in lines, default 24)
-       option add *Log*Text.height     5       startupFile
-       # size of the handle used to adjust the height of the log area
-       # (in pixels, default 0)
-       option add *Handle.width        10      startupFile
-       option add *Handle.height       10      startupFile
-#--- colors
-       # colors for the input/log area
-       option add *Input*Text.background       white   startupFile
-       option add *Input*Text.foreground       black   startupFile
-       option add *Log*Text.background         gray95  startupFile
-       option add *Log*Text.foreground         black   startupFile
-       # colors for the editable/read-only area
-       option add *Entry.background            white   startupFile
-       option add *Edit*Text.background        white   startupFile
-       option add *Edit*Text.foreground        black   startupFile
-       # colors for the editable/read-only area
-       option add *Read*Text.background        gray95  startupFile
-       option add *Read*Text.foreground        black   startupFile
-#--- fonts
-       # fonts for the input/log area (default is system dependent,
-       # usually -*-Courier-Medium-R-Normal--*-120-*)
-option add *Input*Text.font    -*-Helvetica-Medium-R-Normal--*-120-*   startupFile
-#option add *Input*Text.font   -schumacher-clean-medium-r-normal--*-120-*-60-* startupFile
-#option add *Log*Text.font     -schumacher-clean-medium-r-normal--*-120-*-60-* startupFile
-
-#--- widgets
-       # simple texts (dialogs which present read-only texts, such as help)
-       option add *SimpleText.Text.width 60
-       option add *SimpleText.Text.height 30
-       option add *SimpleText.Text.background white
-
-       # sections (decorated frames for grouping related buttons)
-       option add *Section*Title.font          -*-Helvetica-Bold-R-Normal--*-100-*     startupFile
-
-#option add *Section*Checkbutton.font  -*-Helvetica-Medium-R-Normal--*-100-*   startupFile
-#option add *Section*Radiobutton.font  -*-Helvetica-Medium-R-Normal--*-100-*   startupFile
-#option add *Section*Label.font                -*-Helvetica-Medium-R-Normal--*-100-*   startupFile
-
-################ end of configurable parameters #######################
-
-wm title . "SPIN CONTROL $xversion"
-wm iconname . "SPIN"
-wm geometry . +41+50
-wm minsize  . 400 200
-
-set Fname ""
-set firstime 1
-set notignored 0
-
-#### seed the advanced parameters settings
-
-set e(0)       "Physical Memory Available (in Mbytes): "
-set ival(0)    128
-set expl(0)    "explain"
-
-set e(1)       "Estimated State Space Size (states x 10^3): "
-set ival(1)    500
-set expl(1)    "explain"
-
-set e(2)       "Maximum Search Depth (steps): "
-set ival(2)    10000
-set expl(2)    "explain"
-
-set e(7)       "Nr of hash-functions in Bitstate mode: "
-set ival(7)    2
-set expl(7)    "explain"
-
-set e(3)       "Extra Compile-Time Directives (Optional): "
-set ival(3)    ""
-set expl(3)    "Choose"
-
-set e(4)       "Extra Run-Time Options (Optional): "
-set ival(4)    ""
-set expl(4)    "Choose"
-
-set e(5)       "Extra Verifier Generation Options: "
-set ival(5)    ""
-set expl(5)    "Choose"
-
-set ival(6)    1       ;# which error is reported, default is 1st
-
-
-# allow no more than one entry per selection
-catch { tk_listboxSingleSelect Listbox }
-
-proc msg_file {f nowarn} {
-       set msg ""
-       set ef [open $f r]
-
-       while {[gets $ef line] > -1} {
-               if {$nowarn} {
-                       if {[string first "warning" $line] < 0} {
-                               set msg "$msg\n$line"
-                       }
-               } else {
-                       set msg "$msg\n$line"
-       }       }
-       close $ef
-       return $msg
-}
-
-       scan $tk_version "%d.%d" tk_major tk_minor
-
-       set version ""
-
-       if {[auto_execok $SPIN] == "" \
-       ||  [auto_execok $SPIN] == 0} {
-               set version "Error: No executable $SPIN found..."
-       } else {
-               if {$Unix} {
-                       set version [exec $SPIN -V]
-               } else {
-                       catch { exec $SPIN -V >&pan.tmp } err
-                       if {$err == ""} {
-                               set version [msg_file pan.tmp 1]
-                       } else {
-                               puts "error: $err"
-                               puts "is there a $SPIN and a go32.exe?"
-                               exit
-               }       }
-               if {[string first "Spin Version 5" $version] < 0 \
-               &&  [string first "Spin Version 4" $version] < 0 \
-               &&  [string first "Spin Version 3" $version] < 0 } {
-                       set version "Spin Version not recognized: $version"
-               }
-       }
-
-frame .menu
-       # top level menu bar
-       menubutton .menu.file -text "File.." \
-               -relief raised -menu .menu.file.m
-       menubutton .menu.run -text "Run.." -fg red \
-               -relief raised -menu .menu.run.m
-       menubutton .menu.edit -text "Edit.." \
-               -relief raised -menu .menu.edit.m
-       menubutton .menu.view -text "View.." \
-               -relief raised -menu .menu.view.m
-       label .menu.title -text "SPIN  DESIGN  VERIFICATION" -fg blue
-
-       set lno 1
-       label .menu.lno -text "Line#:" -relief raised 
-       entry .menu.ent -width 6 -textvariable lno \
-               -relief sunken -background white -foreground black
-       bind  .menu.ent <Return> {
-               .inp.t tag remove hilite 0.0 end
-               .inp.t tag add hilite $lno.0 $lno.1000
-               .inp.t tag configure hilite -background $FG -foreground $BG
-               .inp.t yview -pickplace [expr $lno-4]
-       }
-
-       label .menu.fnd1 -text "Find:" -relief raised 
-       entry .menu.fnd2 -width 8 -textvariable pat \
-               -relief sunken -background white -foreground black
-       bind  .menu.fnd2 <Return> {
-               .inp.t tag remove hilite 0.0 end
-               forAllMatches .inp.t $pat
-       }
-
-       menubutton .menu.help -text "Help" -relief raised \
-               -menu .menu.help.m
-
-       pack append .menu \
-               .menu.file {left frame w} \
-               .menu.edit {left frame w} \
-               .menu.view {left frame w} \
-               .menu.run {left frame w} \
-               .menu.help {left frame w} \
-               .menu.title {left frame c expand} \
-               .menu.fnd2 {right frame e} \
-               .menu.fnd1 {right frame e} \
-               .menu.ent {right frame e} \
-               .menu.lno {right frame e}
-
-set loglines 5
-frame .log
-       text .log.t -bd 2 -height $loglines -background $FG -foreground $BG
-frame .log.b
-       button .log.b.pl -text "+" \
-               -command {incr loglines  1; .log.t configure -height $loglines}
-       button .log.b.mn -text "-" \
-               -command {incr loglines -1; .log.t configure -height $loglines}
-       pack append .log.b .log.b.pl {top}
-       pack append .log.b .log.b.mn {top}
-       pack append .log .log.b {left filly}
-       pack append .log .log.t {right expand fill}
-
-proc dopaste {} {
-       global FG BG
-       set from [.inp.t index insert]
-       tk_textPaste .inp.t
-       set upto [.inp.t index insert]
-       .inp.t tag add sel $from $upto
-#      .inp.t tag configure hilite -background $FG -foreground $BG
-}
-
-#- fetch the value of user-defined configuration options
-
-proc fetchOption {name default args} {
-
-  set class Dummy
-  set fullName $name
-
-  # class encoded in name ?
-  switch -glob -- $name *.* {
-    set list [split $name .]
-    switch [llength $list] 2 {} default { error "wrong option \"$name\" }
-    set class [lindex $list 0]
-    set name  [lindex $list 1]
-  }
-
-  # create a unique dummy frame of requested class and get the option's value
-  set dummy .0
-  while {[winfo exists $dummy]} { append dummy 0 }
-  frame $dummy -class $class
-  set value [option get $dummy $name $class]
-  destroy $dummy
-
-  # option not defined ?
-  switch -- $value "" { return $default }
-
-  # check a restriction on option's value
-  switch [llength $args] {
-    0 { # no restriction
-      }
-    1 { # restriction is given as a list of allowed values
-        switch -- [lsearch -exact [lindex $args 0] $value] -1 {
-          set msg "wrong value \"$value\" of option \"$fullName\"\
-                   (should be one of $args)"
-          return -code error -errorinfo $msg $msg
-        }
-      }
-    2 { # restriction is given as a range (min and max)
-        set min [lindex $args 0]
-        set max [lindex $args 1]
-        if {$value < $min} { set $value $min }
-        if {$value > $max} { set $value $max }
-      }
-    default {
-      error "internal error in fetchOption: wrong restriction \"$args\""
-    }
-  }
-
-  return $value
-}
-
-# width of borders
-set BD [fetchOption borderWidth 1 0 4]
-#option add *Text.highlightThickness $BD startupFile
-
-# scrollbar's side
-set scrollbarSide [fetchOption Scrollbar.side right {left right}]
-
-frame .inp
-       # view of spin input
-       scrollbar .inp.s  -command ".inp.t yview"
-       text .inp.t -bd 2  -font $HelvBig -yscrollcommand ".inp.s set" -wrap word
-
-       pack .inp.s -side $scrollbarSide -fill y
-       pack append .inp \
-               .inp.t {left expand fill}
-
-       menu .inp.t.edit -tearoff 0
-       .inp.t.edit add command -label "Cut" \
-               -command {tk_textCopy .inp.t; tk_textCut .inp.t}
-       .inp.t.edit add command -label "Copy" \
-               -command {tk_textCopy .inp.t}
-       .inp.t.edit add command -label "Paste" \
-               -command {dopaste}
-
-       bind .inp.t <ButtonPress-3> {
-               tk_popup .inp.t.edit %X %Y
-       }
-       bind .inp.t <ButtonRelease-1> { setlno }
-
-
-set l_typ 0;   # used by both simulator and validator
-set lt_typ 0;  # used by ltl panel
-set ol_typ -1; # remembers setting last used in compilation
-set m_typ 2;   # used by simulator
-
-menu .menu.file.m
-       .menu.file.m add command -label "New"  \
-               -command ".inp.t delete 0.0 end"
-#      .menu.file.m add command -label "UnSelect" \
-#              -command ".inp.t tag remove hilite 0.0 end;\
-#                        .inp.t tag remove Rev 0.0 end;\
-#                        .inp.t tag remove sel 0.0 end"
-       .menu.file.m add command -label "ReOpen" -command "open_spec"
-       .menu.file.m add command -label "Open.." -command "open_spec 0"
-       .menu.file.m add command -label "Save As.." -command "save_spec 0"
-       .menu.file.m add command -label "Save" -command "save_spec"
-       .menu.file.m add command -label "Quit" \
-               -command "cleanup 1; destroy .; exit"
-
-menu .menu.help.m
-       .menu.help.m add command -label "About Spin" \
-               -command "aboutspin"
-       .menu.help.m add separator
-       .menu.help.m add command -label "Promela Usage" \
-               -command "promela"
-       .menu.help.m add command -label "Xspin Usage" \
-               -command "helper"
-       .menu.help.m add command -label "Simulation" \
-               -command "roadmap1"
-       .menu.help.m add command -label "Verification" \
-               -command "roadmap2"
-       .menu.help.m add command -label "LTL Formulae" \
-               -command "roadmap4"
-       .menu.help.m add command -label "Spin Automata View" \
-               -command "roadmap5"
-       .menu.help.m add command -label "Reducing Complexity" \
-               -command "roadmap3"
-
-menu .menu.run.m
-       .menu.run.m add command -label "Run Syntax Check" \
-               -command {syntax_check "-a -v" "Syntax Check"}
-       .menu.run.m add command -label "Run Slicing Algorithm" \
-               -command {syntax_check "-A" "Property-Specific Slicing"}
-       .menu.run.m add separator
-       .menu.run.m add command -label "Set Simulation Parameters.." \
-               -command simulation
-       .menu.run.m add command -label "(Re)Run Simulation" \
-               -command Rewind -state disabled
-       .menu.run.m add separator
-       .menu.run.m add command -label "Set Verification Parameters.." \
-               -command "basicval"
-       .menu.run.m add command -label "(Re)Run Verification" \
-               -command {runval "0"} -state disabled
-       .menu.run.m add separator
-       .menu.run.m add command -label "LTL Property manager.." \
-               -command call_tl
-       .menu.run.m add separator
-       .menu.run.m add command -label "View Spin Automaton for each Proctype.." \
-               -command fsmview
-
-
-menu .menu.edit.m
-       .menu.edit.m add command -label "Cut" \
-               -command {tk_textCopy .inp.t; tk_textCut .inp.t}
-       .menu.edit.m add command -label "Copy" \
-               -command {tk_textCopy .inp.t}
-       .menu.edit.m add command -label "Paste" \
-               -command {tk_textPaste .inp.t}
-
-set FSz 110
-
-menu .menu.view.m
-       .menu.view.m add command -label "Larger" \
-               -command {
-                       incr FSz 10
-                       set HelvBig "-Adobe-Helvetica-Medium-R-Normal--*-$FSz-*-*-*-*-*-*"
-                       .inp.t configure -font $HelvBig
-               }
-       .menu.view.m add command -label "Default text size" \
-               -command {
-                       set FSz 110
-                       set HelvBig "-Adobe-Helvetica-Medium-R-Normal--*-$FSz-*-*-*-*-*-*"
-                       .inp.t configure -font $HelvBig
-               }
-       .menu.view.m add command -label "Smaller" \
-               -command {
-                       incr FSz -10
-                       set HelvBig "-Adobe-Helvetica-Medium-R-Normal--*-$FSz-*-*-*-*-*-*"
-                       .inp.t configure -font $HelvBig
-               }
-       .menu.view.m add separator
-       .menu.view.m add command -label "Clear Selections" \
-               -command ".inp.t tag remove hilite 0.0 end;\
-                         .inp.t tag remove Rev 0.0 end;\
-                         .inp.t tag remove sel 0.0 end"
-
-proc setlno {} {
-       scan [.inp.t index insert] "%d.%d" lno cno
-       .menu.ent delete 0 end
-       .menu.ent insert end $lno
-       .inp.t tag remove hilite $lno.0 $lno.end        ;# or else cursor is invis
-       update
-}
-
-proc add_log {{y ""}} {
-
-       if {$y == "\n"} { return }
-       .log.t insert end "\n$y"
-       .log.t yview -pickplace end
-}
-
-proc cleanup {how} {
-       global Unix
-       if {$Unix == 0 && $how == 1} {
-               add_log "removing temporary files, please wait.."; update
-       }
-       rmfile "pan.h pan.c pan.t pan.m pan.b pan.tmp pan.ltl"
-       rmfile "pan.oin pan.pre pan.out pan.exe pan.otl"
-       rmfile "pan_in pan_in.trail trail.out pan"
-       rmfile "_tmp1_ _tmp2_ pan.o pan.obj pan.exe"
-       if {$Unix == 0 && $how == 1} { add_log "done.." }
-}
-
-
-pack append . \
-       .log  {bot frame w fillx} \
-       .inp  {bot frame w expand fill} \
-       .menu {top fillx}
-
-# simulation parameters - initial settings
-       set fvars 1
-       set msc   1;    set svars 1
-       set rvars 1
-       set stop  0;    set tsc 0
-       set seed        "1";    # random sumulation
-       set jumpsteps   "0";    # guided simulation
-
-       set s_typ 0
-       # meaning s_type values:
-       # 0 - Random Simulation (using seed)
-       # 1 - Guided Simulation (using pan.trail)
-       # 2 - Interactive Simulation
-
-       set whichsim 0
-       # meaning of whichsim values:
-       # 0 - use pan_in.tra(il)
-       # 1 - use user specified file
-
-tkwait visibility .log
-add_log "SPIN LOG:"
-add_log " $version"
-add_log "Xspin Version $xversion"
-add_log "TclTk Version [info tclversion]/$tk_version\n"
-
-       if {$Unix == 0} {
-       if {[auto_execok $CC0] == "" \
-       ||  [auto_execok $CC0] == 0} {
-               set m "Error: no C compiler found: $CC"
-               add_log $m
-               catch { tk_messageBox -icon info -message $m }
-       }}
-
-.inp.t configure -background $BG -foreground $FG
-
-# process execution barchart
-
-set Data(0) 0
-set Name(0) "-"
-set n 0
-set bar_handle 0
-set PlaceBar   ""
-
-proc stopbar {} {
-       global Data Name n PlaceBar
-       for {set i 0} {$i <= $n} {incr i} {
-               set Data($i) 0
-               set Name($i) ""
-       }
-       set n 0
-       set PlaceBar [wm geometry .bar]
-       set k [string first "\+" $PlaceBar]
-       if {$k > 0} {
-               set PlaceBar [string range $PlaceBar $k end]
-       }
-       catch { destroy .bar }
-}
-
-proc growbar {v} {
-       global n Data
-       set Data($n) $v
-       incr n
-       catch { fillbar }
-}
-
-proc shrinkbar {} {
-       global n
-       incr n -1
-       set Data($n) 0
-       catch { fillbar }
-}
-
-proc stepbar {v nm} {
-       global n Data Name
-
-       if {$v >= 0} {
-               if { [info exists Data($v)] } {
-                       incr Data($v)
-               } else {
-                       set Data($v) 1
-               }
-               if {$v >= $n} {
-                       set n [expr $v+1]
-               }
-               if { [string length $nm] > 4} {
-                       set Name($v) [string range $nm 0 4]
-               } else {
-                       set Name($v) $nm
-               }
-               catch { fillbar }
-       }
-}
-
-proc adjustbar {v w} {
-       global Data
-
-       set Data($v) $w
-       catch { fillbar }
-}
-
-proc startbar {tl} {
-       global n Data bar_handle Ptype PlaceBar
-
-       catch { destroy .bar }
-       toplevel .bar
-       wm minsize .bar 200 200
-       wm title .bar "$tl"
-
-       set maxy [expr [winfo screenheight .] - 200]
-       if {$PlaceBar == ""} {
-               set PlaceBar "+[expr [winfo rootx .]+150]+$maxy"
-       }
-       wm geometry .bar $PlaceBar
-
-       set bar_handle [canvas .bar.c -height 410 -width 410 -relief raised]
-       frame  .bar.buts
-
-       button .bar.buts.s1 -text "Save in:  panbar.ps" \
-               -command ".bar.c postscript -file panbar.ps -colormode $Ptype"
-
-       button .bar.buts.b -text " Close " -command "stopbar"
-       pack .bar.buts.b .bar.buts.s1 -side right
-       pack append .bar  .bar.c {top expand fill}  .bar.buts {bot frame e}
-}
-
-proc fillbar {} {
-       global n Data Name
-
-       .bar.c delete grid
-       .bar.c delete data
-       set sum 0
-       for {set i 0} {$i < $n} {incr i} {
-               if { [info exists Data($i)] } {
-                       incr sum $Data($i)
-               } else {
-                       set Data($i) 0
-                       set Name($i) "-"
-               }
-       }
-       for {set i 0} {$i < $n} {incr i} {
-               .bar.c create line \
-                       $i 0 \
-                       $i 100 \
-                       -fill #222222 -tags grid
-               .bar.c create text $i 105 \
-                       -text $i -tags grid
-               .bar.c create text $i 110 \
-                       -text "$Name($i)" \
-                       -fill blue -tags grid
-
-               if { [info exists Data($i)] } {
-                       set y [expr ($Data($i)*100)/$sum]
-                       .bar.c create line \
-                               $i 100  \
-                               $i [expr 100-$y] \
-                               -width 35 -fill red -tags data
-                       if {$y > 6} {
-                               set nrcol "yellow"
-                       } else {
-                               set nrcol "red"
-                       }
-                       .bar.c create text $i 95 \
-                               -text "$Data($i)" \
-                               -fill $nrcol -tags grid
-               }
-       }
-
-       .bar.c create text [expr ($n)/2.0] -15 -text "Percentage of $sum System Steps" \
-               -anchor c -justify center -tags grid
-       .bar.c create text [expr ($n)/2.0] -8 -text "Executed Per Process ($n total)" \
-               -anchor c -justify center -tags grid
-       .bar.c scale all 0 0 55 3
-       if {$n <= 5} {
-               .bar.c move all 100 60
-       } else {
-               .bar.c move all 50 60
-       }
-}
-
-proc barscales {} {
-       global bar_handle
-
-       catch {
-               button .bar.buts.b4 -text "Larger" \
-                       -command "$bar_handle scale all 0 0 1.1 1.1"
-               button .bar.buts.b5 -text "Smaller" \
-                       -command "$bar_handle scale all 0 0 0.9 0.9"
-               pack append .bar.buts \
-                       .bar.buts.b4 {right padx 5} \
-                       .bar.buts.b5 {right padx 5}
-       }
-}
-
-# Files and Generic Boxes
-
-set file ""
-set boxnr 0
-
-proc rmfile {f} {
-       global Unix CMD tk_major tk_minor
-
-       set err ""
-       catch { eval file delete -force $f } err
-       if {$err == "" } { return }
-
-       if {$Unix} {
-               catch {exec rm -f $f}
-       } else {
-               set n [llength $f]
-               for {set i 0} {$i < $n} {incr i} {
-                       set g [lindex $f $i]
-                       add_log "rm $g"
-                       if {$tk_major >= 4 && $tk_minor >= 2} {
-                               catch {exec $CMD /c del $g}
-                       } else {
-                               catch {exec $CMD >&@stdout /c del $g}
-                       }
-       }       }
-}
-
-proc mvfile {f g} {
-       global Unix CMD tk_major tk_minor
-
-       set err ""
-       catch { file rename -force $f $g } err
-       if {$err == "" } { return }
-
-       if {$Unix} {
-               catch {exec mv $f $g}
-       } else {
-               if {$tk_major >= 4 && $tk_minor >= 2} {
-                       catch {exec $CMD /c move $f $g}
-               } else {
-                       catch {exec $CMD >&@stdout /c move $f $g}
-               }
-       }
-}
-
-proc cpfile {f g} {
-       global Unix CMD tk_major tk_minor
-
-       set err ""
-       catch { file copy -force $f $g } err
-       if {$err == "" } { return }
-
-       if {$Unix} {
-               catch {exec cp $f $g}
-       } else {
-               if {$tk_major >= 4 && $tk_minor >= 2} {
-               catch {exec $CMD /c copy $f $g}
-               } else {
-               catch {exec $CMD >&@stdout /c copy $f $g}
-       }       }
-}
-
-proc cmpfile {f g} {
-       global Unix
-
-       set err ""
-       if {$Unix} {
-               catch {exec cmp $f $g} err
-       } else {
-               if {[file exists $f] == 0 \
-               ||  [file exists $g] == 0} {
-                       return "error"
-               }
-               set fd1 [open $f r]
-               set fd2 [open $g r]
-               while {1} {
-                       set n1 [gets $fd1 line1]
-                       set n2 [gets $fd2 line2]
-                       if {$n1 != $n2 \
-                       ||  [string compare $line1 $line2] != 0} {
-                               set err "files differ"
-                               break
-                       }
-                       if {$n1 < 0} { break }
-               }
-               close $fd1
-               close $fd2
-       }
-       return $err
-}
-
-proc file_ok {f} {
-       if {[file exists $f]} {
-               if {![file isfile $f] || ![file writable $f]} {
-                       set m "error: file $f is not writable"
-                       add_log $m
-                       catch { tk_messageBox -icon info -message $m }
-                       return 0
-       }       }
-       return 1
-}
-
-proc mkpan_in {} {
-       global HasNever
-       set fd [open pan_in w]
-
-       fconfigure $fd -translation lf
-       puts $fd [.inp.t get 0.0 end] nonewline
-
-       if {$HasNever != ""} {
-               if [catch {set fdn [open $HasNever r]} errmsg] {
-                       add_log $errmsg
-                       catch { tk_messageBox -icon info -message $errmsg }
-               } else {
-                       while {[gets $fdn line] > -1} {
-                               puts $fd $line
-                       }
-                       catch "close $fdn"
-       }       }
-       catch "flush $fd"
-       catch "close $fd"
-}
-
-proc no_ltlchange {} {
-
-       if {![file exists pan.ltl]} {
-               return 1
-       }
-       if {![file exists pan.otl]} {
-               cpfile pan.ltl pan.otl
-               return 0                ; first time
-       }
-       set err [cmpfile pan.ltl pan.otl]
-       if {[string length $err] > 0} {
-               cpfile pan.ltl pan.otl
-               return 0                ;# different
-       }
-       return 1                        ;# unchanged
-}
-
-proc no_change {} {
-       global nv_typ
-
-       mkpan_in        ;# keep this up to date
-       if {![file exists pan.oin]} {
-               cpfile pan_in pan.oin
-               return 0                ; first time
-       }
-       set err [cmpfile pan_in pan.oin]
-       if {[string length $err] > 0} {
-               cpfile pan_in pan.oin
-               return 0                ;# different
-       }
-       if {$nv_typ == 0} {
-               return 1
-       }
-       return [no_ltlchange]           ;# unchanged
-}
-
-proc mk_exec {} {
-       global Unix CC SPIN notignored
-
-       set nochange [no_change]
-       if {$nochange == 1 && [file exists "pan"]} {
-               add_log "<no recompilation needed>"
-               return 1
-       }
-
-       add_log "<compiling executable>"
-       catch {
-       warner "Compiling" "Please wait until compilation of the \
-executable produced by spin completes." 300
-       }
-       add_log "$SPIN -a pan_in"
-
-       catch {exec $SPIN -a pan_in >&pan.tmp}
-       set errmsg [msg_file pan.tmp 1]
-
-       if {[string length $errmsg]>0} {
-               add_log "$errmsg"
-               catch { tk_messageBox -icon info -message $errmsg }
-               add_log "<stopped compilation attempt>"
-               catch { destroy .warn }
-               return 0
-       }
-
-       add_log "$CC -o pan -D_POSIX_SOURCE pan.c"; update
-       if {$Unix} {
-               catch { eval exec $CC -o pan -D_POSIX_SOURCE pan.c >pan.tmp 2>pan.err} errmsg
-       } else {
-               catch { eval exec $CC -o pan -D_POSIX_SOURCE pan.c >pan.tmp 2>pan.err}
-       }
-       set errmsg [msg_file pan.tmp 0]
-       set errmsg "$errmsg \n [msg_file pan.err 0]"
-
-               if {[string length $errmsg]>0 && $notignored} {
-                       add_log "$errmsg"
-                       catch { tk_messageBox -icon info -message $errmsg }
-                       catch { destroy .warn }
-                       return 0
-               }
-       add_log "<compilation complete>"
-       catch {destroy .warn}
-       return 1
-}
-
-set PlaceWarn  "+20+20"
-
-proc warner {banner msg w} {
-       global PlaceWarn
-
-       catch {destroy .warn}
-       toplevel .warn
-
-       wm title .warn "$banner"
-       wm iconname .warn "Info"
-       set k [string first "\+" $PlaceWarn]
-       if {$k > 0} {
-               set PlaceWarn [string range $PlaceWarn $k end]
-       }
-       wm geometry .warn $PlaceWarn
-
-       message .warn.t -width $w -text $msg
-       button .warn.ok -text "Ok" \
-               -command "set PlaceWarn [wm geometry .warn]; destroy .warn"
-
-       pack append .warn .warn.t {top expand fill}
-       pack append .warn .warn.ok {bottom}
-
-       update
-}
-
-proc dosave {} {
-       global Fname xversion
-
-       if {[file_ok $Fname]==0} return
-       set fd [open $Fname w]
-       add_log "<saved spec in $Fname>"
-       puts $fd "[.inp.t get 0.0 end]" nonewline
-       catch "flush $fd"
-       catch "close $fd"
-       wm title . "SPIN CONTROL $xversion -- File: $Fname"
-}
-
-proc save_spec {{curr 1}} {
-#-
-#- Save the input area into a file.
-#-
-#- If 'curr' is true then we save to the current file. Otherwise, a file
-#- selection dialog is presented. If a file is selected (note that the
-#- dialog can be canceled) then we try to write to it.
-#-
-
-  global Fname
-
-  if $curr {
-    switch -- $Fname "" {
-      add_log "no file to save to, try \"Save as ...\""
-      return
-    }
-    writeoutfile .inp.t $Fname
-  } else {
-    # try to use the predefined file selection dialog
-    switch [info commands tk_getSaveFile] "" {
-      # some old version of Tk so use our own file selection dialog
-      set fileselect "FileSelect save"
-    } default {
-      set fileselect "tk_getSaveFile"
-    }
-  
-    # get the file (return if the file selection dialog canceled)
-    switch -- [set file [eval $fileselect]] "" return
-  
-    # write the file and update Fname if the file written successfully
-    if [writeoutfile .inp.t $file] {
-      set Fname $file
-    }
-  }
-}
-
-proc consider_it {} {
-       global file Fname xversion
-
-       if {[file isdirectory $file]} then {
-               cd $file
-               fillerup ""
-               add_log "cd $file"
-       } else {
-               if {![file isfile $file]} {
-                       set file ""
-               } else {
-                       readinfile .inp.t $file
-
-                       rmfile pan_in.trail
-                       cpfile $file.trail pan_in.trail
-
-                       set dir [pwd]
-                       set Fname $file
-                       wm title . "SPIN CONTROL $xversion -- File: $Fname"
-                       destroy .b
-       }       }
-}
-
-#----------------------------------------------------------------------
-# Improvements - by Leszek Holenderski <lhol@win.tue.nl>
-# GUI configuration and File Selection dialogs
-#----------------------------------------------------------------------
-
-# predefined priorities for options stored in the option data base are
-#      widgetDefault   20
-#      startupFile     40
-#      userDefault     60
-#      interactive     80
-
-# most of frames are used for layout purposes so they should be invisible
-option add *Frame.borderWidth 0 interactive
-
-proc try_with {xspinrc} {
-
-  if ![file exists $xspinrc] return
-
-  if ![file isfile $xspinrc] {
-    puts "xspin warning: the resource file \"$xspinrc\" exists but is not\
-          a normal file"
-    return
-  }
-  if ![file readable $xspinrc] {
-    puts "xspin warning: the resource file \"$xspinrc\" exists but is not\
-          readable"
-    return
-  }
-  if [catch {option readfile $xspinrc userDefault} result] {
-    puts "xspin warning: some problems when trying to load the resource\
-          file \"$xspinrc\"\n$result"
-    return
-  }
-}
-
-if [info exists env(HOME)] {
-  if $Unix {
-    try_with [file join $env(HOME) .xspinrc]
-  } else {
-    try_with [file join $env(HOME) xspinrc]
-  }
-}
-
-proc FileSelect {mode {title ""}} {
-  switch -- $mode open - save {} default { set mode open }
-
-  switch $mode {
-    open {
-      set title Open
-      set okButtonText Open
-    }
-    save {
-      set title Save
-      set okButtonText Save
-    }
-  }
-
-  set w .fileselect
-  upvar #0 $w this
-
-  if [winfo exists $w] {
-    wm title $w $title
-    $this(okButton) config -text $okButtonText
-    catch {wm geom $w $this(geom)}
-    wm deiconify $w
-  } else {
-    toplevel $w -class Fileselect
-    wm title $w $title
-    # the minimal size is given in characters and lines (setgrid is on)
-    wm minsize $w 14 7
-
-    # layout frames
-    pack [set f [frame $w.f]] -padx 5 -pady 5 -fill both -expand yes
-    pack [set buttons [frame $f.b]] -side bottom -fill x
-    pack [set name    [frame $f.n]] -side bottom -fill x -pady 5
-    pack [set path    [frame $f.p]] -side top -fill x
-    pack [set files   [frame $f.f]] -side top -fill both -expand yes
-  
-    # create ok/cancel buttons
-    set okButton [button $buttons.ok -text $okButtonText \
-                       -command "FileSelect.Close $w 1"]
-    pack $okButton -side right
-
-    set cancelButton [button $buttons.cancel -text Cancel \
-                       -command "FileSelect.Close $w 0"]
-    pack $cancelButton -side left
-
-    MakeSameWidth "$okButton $cancelButton"
-  
-    # create path button
-    set pathButton $path.path
-    global $w|currDir
-    set pathMenu [tk_optionMenu $pathButton $w|currDir ""]
-    pack $pathButton -side top
-  
-    # create the list of files
-    global scrollbarSide
-
-    set fileList $files.l
-    set scrollbar $files.s
-    pack [scrollbar $files.s -command "$fileList yview"] \
-        -side $scrollbarSide -fill y
-    pack [listbox $fileList -yscrollcommand "$files.s set" -selectmode single -setgrid on] \
-        -side $scrollbarSide -expand yes -fill both
-  
-    bind $fileList <ButtonPress-1>        "FileSelect.Selected $w %x %y"
-    bind $fileList <Double-ButtonPress-1> "FileSelect.Chosen   $w %x %y"
-
-    set fileEntry $name.e
-    pack [label $name.l -text File:] -side left
-    pack [entry $fileEntry] -side right -expand yes -fill x
-
-    set this(okButton)   $okButton
-    set this(pathButton) $pathButton
-    set this(pathMenu)   $pathMenu
-    set this(fileList)   $fileList
-    set this(fileEntry)  $fileEntry
-
-    foreach widget "$okButton $cancelButton $pathButton $fileList $scrollbar" {
-      $widget config -highlightthickness 0
-    }
-
-    wm protocol $w WM_DELETE_WINDOW [$cancelButton cget -command]
-  }
-
-  # fill in the list of files
-  if ![info exists this(path)] { set this(path) [pwd] }
-  FileSelect.cd $w $this(path)
-
-  # make the dialog modal (set a grab and claim the focus)
-
-  set oldFocus [focus]
-  set oldGrab [grab current $w]
-  if {$oldGrab != ""} { set grabStatus [grab status $oldGrab] }
-  grab $w
-  focus $this(fileEntry)
-
-  # make the contents of file entry selected (for easy deletion)
-  $this(fileEntry) select from 0
-  $this(fileEntry) select to end
-
-  # Wait for the user to respond, then restore the focus and return the
-  # contents of file entry.
-  # Restore the focus before deleting the window, since otherwise the
-  # window manager may take the focus away so we can't redirect it.
-  # Finally, restore any grab that was in effect.
-
-  global $w|response
-  tkwait variable $w|response
-  catch {focus $oldFocus}
-  grab release $w
-  set this(geom) [wm geom $w]
-  wm withdraw $w
-  if {$oldGrab != ""} {
-      if {$grabStatus == "global"} {
-         grab -global $oldGrab
-      } else {
-         grab $oldGrab
-      }
-  }
-  return [set $w|response]
-}
-
-proc CompareNoCase {s1 s2} {
-  return [string compare [string tolower $s1] [string tolower $s2]]
-}
-
-proc FileSelect.LoadFiles {w} {
-    upvar #0 $w this
-
-    # split all names in the current directory into dirs and files
-    set dirs ""
-    set files ""
-    set filter ""
-    if [info exists this(filter)] { set filter $this(filter) }
-    switch -- $filter "" { set filter * }
-    foreach f [lsort -command CompareNoCase [glob -nocomplain .* *]] {
-       if [file isdir $f] {
-         # exclude the '.' and '..' directory
-         switch -- $f . - .. continue
-         lappend dirs $f
-       }
-       if [file isfile $f] {
-         # filter files
-         switch -glob -- $f $filter { lappend files $f }
-       }
-    }
-
-    # Fill in the file list
-    $this(fileList) delete 0 end
-    foreach d $dirs {
-       # append directory mark to the name (tricky)
-       set d [string trimright [file join $d a] a]
-       $this(fileList) insert end $d
-    }
-    foreach f $files { $this(fileList) insert end $f }
-}
-
-proc FileSelect.LoadPath {w} {
-    upvar #0 $w this
-
-    # convert path to list
-    set dirs [file split $this(path)]
-
-    # compute prefix paths
-    set path ""
-    set paths ""
-    foreach d $dirs {
-       set path [file join $path $d]
-       lappend paths $path
-    }
-
-    # reverse dirs and paths
-    set rev_dirs ""
-    foreach d $dirs { set rev_dirs [concat [list $d] $rev_dirs] }
-    set rev_paths ""
-    foreach p $paths { set rev_paths [concat [list $p] $rev_paths] }
-
-    # update the path menubutton
-    global $w|currDir
-    set $w|currDir [lindex $rev_dirs 0]
-
-    # fill in the path menu
-    $this(pathMenu) delete 0 end
-    foreach d [lrange $rev_dirs 1 end] p [lrange $rev_paths 1 end] {
-       $this(pathMenu) add command -label $d -command "FileSelect.cd $w $p"
-    }
-}
-
-proc FileSelect.Selected {w x y} {
-    upvar #0 $w this
-
-    # determine the selected list element
-    set elem [$this(fileList) get [$this(fileList) index @$x,$y]]
-    switch -- $elem "" return
-
-    # directories cannot be selected (they can only be chosen)
-    if [file isdir $elem] return
-
-    $this(fileEntry) delete 0 end
-    $this(fileEntry) insert end $elem
-}
-
-proc FileSelect.Chosen {w x y} {
-    upvar #0 $w this
-
-    # determine the selected list element
-    set elem [$this(fileList) get [$this(fileList) index @$x,$y]]
-    switch -- $elem "" return
-
-    # if directory then cd, otherwise close the dialog
-    if [file isdir $elem] { FileSelect.cd $w $elem } { FileSelect.Close $w 1 }
-}
-
-proc FileSelect.Close {w {ok 1}} {
-  # trigger the end of dialog
-  upvar #0 $w this $w|response response
-  if $ok {
-    set response [file join $this(path) [$this(fileEntry) get]]
-  } else {
-    set response ""
-  }
-}
-
-proc FileSelect.cd {w dir} {
-    upvar #0 $w this
-
-    if [catch {cd $dir} errmsg] {
-       puts "xspin warning: $errmsg"
-       return
-    }
-
-    set this(path) [pwd]
-    FileSelect.LoadFiles $w
-    FileSelect.LoadPath $w
-}
-
-proc open_spec {{curr 1}} {
-  global Fname
-
-  if $curr {
-    switch -- $Fname "" {
-      add_log "no file to reopen, try \"Open ...\""
-      return
-    }
-    readinfile .inp.t $Fname
-  } else {
-    # try to use the predefined file selection dialog
-    switch [info commands tk_getOpenFile] "" {
-      # some old version of Tk so use our own file selection dialog
-      set fileselect "FileSelect open"
-    } default {
-      set fileselect "tk_getOpenFile"
-    }
-    set init_dir [pwd]
-    # get the file (return if the file selection dialog canceled)
-    switch -- [set file [eval $fileselect -initialdir { $init_dir } ]] "" return
-  
-    # load the file and update some items if the file loaded successfully
-    if [readinfile .inp.t $file] {
-      rmfile pan_in.trail
-      cpfile $file.trail pan_in.trail
-      set Fname $file
-      set_path $Fname
-    }
-  }
-}
-
-
-proc set_path {Fname} {
-       #cd to directory in file
-       set fullpath [split $Fname /]
-       set nlen [llength $fullpath]
-       set fullpath [lrange $fullpath 0 [expr $nlen - 2]]      ;# get rid of filename
-       set wd [join $fullpath /]                               ;#put path back together
-       catch {cd $wd}
-}
-
-set defname ""
-
-proc loaddefault_tl {} {
-       global Fname defname
-
-       if {$defname ==""} {
-               set file2 "$Fname.ltl"
-       } else {
-               set file2 $defname
-       }
-       catch {
-               .tl.main.e1 delete 0 end
-               .tl.macros.t delete 0.0 end
-               .tl.notes.t delete 0.0 end
-               .tl.never.t delete 0.0 end
-               .tl.results.t delete 0.0 end
-       }
-       if {![file exists $file2]} {
-               .tl.notes.t insert end "Use Load to open a file or a template."
-               return
-       }
-       catch {
-               .tl.notes.title configure -text "Notes \[file $file2]:"
-       }
-       readinfile .tl.never.t $file2
-       catch { extract_defs }
-}
-
-set suffix "ltl"
-
-proc browse_tl {} {
-       global defname suffix
-
-       set suffix "ltl"
-
-       catch {destroy .b}
-       toplevel .b
-       wm iconname .b "Load"
-
-       frame .b.top
-       frame .b.bot
-       scrollbar .b.top.scroll -command ".b.top.list yview"
-       listbox .b.top.list -yscroll ".b.top.scroll set" -relief raised 
-
-       button .b.zap -text "Cancel" -command "destroy .b"
-       button .b.all -text "Show All Files" \
-               -command {
-                       set suffix ""
-                       fillerup ""
-                       destroy .b.all
-               }
-       message .b.bot.msg -text "Dir: "
-       entry .b.bot.entry -textvariable dir -relief sunken -width 20
-       pack append .b.top \
-               .b.top.scroll {right filly} \
-               .b.top.list {left expand fill}
-       pack append .b.bot \
-               .b.bot.msg {left} \
-               .b.bot.entry {left}
-       pack append .b \
-               .b.top {top fillx} \
-               .b.all {left} \
-               .b.zap {left} \
-               .b.bot {left}
-       
-       bind .b.bot.entry <Return> {
-               set nd [.b.bot.entry get]
-               if {[file isdirectory $nd]} {
-                       cd $nd
-                       fillerup $suffix
-                       add_log "cd $nd"
-               }
-       }
-
-       fillerup  $suffix
-       bind .b.top.list <Double-Button-1> {
-               set file2 [selection get]
-               if {[string first "---" $file2] >= 0} {
-                       # ignore
-               } elseif {[string first "Invariance" $file2] >= 0} {
-                       catch {
-                       .tl.main.e1 delete 0 end
-                       .tl.macros.t delete 0.0 end
-                       .tl.notes.t delete 0.0 end
-                       .tl.never.t delete 0.0 end
-                       .tl.results.t delete 0.0 end
-
-                       .tl.main.e1 insert end "\[\] (p)"
-                       .tl.notes.t insert end "'p' is invariantly true throughout
-an execution"
-                       .tl.notes.title configure \
-                               -text "Notes \[template $file2]:"
-                       do_ltl
-                       destroy .b
-                       }
-               } elseif {[string first "Response" $file2] >= 0} {
-                       catch {
-                       .tl.main.e1 delete 0 end
-                       .tl.macros.t delete 0.0 end
-                       .tl.notes.t delete 0.0 end
-                       .tl.never.t delete 0.0 end
-                       .tl.results.t delete 0.0 end
-
-                       .tl.main.e1 insert end "\[\] ((p) -> (<> (q)))"
-                       .tl.notes.t insert end "if 'p' is true in at least one state,
-then sometime thereafter 'q' must also
-become true at least once."
-                       .tl.notes.title configure \
-                               -text "Notes \[template $file2]:"
-                       do_ltl
-                       destroy .b
-                       }
-               } elseif {[string first "Precedence" $file2] >= 0} {
-                       catch {
-                       .tl.main.e1 delete 0 end
-                       .tl.macros.t delete 0.0 end
-                       .tl.notes.t delete 0.0 end
-                       .tl.never.t delete 0.0 end
-                       .tl.results.t delete 0.0 end
-
-                       .tl.main.e1 insert end "\[\] ((p) -> ((q) U (r)))"
-                       .tl.notes.t insert end "'p' is a trigger, or 'enabling' condition that
-determines when this requirement becomes applicable
-'r' is the fullfillment of the requirement, and
-'q' is a condition that must remain true in the interim."
-                       .tl.notes.title configure \
-                               -text "Notes \[template $file2]:"
-                       do_ltl
-                       destroy .b
-                       }
-               } elseif {[string first "Objective" $file2] >= 0} {
-                       catch {
-                       .tl.main.e1 delete 0 end
-                       .tl.macros.t delete 0.0 end
-                       .tl.notes.t delete 0.0 end
-                       .tl.never.t delete 0.0 end
-                       .tl.results.t delete 0.0 end
-
-                       .tl.main.e1 insert end "\[\] ((p) -> <>((q) || (r)))"
-                       .tl.notes.t insert end "'p' is a trigger, or 'enabling' condition that
-determines when this requirement becomes applicable
-'q' is the fullfillment of the requirement, and
-'r' is a discharging condition that terminates the
-applicability of the requirement."
-
-                       .tl.notes.title configure \
-                               -text "Notes \[template $file2]:"
-                       do_ltl
-                       destroy .b
-                       }
-               } elseif {[file isdirectory $file2]} then {
-                       cd $file2
-                       fillerup $suffix
-                       add_log "cd $file2"
-               } else {
-                       if {![file isfile $file2]} {
-                               set file2 ""
-                       } else {
-                               catch {
-                               .tl.main.e1 delete 0 end
-                               .tl.macros.t delete 0.0 end
-                               .tl.notes.t delete 0.0 end
-                               .tl.never.t delete 0.0 end
-                               .tl.results.t delete 0.0 end
-                               .tl.notes.title configure \
-                                       -text "Notes \[file $file2]:"
-                               }
-                               readinfile .tl.never.t $file2
-                               set defname $file2
-                               catch { extract_defs }
-                               set dir [pwd]
-                               destroy .b
-                       }
-               }
-       }
-}
-
-proc reopen {} {
-       global Fname
-
-       catch {readinfile .inp.t $Fname} ermsg
-       if {[string length $ermsg]<=1} { return }
-       add_log $ermsg
-       catch { tk_messageBox -icon info -message $ermsg }
-}
-
-proc check_xsp {f} {
-       set ff ${f}.xsp
-       if [catch {set fd [open $ff r]} errmsg] {
-               # add_log "no file $ff"
-               return
-       }
-       add_log "reading $ff file"
-       update
-       while {[gets $fd line] > -1} {
-               if {[string first "X:" $line] == 0} {
-                       set C [string range $line 3 end]
-                       add_log "X: $C"
-                       update
-                       catch { eval exec $C } errmsg
-                       if {$errmsg != ""} { add_log $errmsg }
-               }
-               if {[string first "L:" $line] == 0} {
-                       set N [string range $line 3 end]
-                       catch {.log.t configure -height $N -bg black -fg gold}
-               }
-       }
-}
-
-proc writeoutfile {from to} {
-
-  if ![file_ok $to] { return 0 }
-
-  if [catch {set fd [open $to w]} errmsg] {
-    add_log $errmsg
-    catch { tk_messageBox -icon info -message $ermsg }
-    return 0
-  }
-
-  add_log "<saved spec in $to>"
-  puts $fd [string trimright [$from get 0.0 end] "\n"]
-# puts -nonewline $fd [$from get 0.0 end]
-  close $fd
-  return 1
-}
-
-proc readinfile {into from} {
-
-  if [catch {set fd [open $from r]} errmsg] {
-    add_log $errmsg
-    catch { tk_messageBox -icon info -message $ermsg }
-    return 0
-  }
-       
-  $into delete 0.0 end
-  while {[gets $fd line] > -1} { $into insert end $line\n }
-  catch { close $fd }
-  add_log "<open $from>"
-
-  global LastGenerate
-  set LastGenerate ""  ;# used in Validation.tcl
-  return 1
-}
-
-proc fillerup {suffix} {
-       wm title .b [pwd]
-       .b.top.list delete 0 end
-
-       set dotdot 0
-       set l {}
-       catch { if {$suffix != ""} {
-                       set l [lsort [glob *.$suffix]]
-               } else {
-                       set l [lsort [glob *]]
-       }       }
-       foreach i $l {
-               .b.top.list insert end $i
-               if {$i == ".."} { set dotdot 1 }
-       }
-       if {$dotdot == 0} {
-               .b.top.list insert 0 ".."
-       }
-       if {$suffix != ""} {
-               .b.top.list insert 0 "------files:--------"
-               .b.top.list insert 0 "Objective(p,q,r)"
-               .b.top.list insert 0 "Precedence(p,q,r)"
-               .b.top.list insert 0 "Response(p,q)"
-               .b.top.list insert 0 "Invariance(p)"
-               .b.top.list insert 0 "-----templates:-----"
-       }
-}
-
-proc gotoline {} {
-       global BG FG
-
-       catch { destroy .ln }
-       toplevel .ln
-       wm title .ln "Goto Line"
-       wm iconname .ln "Goto"
-
-       label .ln.lab -text "Enter line number:"
-       entry .ln.ent -width 20 -relief sunken -textvariable lno
-       pack append .ln \
-               .ln.lab {left padx 1m} \
-               .ln.ent {right expand}
-       bind .ln.ent <Return> {
-               .inp.t tag remove hilite 0.0 end
-               .inp.t tag add hilite $lno.0 $lno.1000
-               .inp.t tag configure hilite \
-                       -background $FG -foreground $BG
-               .inp.t yview -pickplace [expr $lno-1]
-       }
-       focus .ln.ent
-}
-
-proc savebox {b} {
-       set fname [.c$b.f.e1 get]
-       if {[file_ok $fname]==0} return
-       set fd [open $fname w]
-       add_log "<saved output in $fname>"
-       puts $fd "[.c$b.z.t get 0.0 end]" nonewline
-       catch "flush $fd"
-       catch "close $fd"
-}
-
-proc doplace {a b} {
-       global PlaceBox
-       set PlaceBox($a) [wm geometry .c$b]
-       set k [string first "\+" $PlaceBox($a)]
-       if {$k > 0} {
-               set PlaceBox($a) [string range $PlaceBox($a) $k end]
-       }
-}
-
-proc mkbox {n m p {wd 60} {ht 10} {xp 200} {yp 200}} {
-       global boxnr FG BG PlaceBox HelvBig
-       global ind old_ss old_insert new_insert;# for search capability
-
-       incr boxnr
-
-       toplevel .c$boxnr
-       wm title .c$boxnr $n
-       wm iconname .c$boxnr $m
-
-       if {[info exists PlaceBox($n)] == 0} {
-               set PlaceBox($n) "+$xp+$yp"
-       } 
-       wm geometry .c$boxnr $PlaceBox($n)
-
-       #initialize search parameters
-       set ind 1.0
-       set old_ss ""
-       set old_insert ""
-       set new_insert ""
-       frame .c$boxnr.d ;# search bar
-               label .c$boxnr.d.l -text "Search for: "
-               entry .c$boxnr.d.e -width 15
-               bind .c$boxnr.d.e <KeyPress-Return> "search_sim .c$boxnr.z.t .c$boxnr.d.e .c$boxnr" 
-               button .c$boxnr.d.b -text "Find" -command "search_sim .c$boxnr.z.t .c$boxnr.d.e .c$boxnr"
-
-       pack .c$boxnr.d -side top -fill x
-       pack .c$boxnr.d.b -side right
-       pack .c$boxnr.d.e -side right
-       pack .c$boxnr.d.l -side right
-
-       frame .c$boxnr.z
-       
-       text .c$boxnr.z.t -relief raised -bd 2 -font $HelvBig \
-               -background $BG -foreground $FG \
-               -yscrollcommand ".c$boxnr.z.s set" \
-               -setgrid 1 -width $wd -height $ht -wrap word
-       bind .c$boxnr.z.t <ButtonRelease-1> "+update idletasks; update_insert .c$boxnr.z.t"
-       scrollbar .c$boxnr.z.s \
-               -command ".c$boxnr.z.t yview"
-       pack append .c$boxnr.z \
-               .c$boxnr.z.s {left filly} \
-               .c$boxnr.z.t {left expand fill}
-
-       button .c$boxnr.b -text "Close" \
-       -command "doplace {$n} {$boxnr}; destroy .c$boxnr"
-       button .c$boxnr.c -text "Clear" \
-               -command ".c$boxnr.z.t delete 0.0 end"
-       pack append .c$boxnr \
-               .c$boxnr.z {top expand fill} \
-               .c$boxnr.b {right padx 5} \
-               .c$boxnr.c {right padx 5}
-
-       if {[string length $p]>0} {
-               frame  .c$boxnr.f -relief sunken
-               button .c$boxnr.f.e0 -text "Save in: " \
-                       -command "savebox $boxnr"
-               entry  .c$boxnr.f.e1 -relief flat -width 10
-               .c$boxnr.f.e1 insert end $p
-               pack append .c$boxnr.f \
-                       .c$boxnr.f.e0 {left padx 5} \
-                       .c$boxnr.f.e1 {left}
-               pack append .c$boxnr \
-                       .c$boxnr.f {right padx 5}
-       }
-
-       tkwait visibility .c$boxnr
-       raise .c$boxnr
-       return $boxnr
-}
-proc update_insert {t} {
-       global new_insert
-       update idletasks
-       set new_insert [$t index insert]
-}
-
-proc search_sim {t e b} {
-       global ind old_ss old_insert new_insert
-
-       set ss [$e get]
-
-       if {$ss == ""} {
-               return
-               }
-
-       #if user has selected use that lin.char as 'ind'. otherwise use end of last word found
-       #set new_insert [$t index insert]
-       if {$new_insert != $old_insert} {
-               set ind $new_insert ;# this is where we will start searching
-               set old_insert $new_insert ;# update select location
-       }
-       set cur_ind $ind
-       set ind [$t search $ss $ind]
-
-       set old_ss $ss
-       if {$ind != ""} {
-               $t yview -pickplace $ind
-               $t tag configure hilite -foreground black -background white
-               $t tag delete hilite 
-               set split_ind [split $ind "."]
-               set char [lindex $split_ind 1]  
-               set char [incr char [string length $ss]]
-               set indstart $ind
-               set indend ""
-               append indend [lindex $split_ind 0] "." $char
-               $t tag add hilite $indstart $indend
-               $t tag configure hilite -foreground white -background black
-               set ind $indend
-       } else {
-               # set ind 1.0
-               catch { tk_messageBox -icon info -message "no match for $ss" }
-               set ind $cur_ind ;# restore ind to last good value
-               raise $b
-       }       
-
-}
-
-# Tcl/Tk book, page 219
-proc forAllMatches {w pattern} {
-       global BG FG lno
-
-       scan [$w index end] %d numLines
-       for {set i 1} {$i < $numLines} { incr i} {
-               $w mark set last $i.0
-               if {[regexp -indices $pattern \
-                       [$w get last "last lineend"] indices]} {
-                               $w mark set first \
-                                       "last + [lindex $indices 0] chars"
-                               $w mark set last "last + 1 chars \
-                                       + [lindex $indices 1] chars"
-                       .inp.t tag add hilite $i.0 $i.end
-                       .inp.t tag configure hilite \
-                               -background $FG -foreground $BG
-#                      .inp.t yview -pickplace [expr $i-1]
-       }       }
-
-#      move to the next line that matches
-
-       for {set i [expr $lno+1]} {$i < $numLines} { incr i} {
-               $w mark set last $i.0
-               if {[regexp -indices $pattern \
-                       [$w get last "last lineend"] indices]} {
-                               $w mark set first \
-                                       "last + [lindex $indices 0] chars"
-                               $w mark set last "last + 1 chars \
-                                       + [lindex $indices 1] chars"
-                       .inp.t yview -pickplace [expr $i-5]
-                       set lno $i
-                       return
-       }       }
-       for {set i 1} {$i <= $lno} { incr i} {
-               $w mark set last $i.0
-               if {[regexp -indices $pattern \
-                       [$w get last "last lineend"] indices]} {
-                               $w mark set first \
-                                       "last + [lindex $indices 0] chars"
-                               $w mark set last "last + 1 chars \
-                                       + [lindex $indices 1] chars"
-                       .inp.t yview -pickplace [expr $i-5]
-                       set lno $i
-                       return
-       }       }
-       catch {
-               tk_messageBox -icon info -message "No Match of \"$pattern\""
-       }
-}
-
-set noprep 0
-
-proc hasWord {pattern} {
-       global SPIN noprep
-       set err ""
-       if {![file exists pan.pre] && $noprep == 0} {
-               add_log "$SPIN -Z pan_in ;# preprocess input $pattern"
-               catch {exec $SPIN -Z pan_in >&pan.tmp} err
-               # leaves output in pan.pre
-               add_log "<done preprocess>"
-       }
-
-       if {[string length $err] == 0 && $noprep == 0} {
-               set fd [open pan.pre r]
-               while {[gets $fd line] > -1} {
-                 if {[regexp -indices $pattern $line indices]} {
-                       catch "close $fd"
-                       return 1
-               } }
-               catch "close $fd"
-               return 0
-       }
-
-       # else, there were errors, just ignore the include files:
-       set noprep 1
-       add_log "$err"
-       scan [.inp.t index end] %d numLines
-       for {set i 1} {$i < $numLines} { incr i} {
-               .inp.t mark set last $i.0
-               if {[regexp -indices $pattern \
-                       [.inp.t get last "last lineend"] indices]} {
-                               return 1
-               }
-       }
-       return 0
-}
-
-# FSM view option
-
-set nodeX(0) 0
-set nodeY(0) 0
-set Label(0) 0
-set Transit(0) {}
-set TLabel(0) 0
-set Lab2Node(0) 0
-set Dist(0) 0
-set State(0) 0
-set Edges(0) {}
-set New 0
-set MaxDist 0
-set Maxx 0
-set Maxy 0
-set Minx 50
-set Miny 50
-set reached_end 0
-set Scale 1
-
-set cnr        0
-set x 0
-set y 0
-
-proc fsmview {} {
-       global Unix
-
-       add_log "<fsm view option>"
-
-       if {[mk_exec] != 1} { return }
-
-       catch {destroy .z}
-       toplevel .z
-
-       wm title .z "Double-Click Proc"
-
-       listbox .z.list -setgrid 1
-       button .z.b -text "Cancel" -command "destroy .z"
-
-       pack append .z \
-               .z.list {top expand fill} \
-               .z.b {right padx 5}
-
-       if {$Unix} {
-               add_log "./pan -d       # find proc names"; update
-               set fd [open "|./pan -d" w+]
-       } else {
-               add_log "pan -d # find proc names"; update
-               catch { eval exec pan -d >&pan.tmp } err
-               if {$err != ""} {
-                       add_log "error: $err"
-               }
-               set fd [open pan.tmp r]
-       }
-       while {[gets $fd line] > -1} {
-               if {[string first "proctype" $line] >= 0 } {
-                       .z.list insert end \
-                       [string trim [string range $line 9 end]]
-       }       }
-       catch { close $fd }
-
-       bind .z.list <Double-Button-1> {
-               set pfind [selection get]
-               catch { destroy .z }
-               findfsm $pfind
-       }
-       focus .z.list
-}
-
-proc findfsm {pfind} {
-       global Unix New Dist State Edges Label
-       global Transit MaxDist reached_end TLabel DOT
-
-       if {[mk_exec] != 1} { return }
-
-       set src  0; set trn 0; set trg 0
-       set Want 0; set MaxDist 0; set startstate ""
-
-       catch { foreach el [array names State] { unset State($el) } }
-       catch { foreach el [array names Edges] { unset Edges($el) } }
-       catch { foreach el [array names Dist]  { unset Dist($el) } }
-
-       if {$Unix} {
-               add_log "./pan -d       # compute fsm"; update
-               set fd [open "|./pan -d" w+]
-       } else {
-               add_log "pan -d # compute fsm"; update
-               catch { eval exec pan -d >&pan.tmp }
-               set fd [open pan.tmp r]
-       }
-       while {[gets $fd line] > -1} {
-               set k [string first "proctype" $line]
-               if { $k >= 0 } {
-                       if { $Want == 1 } {
-                               break
-                       }
-                       incr k 9
-                       set pname [string range $line $k end]
-
-                       if { [string first $pfind $line] >= 0 \
-                       &&   [string length $pfind] == [string length $pname]} {
-                               set Want 1
-                               set reached_end 0
-                               set nsrc "$pname:0"
-                               set Dist($nsrc) 0
-                               set Label($nsrc) "end"
-                               set Edges($nsrc) {}
-                       }
-               } elseif { $Want == 1 \
-                       && [string first "statement" $line] < 0 
-                       && [string first "state" $line] >= 0} {
-                       scan $line "    state %d -(tr %d)-> state %d" \
-                               src trn trg
-                       if {$trg == 0} { set reached_end 1 }
-
-                       set nsrc "$pname:$src"
-                       set ntrg "$pname:$trg"
-
-                       if {$startstate == ""} { set startstate $nsrc }
-
-                       set k [string first "line" $line]
-                       if { $k > 0 } {
-                               set m [string first "=>" $line]
-                               incr m -1
-                               set lbl [string range $line $k $m]
-                               incr m 3
-                               set action [string range $line $m end]
-                       } else {
-                               set lbl "line 0"
-                               set action "line 0"
-                       }
-                       set Label($nsrc) $lbl
-                       if { [info exists Dist($nsrc)] == 0 } {
-                               set Dist($nsrc) 0
-                               set Edges($nsrc) {}
-                       }
-                       if { [info exists Dist($ntrg)] == 0 } {
-                               set Dist($ntrg) [expr $Dist($nsrc) + 1]
-                               set Edges($ntrg) {}
-                               if {$Dist($ntrg) > $MaxDist } {
-                                       set MaxDist $Dist($ntrg)
-                               }
-                       } else {
-                               if { [expr $Dist($nsrc) + 1] < $Dist($ntrg) } {
-                                       set Dist($ntrg) [expr $Dist($nsrc) + 1]
-                                       if {$Dist($ntrg) > $MaxDist } {
-                                               set MaxDist $Dist($ntrg)
-                                       }
-                       }       }
-if {0 \
-&&  [auto_execok $DOT] != 0 \
-&&  [auto_execok $DOT] != ""} {
-       set z1 [string first "\[" $action]
-       set z2 [string last  "\]" $action]
-       if {$z1 > 0 && $z2 > $z1} {
-               incr z1 -1; incr z2
-               set a1 [string range $action 0 $z1]
-               set a2 [string range $action $z2 end]
-               set action "$a1$a2"
-       }
-                       set kkk "$nsrc;$trg:$action"
-                       lappend Edges($nsrc) "$kkk"
-                       lappend Edges($kkk) $ntrg
-                       lappend Transit($nsrc) "$lbl"
-                       lappend Transit($kkk) ""
-                       set Dist($kkk) $Dist($ntrg)
-                       set Label($kkk) "T3"
-} else {
-                       lappend Edges($nsrc) $ntrg
-                       lappend Transit($nsrc) $action
-}
-               }
-       }
-       if { $Want == 1 } {
-               dograph $pfind $startstate
-       } else {
-               add_log "sorry, $pfind not found..."
-               catch {
-               tk_messageBox -icon info -message "$pfind not found..."
-               }
-       }
-       catch "close $fd"
-       add_log "<done>"
-       update
-}
-
-proc plunknode {el prefix} {
-       global State Label TLabel
-       global x y
-
-       set pn [string range $el $prefix end]
-       set State($el) [mkNode "$Label($el)" $pn $x $y]
-
-       if { $x > 250 } {
-               set x [expr $x - 250]
-               set x [expr 250 - $x]
-       } else {
-               set x [expr 250 - $x]
-               incr x 75
-               set x [expr 250 + $x]
-       }
-}
-
-proc dograph {n s} {
-       global Dist Edges Label Transit MaxDist State ELabel
-       global cnr lcnr reached_end x y Unix DOT
-       set count -1
-
-       set lcnr [mkcanvas "FSM $n" $n 300 300 0]
-       set prefix [string length $n]
-       incr prefix
-       set y 0
-
-       while {$count < $MaxDist} {
-               incr count
-               incr y 50
-               set x 250
-               foreach el [array names Dist] {
-                       if { [ string first $n $el ] >= 0 \
-                       &&   $Dist($el) == $count \
-                       &&   $el != "$n:0" } {
-                               plunknode $el $prefix
-               }       }
-       }
-       if {$reached_end == 1} {
-               # force end state at the bottom
-               incr y 50
-               set x 250
-               plunknode "$n:0" $prefix
-       }
-
-       foreach el [array names Edges] {
-               if { [ string first $n $el ] >= 0 } {
-                       for {set i 0} { [lindex $Edges($el) $i] != "" } {incr i} {
-                               set ntrg [lindex $Edges($el) $i]
-                               set lbl  [lindex $Transit($el) $i]
-                               mkEdge $lbl $State($el) $State($ntrg)
-                               set ELabel($el,$ntrg) "$lbl"
-                       }
-       }       }
-       addscales $lcnr
-
-       .f$cnr.c itemconfigure $State($s) -outline red; update
-
-       if {[auto_execok $DOT] != 0 \
-       &&  [auto_execok $DOT] != ""} {
-               dodot $n
-#              button .f$lcnr.b66 -text "Redraw with Dot"  -command "dodot $n"
-#              pack append .f$lcnr .f$lcnr.b66 {right padx 5}
-       }
-       update
-}
-
-proc mkNode {n t x y} {
-       # tcl book p. 213
-       global cnr NodeWidth NodeHeight HelvBig
-       global nodeX nodeY New TLabel Lab2Node
-
-       if {[string first ";" $t] > 0} {
-               set New [.f$cnr.c create rectangle [expr $x-1] [expr $y-1] \
-                       [expr $x+1] [expr $y+1] \
-                       -outline white \
-                       -fill white \
-                       -tags node]
-               set z [string first ":" $t]; incr z
-               set t [string range $t $z end]
-               set Lab [.f$cnr.c create text $x $y -font $HelvBig -text $n -tags node]
-       } else {
-               set New [.f$cnr.c create oval [expr $x-10] [expr $y-10] \
-                       [expr $x+10] [expr $y+10] \
-                       -outline black \
-                       -fill white \
-                       -tags node]
-               set Lab [.f$cnr.c create text $x $y -font $HelvBig -text $n -tags node]
-       
-               .f$cnr.c bind $Lab <Any-Enter> "
-                       .f$cnr.c itemconfigure {$Lab} -fill black -text {$t}
-                       if {[string first \"end\" $n] < 0 } { set_src {$t} }
-               "
-               .f$cnr.c bind $Lab <Any-Leave> "
-                       .f$cnr.c itemconfigure {$Lab} -fill black -text {$n}
-               "
-       }
-       set nodeX($New) $x
-       set nodeY($New) $y
-       set TLabel($New) $Lab
-       set Lab2Node($Lab) $New
-       set NodeWidth($New) 10
-       set NodeHeight($New) 10
-
-       update
-       return $New
-}
-
-proc set_src {n} {
-       set where 0
-       scan $n "line %d" where
-       .inp.t tag remove hilite 0.0 end
-       src_line $where
-}
-
-proc mkEdge {L a b} {
-       global cnr Xrem Yrem TransLabel HelvBig
-       global nodeX nodeY edgeHead edgeTail
-
-       if { $nodeY($b) > $nodeY($a) } {
-               set ydiff -11
-       } elseif { $nodeY($b) < $nodeY($a) } {
-               set ydiff 11
-       } else {
-               set ydiff 0
-       }
-       if { $nodeX($b) > $nodeX($a) } {
-               set xdiff -6
-       } elseif { $nodeX($b) < $nodeX($a) } {
-               set xdiff 6
-       } else {
-               set xdiff 0
-       }
-       set edge [.f$cnr.c create line \
-               $nodeX($a) $nodeY($a) \
-               [expr $nodeX($b) + $xdiff] \
-               [expr $nodeY($b) + $ydiff] \
-                -arrow both -arrowshape {4 3 3} ]
-       .f$cnr.c lower $edge
-       lappend edgeHead($a) $edge
-       lappend edgeTail($b) $edge
-
-       set Xrem($edge) $xdiff
-       set Yrem($edge) $ydiff
-
-       set midX [expr $nodeX($a) + $nodeX($b)]
-       set midX [expr $midX / 2 ]
-       set midY [expr $nodeY($a) + $nodeY($b)]
-       set midY [expr $midY / 2 ]
-
-       set TransLabel($a,$b) \
-       [.f$cnr.c create text $midX $midY -font $HelvBig -tags texttag]
-
-       .f$cnr.c bind $edge <Button-1> "
-               .f$cnr.c coords $TransLabel($a,$b) \[.f$cnr.c canvasx %x\] \[.f$cnr.c canvasy %y\]
-               .f$cnr.c itemconfigure $TransLabel($a,$b) \
-                       -fill black -text {$L} -font $HelvBig
-       "
-       .f$cnr.c bind $edge <ButtonRelease-1> "
-               .f$cnr.c itemconfigure $TransLabel($a,$b) \
-                       -fill black -text {}
-       "
-}
-
-proc moveNode {cnr node mx my together} {
-       global edgeHead edgeTail TLabel NodeWidth NodeHeight
-       global nodeX nodeY Lab2Node
-       global Xrem Yrem Scale
-
-       set x [.f$cnr.c coords $node]
-       if {[llength $x] == 2} { set node $Lab2Node($node) }
-
-       set mx [.f$cnr.c canvasx $mx]
-       set my [.f$cnr.c canvasy $my]
-
-       set wx $NodeWidth($node)
-       set wy $NodeHeight($node)
-
-       .f$cnr.c coords $node \
-               [expr $mx-$wx] [expr $my-$wy] \
-               [expr $mx+$wx] [expr $my+$wy]
-       .f$cnr.c coords $TLabel($node) $mx $my
-
-       set nodeX($node) $mx
-       set nodeY($node) $my
-       if {$together == 0} { return }
-       catch {
-       foreach edge $edgeHead($node) {
-               set ec [.f$cnr.c coords $edge]
-               set nx [expr $nodeX($node) + $Xrem($edge)*$Scale]
-               set ny [expr $nodeY($node) + $Yrem($edge)*$Scale]
-               .f$cnr.c coords $edge \
-                       $nx $ny \
-                       [lindex $ec 2] [lindex $ec 3]
-       }}
-       catch {
-       foreach edge $edgeTail($node) {
-               set ec [.f$cnr.c coords $edge]
-               set nx [expr $nodeX($node) + $Xrem($edge)*$Scale]
-               set ny [expr $nodeY($node) + $Yrem($edge)*$Scale]
-               .f$cnr.c coords $edge \
-                       [lindex $ec 0] [lindex $ec 1] \
-                       $nx $ny
-       }}
-}
-
-set PlaceCanvas(msc)   ""
-
-proc mkcanvas {n m geox geoy placed} {
-       global cnr tk_version
-       global Chandle Sticky
-       global FG BG Ptype PlaceCanvas
-
-       incr cnr
-       toplevel .f$cnr
-       wm title .f$cnr "$n"
-       wm iconname .f$cnr $m
-       if {$placed} {
-               if {$PlaceCanvas($m) == ""} {
-                       set PlaceCanvas($m) "+$geox+$geoy"
-               }
-               set k [string first "\+" $PlaceCanvas($m)]
-               if {$k > 0} {
-               set PlaceCanvas($m) [string range $PlaceCanvas($m) $k end]
-               }
-               wm geometry .f$cnr $PlaceCanvas($m)
-       }
-       wm minsize .f$cnr 100 100
-
-       if {[string first "4." $tk_version] == 0 \
-       ||  [string first "8." $tk_version] == 0} {
-               set cv [canvas .f$cnr.c  -relief raised -bd 2\
-                       -scrollregion {-15c -5c 30c 40c} \
-                       -background $BG \
-                       -xscrollcommand ".f$cnr.hscroll set" \
-                       -yscrollcommand ".f$cnr.vscroll set"]
-               scrollbar .f$cnr.vscroll -relief sunken \
-                       -command ".f$cnr.c yview"
-               scrollbar .f$cnr.hscroll -relief sunken -orient horiz \
-                       -command ".f$cnr.c xview"
-       } else {
-               set cv [canvas .f$cnr.c  -relief raised -bd 2\
-                       -scrollregion {-15c -5c 30c 40c} \
-                       -background $BG \
-                       -xscroll ".f$cnr.hscroll set" \
-                       -yscroll ".f$cnr.vscroll set"]
-               scrollbar .f$cnr.vscroll -relief sunken \
-                       -command ".f$cnr.c yview"
-               scrollbar .f$cnr.hscroll -relief sunken -orient horiz \
-                       -command ".f$cnr.c xview"
-       }
-       set Chandle($cnr) $cv
-       #-width 500 -height 500
-
-       button .f$cnr.b1 -text "Close" \
-               -command "set PlaceCanvas($m) [wm geometry .f$cnr]; destroy .f$cnr"
-       button .f$cnr.b2 -text "Save in: $m.ps" \
-               -command "$cv postscript -file $m.ps -colormode $Ptype"
-
-       pack append .f$cnr \
-               .f$cnr.vscroll {right filly} \
-               .f$cnr.hscroll {bottom fillx} \
-               .f$cnr.c {top expand fill}
-
-       if {$m == "msc"} {
-               set Sticky($cnr) 0
-               checkbutton .f$cnr.b6 -text "Preserve" \
-                       -variable Sticky($cnr) \
-                       -relief flat
-               pack append .f$cnr \
-                       .f$cnr.b6 { right padx 5}
-       }
-       pack append .f$cnr \
-               .f$cnr.b1 {right padx 5} \
-               .f$cnr.b2 {right padx 5}
-
-       bind $cv <2> "$cv scan mark %x %y"      ;# Geert Janssen, TUE
-       bind $cv <B2-Motion> "$cv scan dragto %x %y"
-
-       .f$cnr.c bind node <B1-Motion> "
-               moveNode $cnr \[.f$cnr.c find withtag current] %x %y 1
-       "
-
-#      .f$cnr.c bind node <B2-Motion> "
-#              moveNode $cnr \[.f$cnr.c find withtag current] %x %y 1
-#      "
-
-       tkwait visibility .f$cnr
-       return $cnr
-}
-
-proc addscales {p} {
-       global Chandle Scale
-
-       catch {
-               set cv $Chandle($p)
-               button .f$p.b4 -text "Larger" \
-                       -command "$cv scale all 0 0 1.1 1.1; set Scale [expr $Scale*1.1]"
-               button .f$p.b5 -text "Smaller" \
-                       -command "$cv scale all 0 0 0.9 0.9; set Scale [expr $Scale*0.9]"
-               pack append .f$p \
-                       .f$p.b4 {right padx 5} \
-                       .f$p.b5 {right padx 5}
-       }
-}
-
-proc dodot {n} {
-       global Edges edgeHead edgeTail NodeWidth NodeHeight Maxx Maxy
-       global State ELabel TransLabel Unix cnr lcnr Xrem Yrem DOT
-
-       add_log "<dot graph layout...>"
-       set fd [open "|$DOT" w+]
-
-       puts $fd "digraph dodot {"
-
-       foreach el [array names Edges] {
-               if { [ string first $n $el ] >= 0 } {
-               for {set i 0} { [lindex $Edges($el) $i] != "" } {incr i} {
-                       set ntrg [lindex $Edges($el) $i]
-                       puts $fd " \"$el\" -> \"$ntrg\"; "
-               }
-       }}
-
-       puts $fd "}"
-       flush $fd
-       set ends ""
-       set nodot 1
-       while {[gets $fd line] > -1} {
-               if {[string first "\}" $line] >= 0} {
-                       break;
-               }
-               set dd [string length $line]; incr dd -1
-               while {[string range $line $dd $dd] == "\\"} {
-                       gets $fd more
-                       set line "[string range $line 0 [expr $dd-1]]$more"
-                       set dd [string length $line]; incr dd -1
-               }
-               if {[string first " -> " $line] >= 0} {
-                       set a [string first "\[pos=\"" $line]; incr a 8
-                       set b [string first "\"\];" $line]; incr b -1
-                       set b2 [string first "->" $line]
-                       set line1 [string range $line 0 [expr $a - 9]]
-                       set src [string range $line1 0 [expr $b2 - 1]]
-                       set src [string trim $src "      \""]
-                       set trg [string range $line1 [expr $b2 + 3] [expr $a - 1]]
-                       set trg [string trim $trg "      \""]
-                       set tp [string range $line [expr $a-2] [expr $a-2]]
-                       set line [string range $line $a $b]
-                       set k [split $line " "]
-                       set j [llength $k]
-                       set j2 [trunc [expr $j/2]]
-                       set coords ".f$cnr.c create line "
-                       set spline "-smooth 1"
-                       set nl $ELabel($src,$trg)
-                       if {$tp == "e"} {
-                               set ends "last"
-                               for {set i 1} {$i < $j} {incr i} {
-                                       scan [lindex $k $i] "%d,%d" x y
-                                       set coords " $coords[expr 50 + $x] [expr 50 + $Maxy - $y] "
-                                       if {$i == $j2} {
-                                               .f$cnr.c coords \
-                                                       $TransLabel($State($src),$State($trg)) \
-                                                       [expr 50 + $x] [expr 50 + $Maxy - $y]
-                                               .f$cnr.c itemconfigure \
-                                                       $TransLabel($State($src),$State($trg)) \
-                                                       -fill black -text "$nl"
-                                       }
-                               }
-                               scan [lindex $k 0] "%d,%d" x y
-                               set coords " $coords[expr 50 + $x] [expr 50 + $Maxy - $y] "
-                       } else {
-                               set ends "first"
-                               for {set i 0} {$i < $j} {incr i} {
-                                       scan [lindex $k $i] "%d,%d" x y
-                                       set coords " $coords[expr 50 + $x] [expr 50 + $Maxy - $y] "
-                                       if {$i == $j2} {
-                                               .f$cnr.c coords \
-                                                       $TransLabel($State($src),$State($trg)) \
-                                                       [expr 50 + $x] [expr 50 + $Maxy - $y]
-                                               .f$cnr.c itemconfigure \
-                                                       $TransLabel($State($src),$State($trg)) \
-                                                       -fill black -text "$nl"
-                       }       }       }
-                       set coords "$coords -arrow $ends $spline -tags connector"
-
-                       set ne [eval $coords]
-                       set Xrem($ne) 10
-                       set Yrem($ne) 10
-
-                       continue
-               }
-               if {[string first "node " $line] >= 0 \
-               ||  [string first "\{" $line]    >= 0} {
-                       continue
-               }
-               if {[string first "graph " $line] >= 0} {
-                       set a [string first "\"" $line]; incr a
-                       set b [string last  "\"" $line]; incr b -1
-                       set line [string range $line $a $b]
-                       set k [split $line ","]
-                       if {[llength $k] == 4} {
-                               set Maxx [lindex $k 2]
-                               set Maxy [lindex $k 3]
-                       } else {
-                               set Maxx [lindex $k 0]
-                               set Maxy [lindex $k 1]
-                       }
-                       set nodot 0
-               } else {        ;# a node
-                       set a [string first "\[" $line]; incr a
-                       set b [string last  "\]" $line]; incr b -1
-                       set line1 [string range $line 0 [expr $a - 2]]
-                       set line  [string range $line $a $b]
-                       set nn [string trim $line1 "     \""]
-
-                       set a [string first "pos=" $line]; incr a 5
-                       set b [string first "\"" [string range $line $a end]]
-                       set b [expr $a + $b - 1]
-                       set line1  [string range $line $a $b]
-                       set k [split $line1 ","]
-                       set x [lindex $k 0]
-                       set y [lindex $k 1]
-
-                       set a [string first "width=" $line]; incr a 7
-                       set b [string first "\"" [string range $line $a end]]
-                       set b [expr $a + $b - 1]
-                       set w [expr 75 * [string range $line $a $b]]
-
-                       set a [string first "height=" $line]; incr a 8
-                       set b [string first "\"" [string range $line $a end]]
-                       set b [expr $a + $b - 1]
-                       set h [expr 75 * [string range $line $a $b]]
-
-               catch {
-                       set NodeWidth($State($nn)) [expr $w/2]
-                       set NodeHeight($State($nn)) [expr $h/2]
-                       moveNode $lcnr $State($nn) \
-                               [expr 50 + $x] [expr 50 + $Maxy - $y] 0
-               } err
-#puts $err
-               }
-       }
-       catch { close $fd }
-
-       if {$nodot} {
-               add_log "<cannot find dot>"
-               catch {
-               tk_messageBox -icon info -message "<cannot find dot>"
-               }
-               return
-       }
-
-       foreach el [array names Edges] {
-               if { [ string first $n $el ] >= 0 } {
-                       catch {
-                       foreach edge $edgeHead($State($el)) {
-                               .f$cnr.c delete $edge
-                       }
-                       unset edgeHead($State($el))
-                       unset edgeTail($State($el))
-                       }
-       }       }
-       .f$cnr.c bind node <B1-Motion> {}       ;# no moving
-       .f$cnr.c bind node <B2-Motion> {}
-       catch { destroy .f$lcnr.b6 }
-#      button .f$lcnr.b6 -text "No Labels" \
-#              -command ".f$lcnr.c delete texttag; destroy .f$lcnr.b6"
-       button .f$lcnr.b6 -text "No Labels" \
-               -command "hide_automata_labels .f$lcnr.b6 .f$cnr.c"
-       pack append .f$lcnr .f$lcnr.b6 {right padx 5}
-}
-
-proc hide_automata_labels {b c} {
-       $b configure -text "Add Labels"
-       $c itemconfigure texttag -fill white
-       $b configure -command "show_automata_labels $b $c"
-}
-
-proc show_automata_labels {b c} {
-       $b configure -text "No Labels"
-       $c itemconfigure texttag -fill black
-       $b configure -command "hide_automata_labels $b $c"
-}
-
-proc trunc {p} {
-       set foo [string first "." $p]
-       if {$foo >= 0} {
-               incr foo -1
-               set p [string range $p 0 $foo]
-       }
-       return $p
-}
-
-# Help menus
-
-proc aboutspin {} {
-       global FG BG HelvBig version xversion
-
-       catch {destroy .h}
-       toplevel .h
-
-       wm title .h "About SPIN"
-       wm iconname .h "About"
-       message .h.t -width 600 -background $BG -foreground $FG -font $HelvBig \
-       -text " $version
-Xspin Version $xversion
-
-Spin is an on-the-fly LTL model checking system
-for proving properties of asynchronous software
-system designs, first distributed in 1991.
-
-The master sources for the latest version of
-this software can always be found via:
-
-http://spinroot.com/spin/whatispin.html
-
-For help:  spin_list@spinroot.com
-
-The Spin sources are (c) 1990-2004 Bell Labs,
-Lucent Technologies, Murray Hill, NJ, USA.
-All rights are reserved. This software is for
-educational and research purposes only.
-No guarantee whatsoever is expressed or implied
-by the distribution of this code.
-"
-       button .h.b -text "Ok" -command {destroy .h}
-       pack append .h .h.t {top expand fill}
-       pack append .h .h.b {top}
-}
-
-proc promela {} {
-       global FG BG HelvBig
-
-       catch {destroy .h}
-       toplevel .h
-
-       wm title .h "Promela URL"
-       wm iconname .h "Promela"
-       message .h.t -width 600 -background $BG -foreground $FG -font $HelvBig \
-       -text "All Promela references are available online:
-
-http://spinroot.com/spin/Man/index.html
-
-"
-       button .h.b -text "Ok" -command {destroy .h}
-       pack append .h .h.t {top expand fill}
-       pack append .h .h.b {top}
-}
-
-proc helper {} {
-       global FG BG HelvBig
-
-       catch {destroy .h}
-       toplevel .h
-
-       wm title .h "Help with Xspin"
-       wm iconname .h "Help"
-       message .h.t -background $BG -foreground $FG -font $HelvBig \
-       -text "\
-Spin Version Controller - (c) 1993-2004 Bell Laboratories
-
-Enter a Promela model into the main text window, or 'Open'
-one via the File Menu (e.g., from Spin's Test directory).
-Once loaded, you can revert to the stored version of the file
-with option ReOpen.  Select Clear to empty the text window.
-
-In the log, just below the text-window, background
-commands are printed that Xspin generates.
-Outputs from Simulation and Verification runs always
-appear in separate windows.
-
-All run-time options are available through the Run menu.
-A typical way of working with Xspin is to use:
-
-- First a Syntax Check to get hints and warnings
-- Random Simulation for further debugging
-- Add the properties to be verified (assertions, never claims)
-- Perform a Slicing Check to check for redundancy
-- Perform Verification for a correctness proof
-- Guided Simulation to inspect errors reported by
-  the Verification option
-
-Clicking Button-1 in the main window updates the
-Line number display at the top of the window -- as a
-simple way of finding out at what line you are.
-
-You can also use another editor to update the
-specifications outside Xspin, and use the ReOpen
-command from the File menu to refresh the Xspin
-edit buffer before starting each new simulation or
-verification run."
-       button .h.b -text "Ok" -command {destroy .h}
-       pack append .h .h.t {top expand fill}
-       pack append .h .h.b {top}
-}
-
-# LTL interface
-
-set formula ""
-set tl_stat 0
-
-proc put_template {s} {
-       .tl.main.e1 delete 0 end
-       .tl.main.e1 insert end "$s"
-}
-
-set PlaceTL    "+100+1"
-
-proc call_tl {} {      ;# expanded interface
-       global formula tl_stat nv_typ an_typ cp_typ
-       global FG BG Fname firstime PlaceTL
-
-       catch {destroy .tl}
-       toplevel .tl
-
-       set k [string first "\+" $PlaceTL]
-       if {$k > 0} {
-               set PlaceTL [string range $PlaceTL $k end]
-       }
-
-       wm title .tl "Linear Time Temporal Logic Formulae"
-       wm iconname .tl "LTL"
-       wm geometry .tl $PlaceTL
-
-       frame .tl.main
-       entry .tl.main.e1 -relief sunken \
-               -background $BG -foreground $FG
-       label .tl.main.e2 -text "Formula: "
-
-       frame .tl.op
-       set alw {\[\] }
-       set eve {\<\> }
-       pack append .tl.op [label .tl.op.s0 -text "Operators: " \
-               -relief flat] {left}
-       pack append .tl.op [button .tl.op.always -width 1 -text "\[\]" \
-               -command ".tl.main.e1 insert insert \"$alw \""] {left}
-       pack append .tl.op [button .tl.op.event -width 1 -text "\<\>" \
-               -command ".tl.main.e1 insert insert \"$eve \""] {left}
-       pack append .tl.op [button .tl.op.until -width 1 -text "U" \
-               -command ".tl.main.e1 insert insert \" U \""] {left}
-       pack append .tl.op [button .tl.op.impl -width 1 -text "->" \
-               -command ".tl.main.e1 insert insert \" -> \""] {left}
-       pack append .tl.op [button .tl.op.and -width 1 -text "and" \
-               -command ".tl.main.e1 insert insert \" && \""] {left}
-       pack append .tl.op [button .tl.op.or -width 1 -text "or" \
-               -command ".tl.main.e1 insert insert \" || \""] {left}
-       pack append .tl.op [button .tl.op.not -width 1 -text "not" \
-               -command ".tl.main.e1 insert insert \" ! \""] {left}
-
-       frame .tl.b -relief ridge -borderwidth 4
-       label .tl.b.s0 -text "Property holds for: "
-       radiobutton .tl.b.s1 -text "All Executions (desired behavior)" \
-               -variable tl_stat -value 0
-       radiobutton .tl.b.s2 -text "No Executions (error behavior)" \
-               -variable tl_stat -value 1
-       pack append .tl.b \
-               .tl.b.s0 {left} \
-               .tl.b.s1 {left} \
-               .tl.b.s2 {left}
-
-       .tl.main.e1 insert end $formula
-
-       button .tl.main.file -text "Load..." \
-               -command "browse_tl"
-
-       bind .tl.main.e1 <Return> { do_ltl }
-
-       pack append .tl.main \
-               .tl.main.e2 {top left}\
-               .tl.main.e1 {top left expand fill} \
-               .tl.main.file {top right}
-
-       pack append .tl .tl.main {top fillx frame e}
-       pack append .tl .tl.op {top frame w}
-       pack append .tl .tl.b {top fillx frame w}
-
-       frame .tl.macros -relief ridge -borderwidth 4
-       label .tl.macros.title -text "Symbol Definitions:" -relief flat
-       scrollbar .tl.macros.s -relief flat \
-               -command ".tl.macros.t yview"
-       text .tl.macros.t -height 4 -relief raised -bd 2 \
-               -yscrollcommand ".tl.macros.s set" \
-               -background $BG -foreground $FG \
-               -setgrid 1 \
-               -wrap word
-
-       pack append .tl.macros \
-               .tl.macros.title {top frame w} \
-               .tl.macros.s {left filly} \
-               .tl.macros.t {left expand fill}
-
-       frame .tl.notes -relief ridge -borderwidth 4
-       label .tl.notes.title -text "Notes: " -relief flat
-       scrollbar .tl.notes.s -relief flat \
-               -command ".tl.notes.t yview"
-       text .tl.notes.t -height 4 -relief raised -bd 2 \
-               -yscrollcommand ".tl.notes.s set" \
-               -background $BG -foreground $FG \
-               -setgrid 1 \
-               -wrap word
-       pack append .tl.notes \
-               .tl.notes.title {top fillx frame w} \
-               .tl.notes.s {left filly} \
-               .tl.notes.t {left expand fill}
-
-       frame .tl.never
-       frame .tl.never.top
-       label .tl.never.top.title -text "Never Claim:"\
-                -relief flat
-       button .tl.never.top.gc -text "Generate" \
-               -command "do_ltl"
-       pack append .tl.never.top \
-               .tl.never.top.gc {right}\
-               .tl.never.top.title {left}
-
-       scrollbar .tl.never.s -relief flat \
-               -command ".tl.never.t yview"
-       text .tl.never.t -height 8 -relief raised -bd 2 \
-               -yscrollcommand ".tl.never.s set" \
-               -setgrid 1 \
-               -wrap word
-       pack append .tl.never \
-               .tl.never.top {top fillx frame w} \
-               .tl.never.s {left filly} \
-               .tl.never.t {left expand fill}
-
-       frame .tl.results
-       frame .tl.results.top
-
-       button .tl.results.top.svp -text "Run Verification" \
-               -command "do_ltl; basicval2"
-       label .tl.results.top.title -text "Verification Result:"\
-                -relief flat
-       pack append .tl.results.top \
-               .tl.results.top.svp {right}\
-               .tl.results.top.title {left}
-
-       scrollbar .tl.results.s -relief flat \
-               -command ".tl.results.t yview"
-       text .tl.results.t -height 7 -relief raised -bd 2 \
-               -yscrollcommand ".tl.results.s set" \
-               -setgrid 1 \
-               -wrap word
-       pack append .tl.results \
-               .tl.results.top {top fillx frame w} \
-               .tl.results.s {left filly} \
-               .tl.results.t {left expand fill}
-
-       pack append .tl \
-               .tl.notes {top expand fill} \
-               .tl.macros {top expand fill} \
-               .tl.never {top expand fill} \
-               .tl.results {top expand fill} \
-
-       pack append .tl [button .tl.sv -text "Save As.." \
-               -command "save_tl"] {right}
-       pack append .tl [button .tl.exit -text "Close" \
-       -command "set PlaceTL [wm geometry .tl]; destroy .tl"] {right}
-
-       pack append .tl [button .tl.help -text "Help" -fg red \
-               -command "roadmap4"] {left}
-       pack append .tl [button .tl.clear -text "Clear" \
-               -command ".tl.main.e1 delete 0 end; .tl.never.t delete 0.0 end"] {left}
-
-       loaddefault_tl
-       focus .tl.main.e1
-}
-
-proc purge_nvr {foo} {
-       set j [llength $foo]; incr j -1
-       for {set i $j} {$i >= 0} {incr i -1} {
-               set k [lindex $foo $i]
-               set kk [expr $k+1]
-               .tl.never.t delete $k.0 $kk.0
-       }
-}
-
-proc grab_nvr {inp target} {
-
-       set pattern $inp
-       scan [.tl.never.t index end] %d numLines
-       set foo {}
-       set yes 0
-
-       for {set i 1} {$i < $numLines} { incr i} {
-               .tl.never.t mark set last $i.0
-               set have [.tl.never.t get last "last lineend + 1 chars"]
-               if {[regexp -indices $pattern $have indices]} {
-                       lappend foo $i
-                       set yes [expr 1 - $yes]
-                       if {$yes} {
-                               set pattern "#endif"
-                       } else {
-                               set pattern $inp
-                       }
-               }
-               if {$yes && [string first $inp $have] != 0} {
-                       $target insert end "$have"
-                       lappend foo $i
-               }
-       }
-       purge_nvr $foo
-}
-
-proc extract_defs {} {
-       global tl_stat
-
-       set pattern "#define "
-       scan [.tl.never.t index end] %d numLines
-       set foo {}
-       set tl_stat 1
-       for {set i 1} {$i < $numLines} { incr i} {
-               .tl.never.t mark set last $i.0
-               set have [.tl.never.t get last "last lineend + 1 chars"]
-               if {[regexp -indices $pattern $have indices]} {
-                       .tl.macros.t insert end "$have"
-                       lappend foo $i
-               }
-               set have [.tl.never.t get last "last lineend"]
-               set k [string first "Formula As Typed: " $have]
-               if {$k > 0} {
-                       set ff [string range $have [expr $k+18] end]
-                       .tl.main.e1 insert end $ff
-               }
-               if {[string first "To The Negated Formula " $have] > 0} {
-                       set tl_stat 0
-               }
-       }
-       purge_nvr $foo
-
-       grab_nvr "#ifdef NOTES"  .tl.notes.t
-       grab_nvr "#ifdef RESULT" .tl.results.t
-}
-
-proc inspect_ltl {} {
-       global formula
-       set formula "[.tl.main.e1 get]"
-
-       set x $formula
-       regsub -all {\&\&} "$x" " " y; set x $y
-       regsub -all {\|\|} "$x" " " y; set x $y
-       regsub -all {\/\\} "$x" " " y; set x $y
-       regsub -all {\\\/} "$x" " " y; set x $y
-       regsub -all {\!}  "$x" " " y; set x $y
-       regsub -all {<->} "$x" " " y; set x $y
-       regsub -all {\->}  "$x" " " y; set x $y
-       regsub -all {\[\]} "$x" " " y; set x $y
-       regsub -all {\<\>} "$x" " " y; set x $y
-       regsub -all {[()]} "$x" " " y; set x $y
-       regsub -all {\ \ *} "$x" " " y; set x $y
-       regsub -all { U} "$x" " " y; set x $y
-       regsub -all { V} "$x" " " y; set x $y
-       regsub -all { X} "$x" " " y; set x $y
-
-       set predefs " np_ true false "
-
-       set k [split $x " "]
-       set j [llength $k]
-       set line [.tl.macros.t get 0.0 end]
-       for {set i 0} {$i < $j} {incr i} {
-               if {[string length [lindex $k $i]] > 0 \
-               &&  [string first " [lindex $k $i] " $predefs] < 0} {
-                 set pattern "#define [lindex $k $i]"
-                 if {[string first $pattern $line] < 0} {
-                       catch {
-                       .tl.macros.t insert end "$pattern\t?\n"
-                       }
-                       set line [.tl.macros.t get 0.0 end]
-       }       } }
-}
-
-proc do_ltl {} {
-       global formula tl_stat SPIN tk_major tk_minor
-
-       set formula "[.tl.main.e1 get]"
-       .tl.never.t delete 0.0 end
-       update
-
-       catch { inspect_ltl }
-
-       set MostSystems 1       ;# change to 0 only if there are problems
-                               ;# see below
-
-       if {$tl_stat == 0} {
-               add_log "$SPIN -f \"!( $formula )\""
-               if {$MostSystems} {
-                       catch {exec $SPIN -f "!($formula)" >&pan.ltl} err
-               } else {
-                       # this variant was needed on some older systems,
-                       # but it causes problems on some of the newer ones...
-                       catch {exec $SPIN -f \"!($formula)\" >&pan.ltl} err
-               }
-       } else {
-               add_log "$SPIN -f \"( $formula )\""
-               if {$MostSystems} {
-               catch {exec $SPIN -f "($formula)" >&pan.ltl} err
-               } else {
-               # see above
-               catch {exec $SPIN -f \"($formula)\" >&pan.ltl} err
-               }
-       }
-       set lno 0
-
-       if {$err != ""} {
-               add_log "<error: $err>"
-               add_log "hint: check the Help Button for syntax rules"
-       } else {
-               .tl.never.t insert end \
-               "       /*\n"
-               .tl.never.t insert end \
-               "        * Formula As Typed: $formula\n"
-               incr lno 2
-               if {$tl_stat == 0} {
-                       .tl.never.t insert end \
-                       "        * The Never Claim Below Corresponds\n"
-                       .tl.never.t insert end \
-                       "        * To The Negated Formula !($formula)\n"
-                       .tl.never.t insert end \
-                       "        * (formalizing violations of the original)\n"
-                       incr lno 3
-               }
-               .tl.never.t insert end \
-               "        */\n\n"
-               incr lno 2
-       }
-       catch {
-               set fd [open pan.ltl r]
-               while {[gets $fd line] > -1} {
-                       .tl.never.t insert end "$line\n"
-               }
-               close $fd
-       }
-       rmfile pan.ltl
-}
-
-proc dump_tl {bb} {
-
-       if {$bb != ""} {
-               set fnm $bb
-       } else {
-               set fnm [.sv_tl.ent get]
-       }
-
-       if {[file_ok $fnm]==0} return
-       set fd [open $fnm w]
-       add_log "<save claim in $fnm>"
-       catch { puts $fd "[.tl.macros.t get 0.0 end]" nonewline }
-
-       puts $fd "[.tl.never.t get 0.0 end]" nonewline
-
-       catch { puts $fd "#ifdef NOTES"
-               puts $fd "[.tl.notes.t get 0.0 end]" nonewline
-               puts $fd "#endif"
-       }
-       catch { puts $fd "#ifdef RESULT"
-               puts $fd "[.tl.results.t get 0.0 end]" nonewline
-               puts $fd "#endif"
-       }
-
-       catch "flush $fd"
-       catch "close $fd"
-       catch "destroy .sv_tl"
-       catch "focus .tl.main.e1"
-}
-
-proc save_tl {} {
-       global Fname PlaceWarn
-       catch {destroy .sv_tl}
-       toplevel .sv_tl
-
-       wm title .sv_tl "Save Claim"
-       wm iconname .sv_tl "Save"
-       wm geometry .sv_tl $PlaceWarn
-
-       label  .sv_tl.msg -text "Name for LTL File: " -relief flat
-       entry  .sv_tl.ent -width 6 -relief sunken -textvariable fnm
-       button .sv_tl.b1 -text "Ok" -command { dump_tl "" }
-       button .sv_tl.b2 -text "Cancel" -command "destroy .sv_tl"
-       bind   .sv_tl.ent <Return> { dump_tl "" }
-
-       set fnm [.sv_tl.ent get]
-       if {$fnm == ""} {
-               .sv_tl.ent insert end "$Fname.ltl"
-       }
-
-       pack append .sv_tl \
-               .sv_tl.msg {top frame w} \
-               .sv_tl.ent {top frame e expand fill} \
-               .sv_tl.b1 {right frame e} \
-               .sv_tl.b2 {right frame e}
-       focus .sv_tl.ent
-}
-
-proc add_tl {} {
-       global BG FG HelvBig PlaceWarn
-       catch {destroy .warn}
-       toplevel .warn
-       set k [string first "\+" $PlaceWarn]
-       if {$k > 0} {
-               set PlaceWarn [string range $PlaceWarn $k end]
-       }
-
-       wm title .warn "Accept"
-       wm iconname .warn "Accept"
-       wm geometry .warn $PlaceWarn
-
-       message .warn.t -width 300 \
-               -background $BG -foreground $FG -font $HelvBig \
-               -text " \
-Instructions:
-
-1. Save the Never Claim in a file, \
-for instance a file called 'never', \
-using the <Save> button.
-
-2. Insert the line
-
-#include \"never\"
-
-(the name of the file with the claim) \
-at the end of the main specification.
-
-3. Insert macro definitions (#define's) for all \
-propositional symbols used in the formula.
-
-For instance, with LTL formula
-'[] p -> <> q'  add the macro defs:
-
-#define p      (cnt == 1)
-#define q      (cnt > 1)
-
-These macros must be defined just above the line \
-with the #include \"never\" directive
-
-4. Perform the verification, and make sure that \
-the box 'Apply Never Claim' is checked in the \
-Verification Panel (or else the claim is ignored).
-You can have a library of claim files that you can \
-choose from for verification, by changing only the \
-name of the include file.
-
-5. Never claims have no effect during simulation runs.
-
-6. See the HELP->LTL menu for more information.
-
-"
-       button .warn.b -text "Ok" \
-               -command {set PlaceWarn [wm geometry .warn]; destroy .warn}
-       pack append .warn .warn.t {top expand fill}
-       pack append .warn .warn.b {right frame e}
-}
-
-proc roadmap4 {} {
-       global FG BG
-
-       catch {destroy .h}
-       toplevel .h
-
-       wm title .h "LTL Help"
-       wm iconname .h "Help"
-       frame .h.z
-       scrollbar .h.z.s -command ".h.z.t yview"
-       text .h.z.t -relief raised -bd 2 \
-               -background $BG -foreground $FG \
-               -yscrollcommand ".h.z.s set" \
-               -setgrid 1 -width 60 -height 30 -wrap word
-       pack append .h.z \
-               .h.z.s {left filly} \
-               .h.z.t {left expand fill}
-       .h.z.t insert end "GUIDELINES:
-You can load an LTL template or a previously saved LTL
-formula from a file via the LOAD button on the upper
-right of the LTL Property Manager panel.
-
-Define a new LTL formula using lowercase names for the
-propositional symbols, for instance:
-       [] (p U q)
-The formula expresses either a positive (desired) or a
-negative (undesired) property of the model.  A positive
-property is negated automatically by the translator to
-convert it in a never claim (which expresses the
-corresponding negative property (the undesired behavior
-that is claimed 'never' to occur).
-
-When you type a <Return> or hit the <Generate> button,
-the formula is translated into an equivalent never-claim.
-
-You must add a macro-definition for each propositional
-symbol used in the LTL formula.  Insert these definitions
-in the symbols window of the LTL panel, they will be
-remembered together with the annotations and verification
-result if the formula is saved in an .ltl file.
-Enclose the symbol definitions in braces, to secure correct
-operator precedence, for instance:
-
-#define p      (a > b)
-#define q      (len(q) < 5)
-
-Valid temporal logic operators are:
-       \[\]  Always (no space between \[ and \])
-       <>  Eventually (no space between < and >)
-       U   (Strong) Until
-       V   The Dual of Until: (p V q) == !(!p U !q)
-
-       All operators are left-associative (incl. U and V).
-
-Boolean Operators:
-       &&  Logical And (alternative form: /\\, no spaces)
-       !   Logical Negation
-       ||  Logical Or  (alternative form: \\/, no spaces)
-       ->  Logical Implication
-       <-> Logical Equivalence
-
-Boolean Predicates:
-       true, false
-       any name that starts with a lowercase letter
-
-Examples:
-       \[\] p
-       !( <> !q )
-       p U q
-       p U (\[\] (q U r))
-
-Generic properties/Templates:
-       Invariance: \[\] p
-       Response:   p -> \<\> q
-       Precedence: p -> (q U r)
-       Objective:  p -> \<\> (q || r)
-
-       Each of the above 4 generic types of properties
-       can (and will generally have to) be prefixed by
-       temporal operators such as
-               \[\], \<\>, \[\]\<\>, \<\>\[\]
-       The last (objective) property can be read to mean
-       that 'p' is a trigger, or 'enabling' condition that
-       determines when the requirement becomes applicable
-       (e.g. the sending of a new data message); then 'q'
-       can be the fullfillment of the requirement (e.g.
-       the arrival of the matching acknowledgement), and
-       'r' could be a discharging condition that voids the
-       applicability of the check (an abort condition).
-"
-       button .h.b -text "Ok" -command {destroy .h}
-       pack append .h .h.z {top expand fill}
-       pack append .h .h.b {top}
-       .h.z.t configure -state disabled 
-       .h.z.t yview -pickplace 1.0      
-       focus .h.z.t
-}
-
-
-
-# Specific Help
-
-proc roadmap1 {} {
-       global FG BG
-
-       catch {destroy .road1}
-       toplevel .road1
-
-       wm title .road1 "Help with Simulation"
-       wm iconname .road1 "SimHelp"
-       frame .road1.z
-       scrollbar .road1.z.s -command ".road1.z.t yview"
-       text .road1.z.t -relief raised -bd 2 \
-               -background $BG -foreground $FG \
-               -yscrollcommand ".road1.z.s set" \
-               -setgrid 1 -width 60 -height 30 -wrap word
-       pack append .road1.z \
-               .road1.z.s {left filly} \
-               .road1.z.t {left expand fill}
-       .road1.z.t insert end "GUIDELINES:
-0.  Always use a Syntax Check before running simulations.\
-It shakes out the more obvious flaws in the model.
-
-1.  Random simulation option is used to debug a model.\
-Other than assert statements, no correctness requirements\
-are checked during simulation runs. All nondeterministic\
-decisions are resolved randomly.  You can of course still\
-force a selection to go into a specific direction by \
-modifying the model.\
-A random run is repeated precisely if the Seed Value\
-for the random number generator is kept the same.
-
-2.  Interactive simulation can be used to force the\
-execution towards a known point.  The user is prompted\
-at every point in the execution where a nondeterministic\
-choice has to be resolved.
-
-3.  A guided simulation is used to follow an error-trail that was\
-produced by the verifier.  If the trail gets to be thousands of execution\
-steps long, this can be time-consuming. \
-You can skip the initial portion of such a long trail by typing\
-a number in  the 'Steps Skipped' box in the Simulation Panel .
-
-4. The options in the Simulations Panel allow you to enable or\
-disable types of displays that are maintained during simulation\
-runs.  Usually, it is not necessary to look at all possible display panels.\
-Experiment to see which displays you find most useful.
-
-5. To track the value changes of Selected variables, in the\
-Message Sequence Chart and in the Variable Values Panel, add a prefix\
-'show ' to the declaration of the selected variables in the Promela\
-specification, e.g. use 'show byte cnt;' instead of 'byte cnt;'"
-
-       button .road1.b -text "Ok" -command {destroy .road1}
-       pack append .road1 .road1.z {top expand fill}
-       pack append .road1 .road1.b {top}
-       .road1.z.t configure -state disabled 
-       .road1.z.t yview -pickplace 1.0      
-       focus .road1.z.t
-}
-
-proc roadmap2a {} {
-       global FG BG
-
-       catch {destroy .road2}
-       toplevel .road2
-
-       wm title .road2 "Help with Verification Parameters"
-       wm iconname .road2 "ValHelp"
-       frame .road2.z
-       scrollbar .road2.z.s -command ".road2.z.t yview"
-       text .road2.z.t -relief raised -bd 2 \
-               -background $BG -foreground $FG \
-               -yscrollcommand ".road2.z.s set" \
-               -setgrid 1 -width 60 -height 18 -wrap word
-       pack append .road2.z \
-               .road2.z.s {left filly} \
-               .road2.z.t {left expand fill}
-       .road2.z.t insert end "Physical Memory Available:
-Set this number to amount of physical (not virtual)
-memory in your system, in MegaBytes, and leave it there for all runs.
-
-When the limit is reached, the verification is stopped to
-avoid trashing.
-
-The number entered here is the number of MegaBytes directly
-(not a power of two, as in previous versions of xspin).
-
-If an exhaustive verification cannot be completed due to
-lack of memory, use compression, or switch to a
-supertrace/bitstate run under basic options."
-
-       button .road2.b -text "Ok" -command {destroy .road2}
-       pack append .road2 .road2.z {top expand fill}
-       pack append .road2 .road2.b {top}
-       .road2.z.t configure -state disabled 
-       .road2.z.t yview -pickplace 1.0      
-       focus .road2.z.t
-}
-proc roadmap2b {} {
-       global FG BG
-
-       catch {destroy .road2}
-       toplevel .road2
-
-       wm title .road2 "Help with Verification"
-       wm iconname .road2 "ValHelp"
-       frame .road2.z
-       scrollbar .road2.z.s -command ".road2.z.t yview"
-       text .road2.z.t -relief raised -bd 2 \
-               -background $BG -foreground $FG \
-               -yscrollcommand ".road2.z.s set" \
-               -setgrid 1 -width 60 -height 15 -wrap word
-       pack append .road2.z \
-               .road2.z.s {left filly} \
-               .road2.z.t {left expand fill}
-       .road2.z.t insert end "Estimated State Space Size:
-This parameter is used to calculate the size of the
-hash-table. It results in a selection of a numeric argument
-for the -w flag of the verifier. Setting it too high may
-cause an out-of-memory error with zero states reached
-(meaning that the verification could not be started).
-Setting it too low can cause inefficiencies due to
-hash collisions.
-
-In Bitstate runs begin with the default estimate for
-this parameter.  After a run completes successfully,
-double the estimate, and see if the number of reached
-stated changes much.  Continue to do this until
-it stops changing, or until you overflow the memory
-bound and run out of memory.
-
-The closest power of two is taken by xspin to set the
-true number used for the number of reachable states.
-(The selected power of two is visible as the number that
-follow the -w flag in the run-line that xspin generates).
-
-To set a specific -w parameter, use the Extra Run-Time Option
-Field. If, for instance, -w32 is specified there, it will
-override the value computed from the Estimated State Space Size."
-
-       button .road2.b -text "Ok" -command {destroy .road2}
-       pack append .road2 .road2.z {top expand fill}
-       pack append .road2 .road2.b {top}
-       .road2.z.t configure -state disabled 
-       .road2.z.t yview -pickplace 1.0      
-       focus .road2.z.t
-}
-proc roadmap2c {} {
-       global FG BG
-
-       catch {destroy .road2}
-       toplevel .road2
-
-       wm title .road2 "Help with Verification"
-       wm iconname .road2 "ValHelp"
-       frame .road2.z
-       scrollbar .road2.z.s -command ".road2.z.t yview"
-       text .road2.z.t -relief raised -bd 2 \
-               -background $BG -foreground $FG \
-               -yscrollcommand ".road2.z.s set" \
-               -setgrid 1 -width 60 -height 20 -wrap word
-       pack append .road2.z \
-               .road2.z.s {left filly} \
-               .road2.z.t {left expand fill}
-       .road2.z.t insert end "Maximum Search Depth:
-This number determines the size of the depth-first
-search stack that is used during the verification.
-The stack uses memory, so a larger number increases
-the memory requirements, and a lower number decreases
-it.  In a tight spot, when there seems not to be
-sufficient memory for the search depth needed, you
-can reduce the estimated state space size to free some
-more memory for the stack.
-
-If you hit the maximum search depth during a verification
-(noted as 'Search not completed' or 'Search Truncated'
-in the verification output) without finding an error,
-double the search depth parameter and repeat the run."
-
-       button .road2.b -text "Ok" -command {destroy .road2}
-       pack append .road2 .road2.z {top expand fill}
-       pack append .road2 .road2.b {top}
-       .road2.z.t configure -state disabled 
-       .road2.z.t yview -pickplace 1.0      
-       focus .road2.z.t
-}
-
-proc roadmap2k {} {
-       global FG BG
-
-       catch {destroy .road2}
-       toplevel .road2
-
-       wm title .road2 "Help with Verification"
-       wm iconname .road2 "ValHelp"
-       frame .road2.z
-       scrollbar .road2.z.s -command ".road2.z.t yview"
-       text .road2.z.t -relief raised -bd 2 \
-               -background $BG -foreground $FG \
-               -yscrollcommand ".road2.z.s set" \
-               -setgrid 1 -width 60 -height 10 -wrap word
-       pack append .road2.z \
-               .road2.z.s {left filly} \
-               .road2.z.t {left expand fill}
-       .road2.z.t insert end "Number of hash functions:
-This number determines how many bits are set per
-state when in Bitstate verification mode. The default is 2.
-At the end of a Bitstate verification run, the verifier
-can issue a recommendation for a different setting of
-this flag (which is the -k flag), it a change can be
-predicted to lead to better coverage."
-
-       button .road2.b -text "Ok" -command {destroy .road2}
-       pack append .road2 .road2.z {top expand fill}
-       pack append .road2 .road2.b {top}
-       .road2.z.t configure -state disabled 
-       .road2.z.t yview -pickplace 1.0      
-       focus .road2.z.t
-}
-
-proc roadmap2d {} {
-       global FG BG
-
-       catch {destroy .road2}
-       toplevel .road2
-
-       wm title .road2 "Help with Verification"
-       wm iconname .road2 "ValHelp"
-       frame .road2.z
-       scrollbar .road2.z.s -command ".road2.z.t yview"
-       text .road2.z.t -relief raised -bd 2 \
-               -background $BG -foreground $FG \
-               -yscrollcommand ".road2.z.s set" \
-               -setgrid 1 -width 60 -height 26 -wrap word
-       pack append .road2.z \
-               .road2.z.s {left filly} \
-               .road2.z.t {left expand fill}
-       .road2.z.t insert end "GENERAL GUIDELINES:
-=> When just starting out, it is safe to leave all parameters in the\
-Verification Options Panel set at their initial value and to simply\
-push the Run button in the Basic Options Panel for a default\
-exhaustive verification.\
-If you run out of memory, adjust the parameter settings as \
-indicated under the 'explain' options.
-
-=> If an error is found, first try to reduce the search depth to \
-find a shorter equivalent.  Once you're content with the length,\
-move on to a guided simulation to inspect the error-trail in detail.\
-Optionally, use the Find Shortest Trail option, but note that this\
-can increase runtime and memory use. So: do not use this option until\
-you are certain that an error exists -- leave it turned off by default).\
-If you are verifying a Safety Property, try the Breadth-First Search\
-mode to find the shortest counter-example. It may run out of memory\
-sooner than the default depth-first search mode, but it often works.
-
-=> It is always safe to leave the Partial Order Reduction option enabled.\
-Turn it off only for debugging purposes, or when warned to do so by the \
-verifier itself.  The Profiling option gathers statistics about the \
-verification hot-spots in the model.
-
-=> If you save all error-trails, you have to copy the one you are\
-interested in inspecting with a guided simulation onto the file\
-pan_in.trail manually (outside xspin) after the run completes.\
-The trails are numbered in order of discovery."
-
-       button .road2.b -text "Ok" -command {destroy .road2}
-       pack append .road2 .road2.z {top expand fill}
-       pack append .road2 .road2.b {top}
-       .road2.z.t configure -state disabled 
-       .road2.z.t yview -pickplace 1.0      
-       focus .road2.z.t
-}
-
-proc roadmap2e {} {
-       global FG BG
-
-       catch {destroy .road2}
-       toplevel .road2
-
-       wm title .road2 "Help with Verification"
-       wm iconname .road2 "ValHelp"
-       frame .road2.z
-       scrollbar .road2.z.s -command ".road2.z.t yview"
-       text .road2.z.t -relief raised -bd 2 \
-               -background $BG -foreground $FG \
-               -yscrollcommand ".road2.z.s set" \
-               -setgrid 1 -width 60 -height 25 -wrap word
-       pack append .road2.z \
-               .road2.z.s {left filly} \
-               .road2.z.t {left expand fill}
-       .road2.z.t insert end "BASIC GUIDELINES:
-When just starting out, it is safe to leave all parameters\
-at their initial value and to push the Run button for a\
-default exhaustive verification.\
-If you run out of memory, adjust the parameter settings\
-under Advanced Options.
-
-=> Safety properties are properties of single states (like\
-deadlocks = invalid endstates, or assertion violations).
-
-=> Liveness properties are properties of sequences of\
-states (typically: infinite sequences, i.e., cycles).\
-There are two types of cycles: non-progress (not passing\
-through any state marked with a 'progress' label) and\
-acceptance (passing infinitely often through a state\
-marked with an 'accept' label).
-
-=> Use the Weak Fairness option only when really necessary,\
-to avoid unwated error reports.  It can increase the CPU-time\
-requirements by a factor roughly equal to twice the number of\
-active processes.
-
-=> It is safe to leave the Reduced Search option enabled.\
-Turn it off only for debugging purposes, or when warned to do so by the \
-verifier itself.   The Profiling option gathers statistics about the \
-verification hot-spots in the model.
-
-=> You can apply a Never Claim even when checking Safety Properties\
-when you want to restrict the search to the sequences that are\
-matched by the claim (a user-guided search pruning technique)."
-
-       button .road2.b -text "Ok" -command {destroy .road2}
-       pack append .road2 .road2.z {top expand fill}
-       pack append .road2 .road2.b {top}
-       .road2.z.t configure -state disabled 
-       .road2.z.t yview -pickplace 1.0      
-       focus .road2.z.t
-}
-
-proc roadmap2f {} {
-       global FG BG
-
-       catch {destroy .road2}
-       toplevel .road2
-
-       wm title .road2 "Help with Verification"
-       wm iconname .road2 "ValHelp"
-       frame .road2.z
-       scrollbar .road2.z.s -command ".road2.z.t yview"
-       text .road2.z.t -relief raised -bd 2 \
-               -background $BG -foreground $FG \
-               -yscrollcommand ".road2.z.s set" \
-               -setgrid 1 -width 60 -height 15 -wrap word
-       pack append .road2.z \
-               .road2.z.s {left filly} \
-               .road2.z.t {left expand fill}
-       .road2.z.t insert end "GUIDELINES:
-This will run a verification for the specific LTL property\
-that was defined in the LTL options panel that brought you\
-here.  The claim was placed in a separate .ltl\
-file, not included in the main specification.\
-(It will be picked up in the verification automatically.)\
-The separate .ltl file combines the notes, formula,\
-macros, results, etc., for easier tracking.
-
-On a first run, leave all choices at their initial\
-value and push the Run button for a default verification.\
-If you run out of memory, adjust the parameter settings\
-under Advanced Options.
-
-Use the Weak Fairness option only when really necessary,\
-to avoid unwated error reports.  It can increase the CPU-time\
-requirements by a factor roughly equal to twice the number of\
-active processes."
-
-       button .road2.b -text "Ok" -command {destroy .road2}
-       pack append .road2 .road2.z {top expand fill}
-       pack append .road2 .road2.b {top}
-       .road2.z.t configure -state disabled 
-       .road2.z.t yview -pickplace 1.0      
-       focus .road2.z.t
-}
-
-proc roadmap2 {} {
-       global FG BG
-
-       catch {destroy .road2}
-       toplevel .road2
-
-       wm title .road2 "Help with Verification"
-       wm iconname .road2 "ValHelp"
-       frame .road2.z
-       scrollbar .road2.z.s -command ".road2.z.t yview"
-       text .road2.z.t -relief raised -bd 2 \
-               -background $BG -foreground $FG \
-               -yscrollcommand ".road2.z.s set" \
-               -setgrid 1 -width 60 -height 20 -wrap word
-       pack append .road2.z \
-               .road2.z.s {left filly} \
-               .road2.z.t {left expand fill}
-       .road2.z.t insert end "GUIDELINES:
-When just starting out, it is safe to leave all
-verification parameters set at their initial values
-and to Run a default verification.
-If you run out of memory, or encounter other problems,
-look at the specific help options in the verification
-settings panel.
-One parameter is important to set correctly right from
-the start: the physical memory size of your system.
-It is by default set to 64 Mbytes.  Set it once to the
-true amount of physical memory on your system, in Megabytes,
-and never change it again (unless you buy more physical
-memory for your machine of course).
-You can find this parameter under advanced options in the
-verification parameters panel.
-Bitstate/Supertrace verifications are approximate, and
-only used for models too large to verify exhaustively.
-This option allows you to get at least an approximate
-answer to the correctness of models that could otherwise
-not be verified by a finite state system."
-
-       button .road2.b -text "Ok" -command {destroy .road2}
-       pack append .road2 .road2.z {top expand fill}
-       pack append .road2 .road2.b {top}
-       .road2.z.t configure -state disabled 
-       .road2.z.t yview -pickplace 1.0      
-       focus .road2.z.t
-}
-
-proc roadmap3 {} {
-       global FG BG
-
-       catch {destroy .road3}
-       toplevel .road3
-
-       wm title .road3 "Reducing Complexity"
-       wm iconname .road3 "CompHelp"
-       frame .road3.z
-       scrollbar .road3.z.s -command ".road3.z.t yview"
-       text .road3.z.t -relief raised -bd 2 \
-               -background $BG -foreground $FG \
-               -yscrollcommand ".road3.z.s set" \
-               -setgrid 1 -width 60 -height 30 -wrap word
-       pack append .road3.z \
-               .road3.z.s {left filly} \
-               .road3.z.t {left expand fill}
-       .road3.z.t insert end "
-When a verification cannot be completed because of\
-computational complexity; here are some strategies that\
-can be applied to combat this problem.
-
-0. Run the Slicing Algorithm (in the Run Menu) to find\
-potential redundancy in your model for the stated properties.
-
-1. Try to make the model more general, more abstract.\
-Remember that you are constructing a verification model and not\
-an implementation.  SPIN's strength is in proving properties of\
-*interactions* in a distributed system (the implicit assumptions\
-that processes make about each other) -- it's strength is not in\
-proving things about local *computations*, data dependencies etc.
-
-2. Remove everything that is not directly related to the property\
-you are trying to prove: redundant computations, redundant data. \
-*Avoid counters*; avoid incrementing variables that are used for\
-only book-keeping purposes.
-The Syntax Check option will warn about the gravest offenses.
-
-3. Asynchronous channels are a significant source of complexity in\
-verification.  Use a synchronous channel where possible.  Reduce the\
-number of slots in asynchronous channels to a minimum (use 2, or 3\
-slots to get started).
-
-4. Look for processes that merely transfer messages. Consider if\
-you can remove processes that only copy incoming messages from\
-one channel into another, by letting the sender generate the\
-final message right away.  If the intermediate process makes\
-choices (e.g., to delete or duplicate, etc.), let the sender\
-make that choice, rather than the intermediate process.
-
-5. Combine local computations into atomic, or d_step, sequences.
-
-6. Avoid leaving scratch data around in variables.  You can reduce\
-the number of states by, for instance, resetting local variables\
-that are used inside atomic sequences to zero at the end of those\
-sequences; so that the scratch values aren't visible outside the\
-sequence.  Alternatively: introduce some extra global 'hidden'\
-variables for these purposes (see the WhatsNew.html document).
-Use the predefined variable \"_\" as a write-only scratch variable\
-wherever possible.
-
-7. If possible to do so: combine the behavior of two processes into\
-a single one.  Generalize behavior;  focus on coordination aspects\
-(i.e., the interfaces between processes, rather than the local\
-computation inside processes).
-
-8. Try to exploit the partial order reduction strategies.\
-Use the xr and xs assertions (see WhatsNew.html); avoid sharing\
-channels between multiple receivers or multiple senders.\
-Avoid merging independent data-streams into a single shared channel."
-
-       button .road3.b -text "Ok" -command {destroy .road3}
-       pack append .road3 .road3.z {top expand fill}
-       pack append .road3 .road3.b {top}
-       .road3.z.t configure -state disabled 
-       .road3.z.t yview -pickplace 1.0      
-       focus .road3.z.t
-}
-
-proc roadmap5 {} {
-       global FG BG
-
-       catch {destroy .road5}
-       toplevel .road5
-
-       wm title .road5 "Spin Automata"
-       wm iconname .road5 "FsmHelp"
-       frame .road5.z
-       scrollbar .road5.z.s -command ".road5.z.t yview"
-       text .road5.z.t -relief raised -bd 2 \
-               -background $BG -foreground $FG \
-               -yscrollcommand ".road5.z.s set" \
-               -setgrid 1 -width 60 -height 30 -wrap word
-       pack append .road5.z \
-               .road5.z.s {left filly} \
-               .road5.z.t {left expand fill}
-       .road5.z.t insert end "
-The Spin Automata view option give a view of the
-structure of the automata models that Spin uses in
-the verification process.
-Each proctype is represented by a unique automaton.
-
-Chosing this option (in the Run menu) will cause Spin to
-first generate a verifier, compile it, and then run it
-(as pan -d) to obtain a description of the proctype
-names and the corresponding automata.
-
-After selecting (double-clicking) the proctype name desired,
-the graph will be produced.  The default graph layout
-algorithm is small and a self-contained part of Xspin,
-but also rather crude.  Be on guard, therefore, for edges
-that overlap (a typical case, for instance, is a backedge
-that hides behind a series of forward edges. Use DOT
-(see the README.html file on Spin) when possible for much
-better graph layout.
-
-In the default layout, the following button actions are
-defined (the first one is not needed when using DOT):
-
-1. Moving Nodes: either Button-1 or Button-2.
-2. Displaying Edge Labels: hold Button-1 down on the edge.
-3. Cross-References: Move the cursor over a Node to see the
-   corresponding line in the Promela source, in the main
-   Xspin window.
-
-If labels look bad -- try changing the font definitions at
-the start of the xspin.tcl file (hints are given there).
-"
-       button .road5.b -text "Ok" -command {destroy .road5}
-       pack append .road5 .road5.z {top expand fill}
-       pack append .road5 .road5.b {top}
-       .road5.z.t configure -state disabled 
-       .road5.z.t yview -pickplace 1.0      
-       focus .road5.z.t
-}
-
-proc roadmap6 {} {
-       global FG BG
-
-       catch {destroy .road6}
-       toplevel .road6
-
-       wm title .road6 "Optional Compiler Directives"
-       wm iconname .road6 "Optional"
-       frame .road6.z
-       scrollbar .road6.z.s -command ".road6.z.t yview"
-       text .road6.z.t -relief raised -bd 2 \
-               -background $BG -foreground $FG \
-               -yscrollcommand ".road6.z.s set" \
-               -setgrid 1 -width 80 -height 30 -wrap word
-       pack append .road6.z \
-               .road6.z.s {left filly} \
-               .road6.z.t {left expand fill}
-       .road6.z.t insert end "
-               Use only when prompted:
-
-NFAIR=N                size memory used for enforcing weak fairness (default N=2)
-VECTORSZ=N     allocates memory (in bytes) for state vector (default N=1024)
-
-               Related to partial order reduction:
-
-CTL            limit p.o.reduction to subset consistent with branching time logic
-GLOB_ALPHA     consider process death a global action
-XUSAFE         disable validity checks of xr/xs assertions
-
-               Speedups:
-
-NOBOUNDCHECK   don't check array bound violations
-NOCOMP         don't compress states with fullstate storage (uses more memory)
-NOSTUTTER      disable stuttering rules (warning: changes semantics)
-
-               Memory saving (slower):
-
-MA=N           use a minimized DFA encoding for state vectors up to N bytes
-
-               Experimental:
-
-BCOMP          when in BITSTATE mode, computes hash over compressed state-vector
-NIBIS          apply a small optimization of partial order reduction
-NOVSZ          risky - removes 4 bytes from state vector - its length field.
-PRINTF         enables printfs during verification runs
-RANDSTORE=N    in BITSTATE mode, -DRANDSTORE=33 lowers prob of storing a state to 33%
-W_XPT=N                with MA, write checkpoint files every multiple of N states stored
-R_XPT          with MA, restart run from last checkpoint file written
-
-               Debugging:
-
-SDUMP          with CHECK: adds ascii dumps of state vectors
-SVDUMP         add run option -pN to write N-byte state vectors into file sv_dump
-
-               Already set by the other xspin options:
-
-BITSTATE       use supertrace/bitstate instead of exhaustive exploration
-HC             use hash-compact instead of exhaustive exploration
-COLLAPSE       collapses state vector size by up to 80% to 90%
-MEMCNT=N       set upperbound of 2^N bytes to memory that can be allocated
-MEMLIM=N       set upperbound of N Mbytes to memory that can be allocated
-NOCLAIM                exclude never claim from the verification, if present
-NOFAIR         disable the code for weak-fairness (is faster)
-NOREDUCE       disables the partial order reduction algorithm
-NP             enable non-progress cycle detection (option -l, replacing -a),
-PEG            add complexity profiling (transition counts)
-REACH          guarantee absence of errors within the -m depth-limit
-SAFETY         optimize for the case where no cycle detection is needed
-VAR_RANGES     compute the effective value range of byte variables
-CHECK          generate debugging information (see also below)
-VERBOSE                elaborate debugging printouts
-"
-       button .road6.b -text "Ok" -command {destroy .road6}
-       pack append .road6 .road6.z {top expand fill}
-       pack append .road6 .road6.b {top}
-       .road6.z.t configure -state disabled 
-       .road6.z.t yview -pickplace 1.0      
-       focus .road6.z.t
-}
-
-
-# simulation options panel
-
-set s_options  ""
-set v_options  ""
-set a_options  ""
-set c_options  ""
-
-set Blue       "blue";         #"yellow"
-set Yellow     "yellow";       #"red"
-set White      "white";        #"yellow"
-set Red                "red";          #"yellow"
-set Green      "green";        #"green"
-
-set fd         0
-set Depth      0
-set Seq(0)     0
-set Sdbox      0
-set Spbox(0)   0
-set sbox       0
-
-set simruns    0
-set stepper    0
-set stepped    0
-set VERBOSE    0
-set SYMBOLIC   0
-set howmany    0
-set Choice(1)  0
-set Sticky(0)  0
-set SparseMsc  1
-set showvars   1
-set vv         1
-set qv         1
-set gvars      1
-set lvars      0
-set hide_q1    ""
-set hide_q2    ""
-set hide_q3    ""
-set PlaceSim   "+200+100"
-
-proc simulation_old {} {
-       global s_typ l_typ showvars qv PlaceSim
-       global fvars gvars lvars SparseMsc HelvBig
-       global msc ebc tsc vv svars rvars seed jumpsteps
-       global hide_q1 hide_q2 hide_q3
-
-       catch { .menu.run.m entryconfigure 5 -state normal }
-
-       catch {destroy .s}
-       toplevel .s
-       set k [string first "\+" $PlaceSim]
-       if {$k > 0} {
-               set PlaceSim [string range $PlaceSim $k end]
-       }
-
-       wm title .s "Simulation Options"
-       wm iconname .s "SIM"
-       wm geometry .s $PlaceSim
-
-       frame .s.opt -relief flat
-
-       mkpan_in
-
-       frame .s.opt.mode -relief raised -borderwidth 1m
-       label .s.opt.mode.fld0 \
-               -font $HelvBig \
-               -text "Display Mode" \
-               -relief sunken -borderwidth 1m
-
-       checkbutton .s.opt.mode.fld4b -text "Time Sequence Panel - with:" \
-               -variable tsc \
-               -relief flat
-       frame .s.opt.mode.flds
-       radiobutton .s.opt.mode.flds.fld3 \
-               -text "    Interleaved Steps" \
-               -variable m_typ -value 2 \
-               -relief flat
-       radiobutton .s.opt.mode.flds.fld1 \
-               -text "    One Window per Process" \
-               -variable m_typ -value 0 \
-               -relief flat
-       radiobutton .s.opt.mode.flds.fld2 \
-               -text "    One Trace per Process" \
-               -variable m_typ -value 1 \
-               -relief flat
-       frame .s.opt.mode.flds.fld0 -width 15
-       pack append .s.opt.mode.flds \
-               .s.opt.mode.flds.fld0 {left frame w}\
-               .s.opt.mode.flds.fld3 {top frame w}\
-               .s.opt.mode.flds.fld1 {top frame w}\
-               .s.opt.mode.flds.fld2 {top frame w}
-
-       checkbutton .s.opt.mode.fld4a -text "MSC Panel - with:" \
-               -variable msc \
-               -relief flat
-       frame .s.opt.mode.steps
-       radiobutton .s.opt.mode.steps.fld5 -text "    Step Number Labels" \
-               -variable SYMBOLIC -value 0 \
-               -relief flat
-       radiobutton .s.opt.mode.steps.fld6 -text "    Source Text Labels" \
-               -variable SYMBOLIC -value 1 \
-               -relief flat
-       radiobutton .s.opt.mode.steps.fld7 -text "    Normal Spacing" \
-               -variable SparseMsc -value 1 \
-               -relief flat
-       radiobutton .s.opt.mode.steps.fld8 -text "    Condensed Spacing" \
-               -variable SparseMsc -value 0 \
-               -relief flat
-       frame .s.opt.mode.steps.fld0 -width 15
-       pack append .s.opt.mode.steps \
-               .s.opt.mode.steps.fld0 {left frame w}\
-               .s.opt.mode.steps.fld5 {top frame w}\
-               .s.opt.mode.steps.fld6 {top frame w}\
-               .s.opt.mode.steps.fld7 {top frame w}\
-               .s.opt.mode.steps.fld8 {top frame w}
-
-       checkbutton .s.opt.mode.fld4c -text "Execution Bar Panel" \
-               -variable ebc \
-               -relief flat
-       checkbutton .s.opt.mode.fld4d -text "Data Values Panel" \
-               -variable vv \
-               -relief flat
-
-       frame .s.opt.mode.vars
-
-       checkbutton .s.opt.mode.vars.fld4c -text "    Track Buffered Channels" \
-               -variable qv \
-               -relief flat
-       checkbutton .s.opt.mode.vars.fld4d -text "    Track Global Variables" \
-               -variable gvars \
-               -relief flat
-       checkbutton .s.opt.mode.vars.fld4e -text "    Track Local Variables" \
-               -variable lvars \
-               -relief flat
-
-       checkbutton .s.opt.mode.vars.fld4f \
-               -text "    Display vars marked 'show' in MSC" \
-               -variable showvars \
-               -relief flat
-       frame .s.opt.mode.vars.fld0 -width 15
-       pack append .s.opt.mode.vars \
-               .s.opt.mode.vars.fld0 {left frame w}\
-               .s.opt.mode.vars.fld4c {top frame w}\
-               .s.opt.mode.vars.fld4d {top frame w}\
-               .s.opt.mode.vars.fld4e {top frame w}\
-               .s.opt.mode.vars.fld4f {top frame w}
-
-       pack append .s.opt.mode .s.opt.mode.fld0 {top pady 4 frame w fillx}
-
-       pack append .s.opt.mode .s.opt.mode.fld4a {top pady 4 frame w}
-       pack append .s.opt.mode .s.opt.mode.steps {top frame w}
-
-       pack append .s.opt.mode .s.opt.mode.fld4b {top pady 4 frame w}
-       pack append .s.opt.mode .s.opt.mode.flds  {top frame w}
-
-       pack append .s.opt.mode .s.opt.mode.fld4d {top pady 4 frame w}
-       pack append .s.opt.mode .s.opt.mode.vars {top frame w}
-
-       pack append .s.opt.mode .s.opt.mode.fld4c {top pady 4 frame w}
-
-       pack append .s.opt .s.opt.mode {left frame n}
-
-       frame .s.opt.mesg -relief raised -borderwidth 1m
-       label .s.opt.mesg.loss0 \
-               -font $HelvBig \
-               -text "A Full Queue" \
-               -relief sunken -borderwidth 1m
-       radiobutton .s.opt.mesg.loss1 -text "Blocks New Msgs" \
-               -variable l_typ -value 0 \
-               -relief flat
-       radiobutton .s.opt.mesg.loss2 -text "Loses New Msgs" \
-               -variable l_typ -value 1 \
-               -relief flat
-       pack append .s.opt.mesg .s.opt.mesg.loss0 {top pady 4 frame w fillx}
-       pack append .s.opt.mesg .s.opt.mesg.loss1 {top pady 4 frame w}
-       pack append .s.opt.mesg .s.opt.mesg.loss2 {top pady 4 frame w}
-
-       frame .s.opt.hide -relief raised -borderwidth 1m
-       label .s.opt.hide.txt  \
-               -font $HelvBig \
-               -text "Hide Queues in MSC" \
-               -relief sunken -borderwidth 1m
-       pack append .s.opt.hide .s.opt.hide.txt {top pady 4 frame w fillx }
-
-       for {set i 1} {$i < 4} {incr i} {
-               frame .s.opt.hide.q$i
-               label .s.opt.hide.q$i.qno \
-                       -font $HelvBig \
-                       -text "Queue nr:"
-               entry .s.opt.hide.q$i.entry \
-                       -relief sunken -width 8
-               pack append .s.opt.hide.q$i .s.opt.hide.q$i.qno {left pady 4 frame n }
-               pack append .s.opt.hide.q$i .s.opt.hide.q$i.entry {left pady 4 frame n}
-               pack append .s.opt.hide .s.opt.hide.q$i {top pady 4 frame w fillx}
-       }
-       frame .s.opt.lframe -relief raised -borderwidth 1m
-       label .s.opt.lframe.tl \
-               -font $HelvBig \
-               -text "Simulation Style" \
-               -relief sunken -borderwidth 1m
-       radiobutton .s.opt.lframe.is -text "Interactive" \
-               -variable s_typ -value 2 \
-               -relief flat
-       radiobutton .s.opt.lframe.gs -text "Guided (using pan.trail)" \
-               -variable s_typ -value 1 \
-               -relief flat
-       frame .s.opt.lframe.b
-       entry .s.opt.lframe.b.entry -relief sunken -width 8 
-       label .s.opt.lframe.b.label \
-               -font $HelvBig \
-               -text "Steps Skipped"
-       pack append .s.opt.lframe.b \
-               .s.opt.lframe.b.label {left} \
-               .s.opt.lframe.b.entry {left}
-
-       radiobutton .s.opt.lframe.rs -text "Random (using seed)" \
-               -variable s_typ -value 0 \
-               -relief flat
-       frame .s.opt.lframe.s
-       entry .s.opt.lframe.s.entry -relief sunken -width 8 
-       label .s.opt.lframe.s.label \
-               -font $HelvBig \
-               -text "Seed Value"
-       pack append .s.opt.lframe.s \
-               .s.opt.lframe.s.label {left} \
-               .s.opt.lframe.s.entry {left}
-
-       pack append .s.opt.lframe .s.opt.lframe.tl {top pady 4 frame w fillx} \
-               .s.opt.lframe.rs {top pady 4 frame w} \
-               .s.opt.lframe.s  {top pady 4 frame e} \
-               .s.opt.lframe.gs {top pady 4 frame w} \
-               .s.opt.lframe.b  {top pady 4 frame e} \
-               .s.opt.lframe.is {top pady 4 frame w}
-
-       pack append .s.opt .s.opt.lframe {top frame n}
-       pack append .s.opt .s.opt.mesg {top frame n fillx}
-       pack append .s.opt .s.opt.hide {top frame n expand fillx filly}
-
-       pack append .s .s.opt { top frame n }
-
-       pack append .s [button .s.rewind -text "Start" \
-               -command "Rewind"  ] {right frame e}
-       pack append .s [button .s.exit -text "Cancel" \
-               -command "Stopsim" ] {right frame e}
-       pack append .s [button .s.help -text "Help" -fg red \
-               -command "roadmap1" ] {right frame e}
-
-       .s.opt.lframe.s.entry  insert end $seed
-       .s.opt.lframe.b.entry insert end $jumpsteps
-
-       .s.opt.hide.q1.entry insert end $hide_q1
-       .s.opt.hide.q2.entry insert end $hide_q2
-       .s.opt.hide.q3.entry insert end $hide_q3
-
-       raise .s
-}
-
-
-proc simulation {} {
-       global s_typ l_typ showvars qv PlaceSim
-       global fvars gvars lvars SparseMsc HelvBig
-       global msc ebc tsc vv svars rvars seed jumpsteps
-       global hide_q1 hide_q2 hide_q3
-       global whichsim
-
-       catch { .menu.run.m entryconfigure 5 -state normal }
-
-       catch {destroy .s}
-       toplevel .s
-               catch {rmfile pan_in9999999.trail}
-               debug {about to remove pan_in9999999.trail}
-               rmfile pan_in9999999.trail
-       set k [string first "\+" $PlaceSim]
-       if {$k > 0} {
-               set PlaceSim [string range $PlaceSim $k end]
-       }
-
-       wm title .s "Simulation Options"
-       wm iconname .s "SIM"
-       wm geometry .s $PlaceSim
-
-       mkpan_in
-
-       # lower frame with 'start', 'cancel' and 'help' buttons
-       frame .s.l -relief flat
-       pack .s.l -side bottom -fill both
-
-         pack [button .s.l.rewind -text " Start " \
-               -command "Rewind"  ] -side right -fill y -padx 4
-         pack [button .s.l.exit -text "Cancel" \
-               -command "
-                       Stopsim;
-                       catch {rmfile pan_in9999999.trail}
-                       "
-               ] -side right -fill y -padx 4
-         pack [button .s.l.help -text " Help " -fg red \
-               -command "roadmap1" ]  -side right -fill y -padx 4
-
-       # upper frame with modes and options
-       frame .s.u -relief flat
-       pack .s.u -side top -fill both
-
-         frame .s.u.mode -relief raised -borderwidth 1m
-         pack .s.u.mode -side left -fill both -expand 1
-
-           frame .s.u.mode.fdis -relief flat
-           pack .s.u.mode.fdis -side top -fill x -expand 1
-
-             label .s.u.mode.fdis.fld0 \
-               -font $HelvBig \
-               -text "Display Mode" \
-               -relief sunken -borderwidth 1m
-             pack .s.u.mode.fdis.fld0 -side top -fill x
-
-#MSC Panel
-
-           frame .s.u.mode.fmsc -relief flat
-           pack  .s.u.mode.fmsc -side top -fill x
-
-             checkbutton .s.u.mode.fmsc.fld4a -text "MSC Panel - with:" \
-                 -variable msc \
-                 -relief flat
-             pack .s.u.mode.fmsc.fld4a -side left
-
-           frame .s.u.mode.msc -relief flat
-           pack  .s.u.mode.msc -side top -fill x
-
-             frame .s.u.mode.msc.lab -relief flat
-             pack  .s.u.mode.msc.lab -side top -fill x
-
-               frame .s.u.mode.msc.lab.dummy -width 18 -relief flat
-               pack .s.u.mode.msc.lab.dummy -side left -fill y
-
-               frame .s.u.mode.msc.lab.radios -relief flat
-               pack .s.u.mode.msc.lab.radios -side left -fill x
-       
-                 frame .s.u.mode.msc.lab.radios.fnum -relief flat
-                 pack .s.u.mode.msc.lab.radios.fnum -side top -fill x
-
-                   radiobutton .s.u.mode.msc.lab.radios.fnum.fld5 \
-                         -text "    Step Number Labels" \
-                         -variable SYMBOLIC -value 0 \
-                         -relief flat
-                   pack .s.u.mode.msc.lab.radios.fnum.fld5 -side left
-
-                 frame .s.u.mode.msc.lab.radios.ftext -relief flat
-                 pack .s.u.mode.msc.lab.radios.ftext -side top -fill x
-
-                   radiobutton .s.u.mode.msc.lab.radios.ftext.fld6 \
-                       -text "    Source Text Labels" \
-                       -variable SYMBOLIC -value 1 \
-                       -relief flat
-                   pack .s.u.mode.msc.lab.radios.ftext.fld6 -side left
-
-               frame .s.u.mode.msc.lab.bracket
-               pack .s.u.mode.msc.lab.bracket -side left -fill y
-               
-                 canvas .s.u.mode.msc.lab.bracket.c -width 10 -height 40
-                 pack .s.u.mode.msc.lab.bracket.c -side top
-                   .s.u.mode.msc.lab.bracket.c create line 5 15 10 15 10 38 5 38
-
-             frame .s.u.mode.msc.space -relief flat
-             pack  .s.u.mode.msc.space -side top -fill x
-
-               frame .s.u.mode.msc.space.dummy -width 18 -relief flat
-               pack .s.u.mode.msc.space.dummy -side left -fill y
-
-               frame .s.u.mode.msc.space.radios -relief flat
-               pack  .s.u.mode.msc.space.radios -side left -fill x
-       
-                 frame .s.u.mode.msc.space.radios.fnorm -relief flat
-                 pack  .s.u.mode.msc.space.radios.fnorm -side top -fill x
-
-                   radiobutton .s.u.mode.msc.space.radios.fnorm.fld7 \
-                       -text "    Normal Spacing" \
-                       -variable SparseMsc -value 1 \
-                       -relief flat
-                   pack .s.u.mode.msc.space.radios.fnorm.fld7 -side left
-
-                 frame .s.u.mode.msc.space.radios.fcond -relief flat
-                 pack  .s.u.mode.msc.space.radios.fcond -side top -fill x
-
-                   radiobutton .s.u.mode.msc.space.radios.fcond.fld8 \
-                       -text "    Condensed Spacing" \
-                       -variable SparseMsc -value 0 \
-                       -relief flat
-                   pack .s.u.mode.msc.space.radios.fcond.fld8 -side left
-
-               frame .s.u.mode.msc.space.bracket
-               pack .s.u.mode.msc.space.bracket -side left -fill y
-               
-                 canvas .s.u.mode.msc.space.bracket.c -width 10 -height 40
-                 pack .s.u.mode.msc.space.bracket.c -side top
-                   .s.u.mode.msc.space.bracket.c create line 5 15 10 15 10 38 5 38
-
-# Time Sequence Panel
-
-           frame .s.u.mode.ftsp -relief flat 
-           pack  .s.u.mode.ftsp -side top -fill x
-
-             checkbutton .s.u.mode.ftsp.fld4b \
-               -text "Time Sequence Panel - with:" \
-               -variable tsc \
-               -relief flat
-             pack .s.u.mode.ftsp.fld4b -side left
-
-           frame .s.u.mode.tsp
-           pack  .s.u.mode.tsp -side top -fill x
-
-             frame .s.u.mode.tsp.proc
-             pack  .s.u.mode.tsp.proc -side top -fill x
-
-               frame .s.u.mode.tsp.proc.dummy -width 18
-               pack  .s.u.mode.tsp.proc.dummy -side left -fill y
-
-               frame .s.u.mode.tsp.proc.radios -relief flat
-               pack  .s.u.mode.tsp.proc.radios -side left -fill y
-
-                 frame .s.u.mode.tsp.proc.radios.is
-                 pack  .s.u.mode.tsp.proc.radios.is -side top -fill x
-
-                   radiobutton .s.u.mode.tsp.proc.radios.is.fld3 \
-                           -text "    Interleaved Steps" \
-                           -variable m_typ -value 2 \
-                           -relief flat
-                   pack .s.u.mode.tsp.proc.radios.is.fld3 -side left
-
-                 frame .s.u.mode.tsp.proc.radios.1win -relief flat
-                 pack .s.u.mode.tsp.proc.radios.1win -side top -fill x
-
-                   radiobutton .s.u.mode.tsp.proc.radios.1win.fld1 \
-                       -text "    One Window per Process" \
-                       -variable m_typ -value 0 \
-                       -relief flat
-                   pack .s.u.mode.tsp.proc.radios.1win.fld1 -side left
-
-                 frame .s.u.mode.tsp.proc.radios.1trace -relief flat
-                 pack  .s.u.mode.tsp.proc.radios.1trace -side top -fill x
-
-                   radiobutton .s.u.mode.tsp.proc.radios.1trace.fld2 \
-                       -text "    One Trace per Process" \
-                       -variable m_typ -value 1 \
-                       -relief flat
-                   pack .s.u.mode.tsp.proc.radios.1trace.fld2 -side left
-
-               frame .s.u.mode.tsp.proc.bracket
-               pack .s.u.mode.tsp.proc.bracket -side left -fill y
-
-               set y 13
-                 canvas .s.u.mode.tsp.proc.bracket.c -width 10 -height 66
-                 pack .s.u.mode.tsp.proc.bracket.c -side top
-                   .s.u.mode.tsp.proc.bracket.c create line    5  [expr 0 + $y] \
-                                                               10 [expr 0 + $y] \
-                                                               10 [expr 25 + $y] \
-                                                               5  [expr 25 + $y] \
-                                                               10 [expr 25 + $y] \
-                                                               10 [expr 50 + $y] \
-                                                               5  [expr 50 + $y]
-
-       frame .s.u.mode.fdvp -relief flat
-       pack .s.u.mode.fdvp -side top -fill x
-
-         checkbutton .s.u.mode.fdvp.fld4d -text "Data Values Panel" \
-               -variable vv \
-               -relief flat
-         pack .s.u.mode.fdvp.fld4d -side left
-
-       frame .s.u.mode.vars
-       pack .s.u.mode.vars -side top -fill x
-
-         frame .s.u.mode.vars.dummy -width 18
-         pack .s.u.mode.vars.dummy -side left -fill y
-
-         frame .s.u.mode.vars.chks -relief flat
-         pack  .s.u.mode.vars.chks -side left -fill y
-           
-           frame .s.u.mode.vars.chks.ftbc
-           pack  .s.u.mode.vars.chks.ftbc -side top -fill x
-
-             checkbutton .s.u.mode.vars.chks.ftbc.fld4c -text "    Track Buffered Channels" \
-               -variable qv \
-               -relief flat
-             pack .s.u.mode.vars.chks.ftbc.fld4c -side left
-
-           frame .s.u.mode.vars.chks.ftgv
-           pack  .s.u.mode.vars.chks.ftgv -side top -fill x
-
-             checkbutton .s.u.mode.vars.chks.ftgv.fld4d -text "    Track Global Variables" \
-               -variable gvars \
-               -relief flat
-             pack .s.u.mode.vars.chks.ftgv.fld4d -side left
-
-           frame .s.u.mode.vars.chks.ftlv
-           pack  .s.u.mode.vars.chks.ftlv -side top -fill x
-
-             checkbutton .s.u.mode.vars.chks.ftlv.fld4e -text "    Track Local Variables" \
-               -variable lvars \
-               -relief flat
-             pack .s.u.mode.vars.chks.ftlv.fld4e -side left
-
-           frame .s.u.mode.vars.chks.fshow
-           pack  .s.u.mode.vars.chks.fshow -side top -fill x
-
-             checkbutton .s.u.mode.vars.chks.fshow.fld4f \
-               -text "    Display vars marked 'show' in MSC" \
-               -variable showvars \
-               -relief flat
-
-             pack .s.u.mode.vars.chks.fshow.fld4f -side left
-
-       frame .s.u.mode.fexecbar -relief flat
-       pack .s.u.mode.fexecbar -side top -fill x
-
-         checkbutton .s.u.mode.fexecbar.fld4c -text "Execution Bar Panel" \
-               -variable ebc \
-               -relief flat
-          pack .s.u.mode.fexecbar.fld4c -side left
-
-#Right upper frame
-       frame .s.u.r -relief flat
-       pack .s.u.r -side right -fill y -expand 1
-
-#Simulation Style
-         frame .s.u.r.sim -relief raised -borderwidth 1m
-         pack .s.u.r.sim -side top -fill both -expand 1
-
-           frame .s.u.r.sim.flab -relief sunken
-           pack .s.u.r.sim.flab -side top -fill x
-
-             label .s.u.r.sim.flab.tl \
-               -font $HelvBig \
-               -text "Simulation Style" \
-               -relief sunken -borderwidth 1m
-             pack .s.u.r.sim.flab.tl -side top -fill x
-
-           frame .s.u.r.sim.random
-           pack .s.u.r.sim.random -side top -fill x
-
-               radiobutton .s.u.r.sim.random.rs -text "Random (using seed)" \
-               -variable s_typ -value 0 \
-               -relief flat \
-               -command "enable_disable_sub_buttons"
-               pack .s.u.r.sim.random.rs -side left
-
-           frame .s.u.r.sim.seedvalue
-           pack .s.u.r.sim.seedvalue -side top -fill x
-
-             frame .s.u.r.sim.seedvalue.dummy -width 18
-             pack .s.u.r.sim.seedvalue.dummy -side left -fill y
-
-             label .s.u.r.sim.seedvalue.label \
-               -font $HelvBig \
-               -text "Seed Value"
-             pack .s.u.r.sim.seedvalue.label -side left
-
-             entry .s.u.r.sim.seedvalue.entry -relief sunken -width 8
-             pack .s.u.r.sim.seedvalue.entry -side left
-
-           frame .s.u.r.sim.guided
-           pack .s.u.r.sim.guided -side top -fill x
-
-               radiobutton .s.u.r.sim.guided.gs -text "Guided" \
-                  -variable s_typ -value 1 \
-                  -relief flat \
-                  -command "enable_disable_sub_buttons"
-               pack .s.u.r.sim.guided.gs -side left
-               
-               frame .s.u.r.sim.guided_type
-               pack .s.u.r.sim.guided_type -side top -fill x
-
-                 frame .s.u.r.sim.guided_type.dummy -width 18
-                 pack .s.u.r.sim.guided_type.dummy -side left -fill y
-
-                   frame .s.u.r.sim.guided_type.radios
-                   pack .s.u.r.sim.guided_type.radios -side left
-
-                     frame .s.u.r.sim.guided_type.radios.pan_trail
-                     pack  .s.u.r.sim.guided_type.radios.pan_trail -side top -fill x
-
-                       radiobutton .s.u.r.sim.guided_type.radios.pan_trail.rb \
-                               -text "Using pan_in.trail" \
-                               -variable whichsim -value 0 \
-                               -relief flat
-                       pack .s.u.r.sim.guided_type.radios.pan_trail.rb -side left
-
-                     frame .s.u.r.sim.guided_type.radios.trail_other
-                     pack  .s.u.r.sim.guided_type.radios.trail_other -side top -fill x
-
-                       radiobutton .s.u.r.sim.guided_type.radios.trail_other.rb \
-                               -text "Use" \
-                               -variable whichsim -value 1 \
-                               -relief flat
-                       pack .s.u.r.sim.guided_type.radios.trail_other.rb -side left
-
-                       entry .s.u.r.sim.guided_type.radios.trail_other.entry \
-                               -width 20
-                       pack .s.u.r.sim.guided_type.radios.trail_other.entry -side left
-
-                       button .s.u.r.sim.guided_type.radios.trail_other.button -text "Browse" \
-                               -command select_trail_file
-                       pack .s.u.r.sim.guided_type.radios.trail_other.button -side left          
-
-           frame .s.u.r.sim.skipstep
-           pack  .s.u.r.sim.skipstep -side top -fill x
-
-             label .s.u.r.sim.skipstep.label \
-               -font $HelvBig \
-               -text "Steps Skipped"
-             pack .s.u.r.sim.skipstep.label -side left
-
-             entry .s.u.r.sim.skipstep.entry -relief sunken -width 8
-             pack .s.u.r.sim.skipstep.entry -side left
-
-           frame .s.u.r.sim.interactive
-           pack .s.u.r.sim.interactive -side top -fill x
-
-               radiobutton .s.u.r.sim.interactive.is -text "Interactive" \
-                       -variable s_typ -value 2 \
-                       -relief flat \
-               -command "enable_disable_sub_buttons"
-               pack .s.u.r.sim.interactive.is -side left
-
-#A Full Queue
-         frame .s.u.r.fq -relief raised -borderwidth 1m
-         pack .s.u.r.fq -side top -fill both -expand 1
-
-           frame .s.u.r.fq.label -relief sunken
-           pack .s.u.r.fq.label -side top -fill x
-
-             label .s.u.r.fq.label.loss0 \
-               -font $HelvBig \
-               -text "A Full Queue" \
-               -relief sunken -borderwidth 1m
-             pack .s.u.r.fq.label.loss0 -side top -fill x
-
-           frame .s.u.r.fq.block
-           pack .s.u.r.fq.block -side top -fill x
-
-             radiobutton .s.u.r.fq.block.loss1 -text "Blocks New Msgs" \
-               -variable l_typ -value 0 \
-               -relief flat
-             pack .s.u.r.fq.block.loss1 -side left
-
-           frame .s.u.r.fq.lose
-           pack .s.u.r.fq.lose -side top -fill x
-
-             radiobutton .s.u.r.fq.lose.loss2 -text "Loses New Msgs" \
-               -variable l_typ -value 1 \
-               -relief flat
-             pack .s.u.r.fq.lose.loss2 -side left
-
-#Hide Queues in MSC
-         frame .s.u.r.hq -relief raised -borderwidth 1m
-         pack .s.u.r.hq -side top -fill both -expand 1
-
-           frame .s.u.r.hq.flabel -relief sunken
-           pack .s.u.r.hq.flabel -side top -fill x
-
-               label .s.u.r.hq.flabel.txt  \
-                 -font $HelvBig \
-                 -text "Hide Queues in MSC" \
-                 -relief sunken -borderwidth 1m
-           pack .s.u.r.hq.flabel.txt -side top -fill x
-
-       for {set i 1} {$i < 4} {incr i} {
-               frame .s.u.r.hq.q$i
-               pack .s.u.r.hq.q$i -side top -fill x
-               label .s.u.r.hq.q$i.qno \
-                       -font $HelvBig \
-                       -text "Queue nr:"
-               pack .s.u.r.hq.q$i.qno -side left
-               entry .s.u.r.hq.q$i.entry \
-                       -relief sunken -width 8
-               pack .s.u.r.hq.q$i.entry -side left
-       }
-
-       .s.u.r.sim.seedvalue.entry insert end $seed
-       .s.u.r.sim.skipstep.entry insert end $jumpsteps
-
-       .s.u.r.hq.q1.entry insert end $hide_q1
-       .s.u.r.hq.q2.entry insert end $hide_q2
-       .s.u.r.hq.q3.entry insert end $hide_q3
-       enable_disable_sub_buttons
-
-       tkwait visibility .s
-       raise .s
-}
-
-proc enable_disable_sub_buttons {} {
-       global s_typ
-       switch -regexp $s_typ {
-               0|2 { .s.u.r.sim.guided_type.radios.pan_trail.rb configure -state disabled
-                     .s.u.r.sim.guided_type.radios.trail_other.rb configure -state disabled
-                     .s.u.r.sim.guided_type.radios.trail_other.button configure -state disabled
-                   }
-               1   { .s.u.r.sim.guided_type.radios.pan_trail.rb configure -state normal
-                     .s.u.r.sim.guided_type.radios.trail_other.rb configure -state normal
-                     .s.u.r.sim.guided_type.radios.trail_other.button configure -state normal
-                     .s.u.r.sim.guided_type.radios.pan_trail.rb select
-                   }
-
-       }
-}
-
-proc select_trail_file {} {
-       global Trail_filename
-       .s.u.r.sim.guided_type.radios.trail_other.rb select
-       # try to use the predefined file selection dialog
-       switch [info commands tk_getOpenFile] "" {
-               # some old version of Tk so use our own file selection dialog
-               set fileselect "FileSelect open"
-       } default {
-               set fileselect "tk_getOpenFile"
-       }
-       set init_dir [pwd]
-       # get the file (return if the file selection dialog canceled)
-       switch -- [set file [eval $fileselect -initialdir { { $init_dir } } ]] "" return
-       .s.u.r.sim.guided_type.radios.trail_other.entry insert end $file
-       raise .s
-       
-}
-
-proc bld_s_options {} {
-       global fvars gvars lvars svars qv
-       global rvars l_typ showvars vv
-       global s_typ seed jumpsteps s_options
-       global hide_q1 hide_q2 hide_q3 ival whichsim trail_file trail_num
-
-       set s_options "-X -p -v $ival(5)"
-
-       if {$showvars && $gvars == 0 && $lvars == 0} {
-               catch { tk_messageBox -icon info \
-               -message "Display variables marked 'show' selected, \
-               but no local or global vars are being tracked"
-       }       }
-       if {$showvars==1} { set s_options [format "%s -Y" $s_options] }
-       if {$s_typ==2} { set s_options [format "%s -i" $s_options] }
-       if {$vv && $gvars} { set s_options [format "%s -g" $s_options] }
-       if {$vv && $lvars} { set s_options [format "%s -l" $s_options] }
-       if {$svars} { set s_options [format "%s -s" $s_options] }
-       if {$rvars} { set s_options [format "%s -r" $s_options] }
-       if {$l_typ} { set s_options [format "%s -m" $s_options] }
-       if {$hide_q1 != ""} { set s_options [format "%s -q%s" $s_options $hide_q1] }
-       if {$hide_q2 != ""} { set s_options [format "%s -q%s" $s_options $hide_q2] }
-       if {$hide_q3 != ""} { set s_options [format "%s -q%s" $s_options $hide_q3] }
-       if {$s_typ==1} then {
-               set trail_num ""
-               #Guided
-               if {$whichsim == 1} {
-                       #using user specified file
-                       if ![file exists $trail_file] {
-                               catch { tk_messageBox -icon info \
-                                       -message "Trail file $trail_file does not exist."
-                               }
-                               return 0
-                       }
-                       # see if file is in current directory. if not, copy to 
-                       # pan_in9999999.trail in current directory
-                       set ind [string last "\/" $trail_file]
-                       if {$ind > -1} {
-                               if {[pwd] != [string range $trail_file 0 [expr $ind - 1]]} { 
-                                       cpfile $trail_file pan_in9999999.trail
-                                       set trail_file "pan_in9999999.trail"
-                               } else {
-                                       #strip off path
-                                       set trail_file [string range $trail_file \
-                                               [expr $ind + 1] \
-                                               [expr [string length $trail_file] - 1]]
-                               }
-                       }       
-                       #see if it's a 'pan_in<#>.trail' file
-                       set is_pan_in_trail_file 0
-                       if {[string range $trail_file 0 5] == "pan_in"} {
-                               set l [string length $trail_file]
-
-                               if {[string range $trail_file \
-                                       [expr $l-6] [expr $l-1]] == ".trail"} {
-                                       set num [string range $trail_file 6 [expr $l-7]]
-                                       if [string is integer $num] {
-                                               set trail_num $num
-                                               set is_pan_in_trail_file 1
-                       }       }       }
-                       if !($is_pan_in_trail_file) {
-                               # not a 'pan_in<#>.trail' file - copy file to pan_in9999999.trail
-                               # in current directory
-                               cpfile $trail_file pan_in9999999.trail
-                               if [file exists pan_in9999999.trail] {
-                                       set trail_num 9999999
-                               } else {
-                                       catch {tk_messageBox -icon info \
-                                               -message "Unable to create input file in $pwd \
-                                                       check write permissions."
-                                       }
-                                       return 0
-                               }
-                       }
-               } else {
-                       if {![file exists pan_in.trail] && ![file exists pan_in.tra]} {
-                               catch { tk_messageBox -icon info \
-                                       -message "Trail file \'pan_in.tra(il)\' does not exist."
-                               }
-                               return 0
-                       }
-               }
-                       
-               set s_options [format "%s -t%s" $s_options $trail_num]
-       } else {
-               if {[string length $seed] > 0} {
-                       set s_options [format "%s -n%s" $s_options $seed]
-       }       }
-       if {$s_typ!=2} then {
-               if {[string length $jumpsteps] > 0} {
-                       set s_options [format "%s -j%s" $s_options $jumpsteps]
-       }       }
-       return 1
-}
-
-proc Stopsim {} {
-       global stop dbox2 Sticky PlaceSim PlaceCanvas
-       global stepper stepped howmany fd
-
-       set stop 1
-       set stepped 0
-       set stepper 0
-       add_log "<stop simulation>"
-       if {[winfo exists .s]} {
-               set PlaceSim [wm geometry .s]
-               destroy .s
-       }
-       catch {set howmany 0}
-       catch {stopbar}
-       catch { if {$Sticky($dbox2) == 0} {
-                       set PlaceCanvas(msc) [wm geometry .f$dbox2]
-                       destroy .f$dbox2
-       }       }
-       catch {
-               puts $fd "q"
-               flush $fd
-       }
-       update
-}
-
-proc Step_forw {} {
-       global stepper stepped sbox simruns PlaceSim
-
-       set stepped 1
-       set stepper 1
-       if {$simruns == 0} {
-               if {[winfo exists .s]} {
-                       set PlaceSim [wm geometry .s]
-                       destroy .s
-               }
-               runsim
-       } else {
-               catch { .c$sbox.run configure \
-               -text "Run" -command "Runsim" }
-       }
-}
-
-proc Rewind {} {
-       global Depth s_typ whichsim trail_file
-       global Sdbox Spbox
-       global seed jumpsteps simruns
-       global hide_q1 hide_q2 hide_q3 trail_file
-
-       catch { set jumpsteps [.s.u.r.sim.skipstep.entry get] }
-       catch { set hide_q1 [.s.u.r.hq.q1.entry get] }
-       catch { set hide_q2 [.s.u.r.hq.q2.entry get] }
-       catch { set hide_q3 [.s.u.r.hq.q3.entry get] }
-
-       if {$s_typ == 0} {
-               catch { set seed [.s.u.r.sim.seedvalue.entry get] }
-       }
-       if {$s_typ == 1} {
-               #Guided
-               set Depth 0
-               catch {
-                       foreach el [array names Spbox] {
-                               set Sdbox $Spbox($el)
-                               .c$Sdbox.z.t tag remove Rev 1.0 end
-               }       }
-               if {$whichsim == 1} {
-                       set trail_file ""
-                       catch {set trail_file [.s.u.r.sim.guided_type.radios.trail_other.entry get]}
-               }
-       }
-
-       set simruns 0
-
-       Step_forw
-}
-
-proc Runsim {} {
-       global stepper stepped sbox
-
-       catch { .c$sbox.run configure \
-               -text "Suspend" -command "Step_forw" }
-       set stepper 1
-       set stepped 0
-}
-
-proc BreakPoint {} {
-       global stepped sbox
-
-       set stepped 1
-       catch { .c$sbox.run configure \
-               -text "BreakPoint" -command "Runsim" }
-}
-
-proc runsim {} {
-       global Unix SPIN tk_major
-       global s_options s_typ dbox2
-       global stepper stepped
-       global simruns m_typ
-       global gvars lvars
-       global fd stop Depth Seq
-       global Sdbox Spbox pbox howmany Choice
-       global sbox VERBOSE SYMBOLIC msc ebc vv tsc
-       global Blue Yellow White Red Green
-       global SmallFont BigFont Sticky SparseMsc
-       global FG BG qv gvars lvars PlaceBox
-       global dbox Vvbox 
-       global whichsim trail_num
-
-       set simruns 1
-       set Vvbox 0
-       set pno 0
-       set Varnm("") ""
-       set Queues("")  ""
-       set Depth 0
-       set Seq(0) 0
-       set Pstp 1
-       set Seenpno 1
-       set Banner "Select"
-
-#      catch { unset Spbox(0) }
-       catch {
-               foreach el [array names pbox] {
-                       catch { destroy .c$pbox($el) }
-                       catch { unset pbox($el) }
-               }
-               foreach el [array names Spbox] {
-                       catch { destroy .c$Spbox($el) }
-                       catch { unset Spbox($el) }
-               }
-       }
-       if ![bld_s_options] {
-               return
-       }
-
-       add_log "<starting simulation>"
-       add_log "$SPIN $s_options pan_in"
-       update
-       set s_options [format "%s pan_in" $s_options]
-
-       mkpan_in
-
-       set sbox [mkbox "Simulation Output" "SimOut" "sim.out" 71 11 100 100]
-
-       pack append .c$sbox [button .c$sbox.stepf -text "Single Step" \
-               -command "Step_forw" ] {left frame w}
-       pack append .c$sbox [button .c$sbox.run -text "Run" \
-               -command "Runsim" ] {left frame w}
-
-       .c$sbox.b configure -text "Cancel" -command "Stopsim"
-
-       raise .c$sbox
-
-       set YSZ 12
-       set XSZ 84
-       set YNR 60
-       set NPR 10
-       set SMX 250
-       set Easy 1
-       set HAS 0
-       set HAS_CYCLE 0
-       set dontwait 0
-       set notexecutable 0
-       set lastexecutable 0
-
-       if {$m_typ == 2} {
-               if {$tsc} {
-               set pbox(0) \
-               [mkbox "Time Sequence" "Sequence" "seq.out" 80 10 100 325]
-               set dbox $pbox(0)
-       }       }
-       if {$msc} {
-               if {[hasWord "!!"] || [hasWord "\\?\\?"]} {
-                       set Easy 0
-               }
-
-               set maxx [expr [winfo screenwidth .]  - 400]    ;# button widths
-               set maxh [expr [winfo screenheight .] - (5+120)]        ;# borders+buttons
-               set dbox2 \
-               [mkcanvas "Sequence Chart" "msc" $maxx 5 1]
-               .f$dbox2.c configure -height $maxh \
-                       -scrollregion "[expr -$XSZ/2] 0 \
-                               [expr $NPR*$XSZ] [expr 100+$SMX*$YSZ]"
-
-               raise .f$dbox2
-       }
-
-       raise .c$sbox
-
-       set stop 0
-       set good_trail 0
-       if {$s_typ == 1} {
-               if $whichsim {
-                       set filen "pan_in${trail_num}.trail"
-                       if [file exists $filen] {
-                               set good_trail 1
-                       }
-               } else {
-                       if {[file exists pan_in.trail] || [file exists pan_in.tra]} {
-                               set good_trail 1
-                       }
-               } 
-               if $good_trail {
-                       catch { .c$sbox.z.t insert end "preparing trail, please wait..." }
-                       update
-                       rmfile trail.out
-                       catch {eval exec $SPIN $s_options >&trail.out} errmsg
-               } else {
-                       set errmsg "error: no trail file for guided simulation"
-                       return
-               }
-               if {[string length $errmsg]>0} {
-                       add_log "$errmsg"
-                       catch {
-                       tk_messageBox -icon info -message $errmsg
-                       }
-                       catch {
-                               set fd [open trail.out r]
-                               while {[gets $fd line] > -1} {
-                                       add_log "$line"
-                               }
-                               close $fd
-                       }
-                       Stopsim
-                       catch { destroy .c$sbox }
-                       catch { destroy .c$dbox }
-                       set simruns 0
-                       update
-                       return
-               }
-               set fd [open trail.out r]
-               catch { .c$sbox.z.t insert end "done\n" }
-       } else {
-               update
-               set fd [open "|$SPIN $s_options" r+]
-               catch "flush $fd"
-               update
-       }
-
-       if {$s_typ == 2} {
-               Runsim
-       }
-
-       if {$ebc} { startbar "Xspin Bar Chart" }
-
-       set pstp -1
-       set bailout 0
-       set realstring ""
-
-       update
-       raise .c$sbox
-       lower .
-
-       while {$stop == 0 && [eof $fd] == 0} {
-       if {$bailout == 0 && [gets $fd line] > -1} {
-               set pln 0
-               set syntax 0
-               set isvar 0
-               set pname ""
-               set i 0
-               set VERBOSE 0
-               set Fnm "pan_in"
-
-               raise .c$sbox
-
-               if {$Unix == 0} {
-                       if {[string first "processes created" $line] > 0} {
-                               set bailout 1
-               }       }
-               if {[string first "type return to proceed" $line] > 0} {
-                       puts $fd ""
-                       flush $fd
-                       update
-                       continue
-               }
-
-               set i [string first "<merge" $line]
-               if {$i > 0} {
-                       set line [string range $line 0 $i]
-               }
-
-               set lastpstp $pstp
-               set pmtch [scan $line \
-                       "%d: proc %d (%s line %d \"%s\" " \
-                       pstp pno pname pln Fnm]
-               incr pmtch -1
-               set i [string first "\[" $line]
-               if {$i > 0} {
-                       set i [expr $i + 1]
-                       set j [string length $line]
-                       set j [expr $j - 2]
-                       set stmnt [string range $line $i $j]
-               } else {
-                       set stmnt "-"
-               }
-               if {$pmtch != 4} {
-                       set pmtch [scan $line \
-                               "       proc %d (%s line %d \"%s\" " \
-                               pno pname pln Fnm]
-               }
-               if {$pmtch != 4} {
-                       if {[string first "spin: line" $line] == 0 } {
-                               scan $line "spin: line %d \"%s\" " pln Fnm
-                               if {[string first "pan_in" $Fnm] >= 0} {
-                               .inp.t tag add Rev $pln.0 $pln.end
-                               .inp.t tag configure Rev \
-                                       -background $FG -foreground $BG
-                               .inp.t yview -pickplace $pln.0
-                               }
-                               if {[string first "assertion viol" $line] < 0} {
-                                       set syntax 1
-                               }
-                       }
-                       if {[string first "Error: "   $line] >= 0 \
-                       ||  [string first "warning: " $line] >= 0 } {
-                               set syntax 1
-                       }
-               }
-               if {$pmtch != 4 && $syntax == 0} {
-                       set pmtch [scan $line \
-                               "%d: proc - (%s line %d \"%s\" " \
-                               pstp pname pln Fnm]
-                       if { $pmtch == 4 } {
-                               set pno -1
-                       }
-               }
-               #       set Fnm [string trim $Fnm "\""]
-               set pname [string trim $pname "()"]
-
-               if {[string first "TRACK" $pname] >= 0} {
-                       set nwcol([expr $pno+1]) 1
-               } elseif {[string length $pname] > 0} {
-                       if {[info exists nwcol([expr $pno+1])] \
-                       &&  $nwcol([expr $pno+1])} {
-                               unset Plabel($pno)
-##
-                               set TMP1 [expr ($pno + 1)*$XSZ]
-                               set TMP2 [expr $Pstp*$YSZ]
-                               .f$dbox2.c create line \
-                                       [expr $TMP1 - 20] $TMP2 \
-                                       [expr $TMP1 + 20] $TMP2 \
-                                       -width 2 \
-                                       -fill $Red
-                               incr TMP2 4
-                               .f$dbox2.c create line \
-                                       [expr $TMP1 - 20] $TMP2 \
-                                       [expr $TMP1 + 20] $TMP2 \
-                                       -width 2 \
-                                       -fill $Red
-##
-                       }
-                       set nwcol([expr $pno+1]) 0
-               }
-               if {$pmtch == 4 && $syntax == 0} {
-                       if {$ebc} {
-                               if {[string first "values:" $line] < 0} {
-                                       stepbar $pno $pname
-                       }       }
-                       if {$m_typ == 1 && $tsc} {
-                               if { [info exists pbox($pno)] == 0 } {
-                                       set pbox($pno) [mkbox \
-                                               "Proc $pno ($pname)" \
-                                               "Proc$pno" "proc.$pno.out" \
-                                               60 10 \
-                                               [expr 100+$pno*25] \
-                                               [expr 325+$pno*35] ]
-                               }
-                               set dbox $pbox($pno)
-                       } elseif {$m_typ == 0 && $tsc} {
-                               if { [info exists Spbox($pno)] == 0 } {
-                                       set Spbox($pno) \
-                                               [mkbox "$pname (proc $pno)" \
-                                               "$pname" "" \
-                                               60 10 \
-                                               [expr 100+$pno*25] \
-                                               [expr 325+$pno*35] ]
-                                       readinfile .c$Spbox($pno).z.t "pan_in"
-                               }
-                               set Sdbox $Spbox($pno)
-                       }
-               } elseif { [string first "..." $line] > 0 && \
-                          [regexp "^\\\t*MSC: (.*)" $line] == 0 } {
-                       set $line ""
-                       set syntax 1
-                       set pln 0
-               } elseif {$s_typ == 2 \
-                     && [string first "Select " $line] == 0 } {
-                       set Banner $line
-                       set pln 0
-                       set notexecutable 0
-                       set lastexecutable 0
-                       set has_timeout 0
-               } elseif {$s_typ == 2 \
-                     && [string first "choice" $line] >= 0 } {
-                       scan $line "    choice %d" howmany
-                       set NN [string first ":" $line]; incr NN 2
-                       set Choice($howmany) [string range $line $NN end]
-                       if {[string first "timeout" $Choice($howmany)] > 0} {
-                               set has_timeout 1
-                       }
-                       if {[string first "unexecutable," $line] >= 0} {
-                               incr notexecutable
-                       } else {
-                               set lastexecutable $howmany
-                       }
-                       set pln 0
-               } elseif {$s_typ == 2 \
-                     && [string first "Make Selection" $line] >= 0 } {
-                       scan $line "Make Selection %d" howmany
-                       if {$notexecutable == $howmany-1 && $has_timeout == 0} {
-                               set howmany $lastexecutable
-                               add_log "selected: $howmany (forced)"
-                               catch {
-                                       foreach el [array names Choice] {
-                                       unset Choice($el)
-                               } }
-                       } else {
-                               pickoption $Banner
-                               add_log "selected: $howmany"
-                       }
-                       puts $fd $howmany
-                       catch "flush $fd"
-                       set dontwait 1
-                       set pln 0
-               } elseif { [regexp "^\\\t*MSC: (.*)" $line mch rstr] != 0 } {
-                       if {$realstring != ""} {
-                       set realstring "$realstring $rstr"
-                       } else {
-                       set realstring $rstr
-                       }
-                       # picked up in next cycle
-               } elseif { [string first "processes" $line] > 0 \
-                     ||   [string first "timeout" $line]  == 0 \
-                     ||   [string first "=s==" $line]  > 0 \
-                     ||   [string first "=r==" $line]  > 0 } {
-
-                       if { $m_typ == 1 && $tsc} {
-                               set dbox $pbox(0)
-                       } elseif { $m_typ == 0 && $tsc} {
-                               if { [info exists Spbox($pno)] == 0 } {
-                                       set Spbox($pno) \
-                                               [mkbox "$pname (proc $pno)" \
-                                               "$pname" "" \
-                                               60 10 \
-                                               [expr 100+$pno*25] \
-                                               [expr 325+$pno*35] ]
-                                       readinfile .c$Spbox($pno).z.t "pan_in"
-                               }
-                               set Sdbox $Spbox($pno)
-                       }
-                       set pln 0;      # prevent tag update
-               } elseif {$syntax == 0 && [string first " = " $line] > 0 } {
-                               set isvar [string first "=" $line]
-                               set isvar [expr $isvar + 1]
-                               set varvl [string range $line $isvar end]
-                               set isvar [expr $isvar - 2]
-                               set varnm [string range $line 0 $isvar]
-                               set varnm [string trim $varnm " "]
-                               set Varnm($varnm) $varvl
-                               set isvar 1
-               } elseif { [scan $line " %s %d " varnm qnr] == 2} {
-                       if {$syntax == 0 &&  [string compare $varnm "queue"] == 0} {
-                               set isvar [string last ":" $line]
-                               set isvar [expr $isvar + 1]
-                               set varvl [string range $line $isvar end]
-                               set XX [string first "(" $line]
-                               set YY [string last  ")" $line]
-                               set ZZ [string range $line $XX $YY]
-                               set Queues($qnr) $varvl
-                               if {[info exists Alias($qnr)]} {
-                               if {[string first $ZZ $Alias($qnr)] < 0} {
-                                       set Alias($qnr) "$Alias($qnr), $ZZ"
-                               }
-                               } else {
-                                       set Alias($qnr) $ZZ
-                               }
-                               set isvar 1
-                       }
-               } elseif {[string length $line] == 0} {
-                       if {$dontwait == 0} { set stepper 0 }
-                       set pln 0
-                       set Depth [expr $Depth + 1]
-                       set Seq($Depth) [tell $fd]
-                       set dontwait 0
-               }
-
-
-       if {$syntax == 0} {
-               if {[string first "terminates" $line] > 0} {
-                       set pln -1
-                       set stmnt "<stop>"
-               }
-##NEW
-               if {$pln > 0 && [string first "pan_in" $Fnm] >= 0} {
-                       .inp.t tag remove hilite 0.0 end
-                       src_line $pln
-               }
-##END
-               if {$m_typ == 0} {
-                       if {$pln > 0 && [string first "pan_in" $Fnm] >= 0} {
-                               catch {
-                               .c$Sdbox.z.t yview -pickplace $pln.0
-                               .c$Sdbox.z.t tag remove Rev 1.0 end
-                               .c$Sdbox.z.t tag add Rev $pln.0 $pln.end
-                               .c$Sdbox.z.t tag configure Rev \
-                                       -background $FG -foreground $BG
-                       }       }
-               } elseif {$m_typ == 1} {
-                       if { [info exists pbox($pno)] == 0 } {
-                               set pbox($pno) [mkbox \
-                                       "Proc $pno ($pname)" \
-                                       "Proc$pno" "proc.$pno.out" \
-                                       60 10 \
-                                       [expr 100+$pno*25] \
-                                       [expr 325+$pno*35] ]
-                       }
-                       set dbox $pbox($pno)
-                       catch {
-                               .c$dbox.z.t yview -pickplace end
-                               .c$dbox.z.t insert end "$line\n"
-                       }
-               } elseif {$m_typ == 2 && $pln != 0 \
-               &&  [string first "unexecutable, " $line] < 0} {
-                       catch { .c$dbox.z.t yview -pickplace end }
-                       catch { .c$dbox.z.t insert end "$pno:$pln" }
-                       for {set i $pno} {$i > 0} {incr i -1} {
-                               catch { .c$dbox.z.t insert end "\t|" }
-                       }
-                       catch { .c$dbox.z.t insert end "\t|>$stmnt\n" }
-               }
-               if {$msc && $pln != 0} {
-                       set Mcont "--"
-                       set HAS 0
-                       if { [scan $stmnt "values: %d!%d" inq inp1] == 2 \
-                       ||   [scan $stmnt "values: %d!%s" inq inp2] == 2 } {
-                               set HAS   [string first "!" $stmnt]
-                               incr HAS
-                               set Mcont [string range $stmnt $HAS end]
-                               set HAS 1
-                       } elseif { [scan $stmnt "values: %d?%d" inq inp1] == 2 \
-                       || [scan $stmnt "values: %d?%s" inq inp2] == 2 } {
-                               set HAS   [string first "?" $stmnt]
-                               incr HAS
-                               set Mcont [string range $stmnt $HAS end]
-                               set HAS 2
-                       } elseif { [string first "-" $stmnt] == 0} {
-                               set HAS 3
-                               if {$HAS_CYCLE} {
-                                       set stmnt [format "Cycle>>"]
-                               } else {
-                                       set stmnt [format "<waiting>"]
-                               }
-                       } elseif { [string first "<stop>" $stmnt] == 0} {
-                               set HAS 3
-                               set stmnt [format "<stopped>"]
-                       }
-                       if {$pno+1 > $Seenpno} { set Seenpno [expr $pno+1] }
-                       set XLOC [expr (1+$pno)*$XSZ]
-                       set YLOC [expr $Pstp*$YSZ]
-                       if {[string first "printf('MSC: " $stmnt] == 0} {
-                               set VERBOSE 1
-                               set stmnt $realstring
-                               if {[string first "BREAK" $realstring] >= 0} {
-                                       BreakPoint
-                               }
-                               set realstring ""
-                       } else {
-                               set VERBOSE 0
-                       }
-                       catch {
-                       if {$VERBOSE \
-                       ||  $HAS != 0 \
-                       ||  [info exists R($pstp,$pno)]} {
-
-                               if { $SparseMsc == 1 \
-                               ||   [info exists Plabel($pno)] == 0 \
-                               ||   ([info exists R($pstp,$pno)] == 0 \
-                               &&   ($HAS != 1 \
-                               ||   [info exists HasBox($YLOC,[expr 1+$pno])])) } {
-                                       incr Pstp
-                                       for     {set i 1} \
-                                               {$Pstp > 1 && $i <= $Seenpno} \
-                                               {incr i} {
-                                               if {[info exists HasBox($YLOC,$i)]} {
-                                                       continue
-                                               }
-                                               set TMP1 [expr $i*$XSZ]
-                                               set lncol $Blue
-                                               set lnwdt 1
-                                               catch {
-                                                       if {$nwcol($i)} {
-                                                               set lncol "gray"
-                                                               set lnwdt 15
-                                               }       }
-                                               .f$dbox2.c create line \
-                                               $TMP1 $YLOC $TMP1 \
-                                               [expr $YLOC+$YSZ] \
-                                               -width $lnwdt \
-                                               -fill $lncol
-                                       }
-                                       if {[info exists HasBox($YLOC,[expr 1+$pno])]} {
-                                               set YLOC [expr $Pstp*$YSZ]
-                               }       }
-                               if {$HAS == 1 || $HAS == 2} {
-                                       set stmnt [string range $stmnt 8 end]
-                               }
-                               if { [info exists Plabel($pno)] == 0} {
-                                       set Plabel($pno) 0
-                                       if {$SparseMsc == 0} {
-                                               set HasBox($YLOC,[expr 1+$pno]) 1
-                                       }
-                                       .f$dbox2.c create rectangle \
-                                               [expr $XLOC-20] $YLOC \
-                                               [expr $XLOC+20] \
-                                               [expr $YLOC+$YSZ] \
-                                               -outline $Red -fill $Yellow
-
-                                               if {$pname != "TRACK"} {
-                                                       .f$dbox2.c create text $XLOC \
-                                                               [expr $YLOC+$YSZ/2] \
-                                                               -font $SmallFont \
-                                                               -text "$pname:$pno"
-                                               } else {
-                                                       .f$dbox2.c create text $XLOC \
-                                                               [expr $YLOC+$YSZ/2] \
-                                                               -font $SmallFont \
-                                                               -text "<show>"
-                                               }
-
-                                       set YLOC [expr $Pstp*$YSZ]
-                                       incr Pstp
-                                       for     {set i 1} \
-                                               {$Pstp > 1 && $i <= $Seenpno} \
-                                               {incr i} {
-                                               set TMP1 [expr $i*$XSZ]
-                                               set lncol $Blue
-                                               set lnwdt 1
-                                               catch {
-                                                       if {$nwcol($i)} {
-                                                               set lncol "gray"
-                                                               set lnwdt 15
-                                               }       }
-                                               .f$dbox2.c create line \
-                                               $TMP1 $YLOC $TMP1 \
-                                               [expr $YLOC+$YSZ] \
-                                               -width $lnwdt \
-                                               -fill $lncol
-                                       }
-                               }
-                               if {(1+$pno) > $NPR} {
-                                       set NPR [expr $pno+2]
-                                       .f$dbox2.c configure \
-                                        -scrollregion \
-                                        "[expr -$XSZ/2] 0 \
-                                         [expr $NPR*$XSZ] [expr $SMX*$YSZ]"
-                               }
-                               if {$Pstp > $SMX-2} {
-                                       set SMX [expr 2*$SMX]
-                                       .f$dbox2.c configure \
-                                        -scrollregion \
-                                        "[expr -$XSZ/2] 0 \
-                                         [expr $NPR*$XSZ] [expr $SMX*$YSZ]"
-                               }
-
-                               if { [info exists R($pstp,$pno)] == 0 } {
-                                       if {$VERBOSE == 1} {
-                                               if {[string first "~W " $stmnt] == 0} {
-                                                       set BoxFil $White
-                                                       set stmnt [string range $stmnt 3 end] 
-                                               } else { if {[string first "~G " $stmnt] == 0} {
-                                                       set BoxFil $Green
-                                                       set stmnt [string range $stmnt 3 end]
-                                               } else { if {[string first "~R " $stmnt] == 0} {
-                                                       set BoxFil $Red
-                                                       set stmnt [string range $stmnt 3 end]
-                                               } else { if {[string first "~B " $stmnt] == 0} {
-                                                       set BoxFil $Blue
-                                                       set stmnt [string range $stmnt 3 end]
-                                               } else { set BoxFil $Yellow } } } }
-                                               set BoxLab $stmnt
-                                               if {[string first "line " $stmnt] == 0} {
-                                                       scan $stmnt "line %d" pln
-                                                       set Fnm "pan_in"        ;# not necessarily right...
-                                               }
-                                       } else {
-                                               set BoxLab $pstp
-                                               set BoxFil $White
-                                       }
-                                       if {$SparseMsc == 0} {
-                                               set HasBox($YLOC,[expr 1+$pno]) 1
-                                       }
-                                       set R($pstp,$pno) \
-                                               [.f$dbox2.c create rectangle \
-                                                [expr $XLOC-20] $YLOC \
-                                                [expr $XLOC+20] \
-                                                [expr $YLOC+$YSZ] \
-                                                -outline $Blue -fill $BoxFil]
-                                       set T($pstp,$pno) \
-                                               [.f$dbox2.c create text \
-                                                $XLOC \
-                                                [expr $YLOC+$YSZ/2] \
-                                               -font $SmallFont \
-                                               -text $BoxLab]
-                                       #if {$Pstp > $YNR-2} {
-                                       #       .f$dbox2.c yview \
-                                       #        [expr ($Pstp-$YNR)]
-                                       #}
-                               }
-                               if { $HAS == 3 } {
-                                       .f$dbox2.c itemconfigure \
-                                        $R($pstp,$pno) \
-                                        -outline $Red -fill $Yellow
-                               }
-
-                               if {$SYMBOLIC} {
-                                       .f$dbox2.c itemconfigure $T($pstp,$pno) \
-                                               -font $SmallFont -text "$stmnt"
-                               } else {
-                                       if {$VERBOSE == 0 } {
-                                               .f$dbox2.c bind $T($pstp,$pno) <Any-Enter> "
-                                               .f$dbox2.c itemconfigure $T($pstp,$pno) \
-                                                       -font $BigFont -text {$stmnt}
-                                               .inp.t tag remove hilite 0.0 end
-                                               if {[string first "pan_in" $Fnm] >= 0} {
-                                                       src_line $pln
-                                               }
-                                               "
-                                               .f$dbox2.c bind $T($pstp,$pno) <Any-Leave> "
-                                               .f$dbox2.c itemconfigure $T($pstp,$pno) \
-                                                       -font $SmallFont -text {$pstp}
-                                               "
-                                       } else {
-                                               .f$dbox2.c bind $T($pstp,$pno) <Any-Enter> "
-                                               .inp.t tag remove hilite 0.0 end
-                                               if {[string first "pan_in" $Fnm] >= 0} {
-                                                       src_line $pln
-                                               }
-                                               "
-                                       }
-                               }
-                       }
-
-                       set YLOC [expr $YLOC+$YSZ/2]
-                       if {$HAS == 1} {
-                               if { [info exists Q_add($inq)] == 0 } {
-                                       set Q_add($inq) 0
-                                       set Q_del($inq) 0
-                               }
-                               set Slot $Q_add($inq)
-                               incr Q_add($inq) 1
-
-                               set Mesg_y($inq,$Slot) $YLOC
-                               set Mesg_x($inq,$Slot) $XLOC
-                               set Q_val($inq,$Slot) $Mcont
-                       
-                               set Rem($inq,$Slot) \
-                                       [.f$dbox2.c create text \
-                                       [expr $XLOC-40] $YLOC \
-                                       -font $SmallFont -text $stmnt]
-                       } elseif { $HAS == 2 } {
-                               if {$Easy} {
-                                       set Slot $Q_del($inq)
-                                       incr Q_del($inq) 1
-                               } else {
-                                       for {set Slot $Q_del($inq)} \
-                                               {$Slot < $Q_add($inq)} \
-                                               {incr Slot} {
-                                       if {$Q_val($inq,$Slot) == "_X_"} {
-                                                       incr Q_del($inq) 1
-                                               } else {
-                                                       break
-                                       }       }
-
-                                       for {set Slot $Q_del($inq)} \
-                                               {$Slot < $Q_add($inq)} \
-                                               {incr Slot} {
-                                       if {$Mcont == $Q_val($inq,$Slot)} {
-                                               set Q_val($inq,$Slot) "_X_"
-                                               break
-                                       }       }
-                               }
-                               if {$Slot >= $Q_add($inq)} {
-                                       add_log "<<error: cannot match $stmnt>>"
-                               } else {
-                                       set TMP1 $Mesg_x($inq,$Slot)
-                                       set TMP2 $Mesg_y($inq,$Slot)
-                                       if {$XLOC < $TMP1} {
-                                               set Delta -20
-                                       } else {
-                                               set Delta 20
-                                       }
-                                       .f$dbox2.c create line \
-                                               [expr $TMP1+$Delta] $TMP2 \
-                                               [expr $XLOC-$Delta] $YLOC \
-                                               -fill $Red -width 2 \
-                                               -arrow last -arrowshape {5 5 5}
-
-                                       if {$SparseMsc == 0} {
-                                               set TMP3 5
-                                       } else {
-                                               set TMP3 0
-                                       }
-
-                                       .f$dbox2.c coords $Rem($inq,$Slot) \
-                                               [expr ($TMP1 + $XLOC)/2] \
-                                               [expr ($TMP2 + $YLOC)/2 - $TMP3]
-                                       .f$dbox2.c raise $Rem($inq,$Slot)
-                               }
-                       } }
-               }
-               if {$pln == 0 && ($gvars || $lvars || $qv)} {
-                       if {$Vvbox == 0} {
-                               if {$vv} { set Vvbox [mkbox "Data Values" \
-                                       "Vars" "var.out" 71 19 100 350] }
-                       } else {
-                               catch { .c$Vvbox.z.t delete 0.0 end }
-                       }
-                       if {$vv} {
-                               if {$gvars || $lvars} {
-                                       raise .c$Vvbox
-                                       foreach el [lsort [array names Varnm]] {
-                                       if {[string length $Varnm($el)] > 0} {
-                                       catch { .c$Vvbox.z.t insert \
-                                               end "$el = $Varnm($el)\n" }
-                                       }       }
-                               }
-                               if {$qv} {
-                                       foreach el [lsort [array names Queues]] {
-                                       catch {
-                                       .c$Vvbox.z.t insert end "queue $el ($Alias($el))\n"
-                                       .c$Vvbox.z.t insert end "       $Queues($el)\n"
-                                       }       }
-                       }       }
-               }
-       } else {
-                       set stepper 0
-       }
-               if {$isvar == 0} {
-                       if {$syntax == 1} {
-                               if {[string first "..." $line] < 0} {
-                                       add_log "$line"
-                               catch { .c$sbox.z.t insert end "$line\n" }
-                               catch { .c$sbox.z.t yview -pickplace end }
-                               }
-                       } else {
-                               if {[string length $line] > 0} {
-                               catch { .c$sbox.z.t insert end "$line\n" }
-                               catch { .c$sbox.z.t yview -pickplace end }
-                               }
-                               if {$m_typ == 2 && \
-                                       [string first "START OF CYCLE" $line] > 0} {
-                                       catch { .c$dbox.z.t yview -pickplace end }
-                                       catch { .c$dbox.z.t insert end "$line\n" }
-                                       catch {
-                                       set XLOC [expr $Seenpno*$XSZ+$XSZ/2]
-                                       set YLOC [expr $Pstp*$YSZ+$YSZ/2]
-
-                                       .f$dbox2.c create text \
-                                               [expr $XLOC+$XSZ] $YLOC \
-                                               -font $SmallFont \
-                                               -text "Cycle/Waiting" \
-                                               -fill $Red
-
-                                       .f$dbox2.c create line \
-                                               $XLOC $YLOC \
-                                               [expr $XLOC+$XSZ/2] $YLOC \
-                                               -fill $Red \
-                                               -arrow first -arrowshape {5 5 5}
-                                       }
-                                       set HAS_CYCLE [expr $YLOC+1]
-                               }
-                               if {$m_typ == 2 && $HAS == 3 && $HAS_CYCLE != 0} {
-                                       catch {
-                                       set YLOC [expr $Pstp*$YSZ+$YSZ/2]
-                                       set XLOC0 [expr $pno*$XSZ+$XSZ]
-                                       set XLOC [expr $Seenpno*$XSZ+$XSZ]
-                                       .f$dbox2.c create line \
-                                               $XLOC0 [expr $YLOC-$YSZ/2] \
-                                               $XLOC0 $YLOC \
-                                               -fill $Red
-                                       .f$dbox2.c create line \
-                                               $XLOC0 $YLOC $XLOC $YLOC \
-                                               -fill $Red
-
-                                       set XLOC [expr $Seenpno*$XSZ+$XSZ]
-
-                                       .f$dbox2.c create line \
-                                               $XLOC $YLOC $XLOC \
-                                               [expr $HAS_CYCLE-1] \
-                                               -fill $Red
-               }       }       }       }
-               # mystery update:
-               if {$tk_major >= 4 || $m_typ != 1} {
-                       update  ;# tk 3.x can crash on this
-               }
-
-               if {$syntax == 0 \
-               &&  $stop == 0 \
-               &&  $stepped == 1 \
-               &&  $stepper == 0 \
-               &&  $dontwait == 0} {
-                       update  ;# here it is harmless also with tk 3.x
-                       tkwait variable stepper
-               }
-       } else {
-               if {$s_typ == 0 || $s_typ == 2} {
-                       add_log "<at end of run>"
-               } else {
-                       add_log "<at end of trail>"
-               }
-               catch { addscales $dbox2 }
-               if {$ebc} { barscales }
-               update
-               tkwait variable stepper
-       }
-       }
-       # end of guided trail
-
-       while {$stepper == 1} {
-               tkwait variable stepper
-       }
-       teardown
-       
-       catch "close $fd"
-       add_log "<done>"
-
-       update
-}
-
-proc teardown {} {
-       global m_typ pbox sbox dbox Spbox Vvbox
-       global simruns stop stepped stepper howmany
-
-       set simruns 0
-       set stop 1
-       set stepped 0
-       set stepper 0
-       catch { set howmany 0 }
-       catch {
-               if { $m_typ == 1 } {
-                       foreach el [array names pbox] {
-                               catch { destroy .c$pbox($el) }
-                               catch { unset pbox($el) }
-                       }
-               } elseif { $m_typ == 0 } {
-                       foreach el [array names Spbox] {
-                               catch { destroy .c$Spbox($el) }
-                               catch { unset Spbox($el) }
-               }       }
-       }
-       if {[winfo exists .c$sbox]} {
-               set x "Simulation Output"
-               set PlaceBox($x) [wm geometry .c$sbox]
-               set k [string first "\+" $PlaceBox($x)]
-               if {$k > 0} {
-                       set PlaceBox($x) [string range $PlaceBox($x) $k end]
-               }
-               destroy .c$sbox
-       }
-       catch { destroy .c$dbox }
-       if {[winfo exists .c$Vvbox]} {
-               set x "Data Values"
-               set PlaceBox($x) [wm geometry .c$Vvbox]
-               set k [string first "\+" $PlaceBox($x)]
-               if {$k > 0} {
-                       set PlaceBox($x) [string range $PlaceBox($x) $k end]
-               }
-               destroy .c$Vvbox
-       }
-}
-
-set PlaceMenu  "+150+150"
-
-proc pickoption {nm} {
-       global howmany Choice PlaceMenu
-
-       catch {destroy .prompt}
-       toplevel .prompt
-       wm title .prompt "Select"
-       wm iconname .prompt "Select"
-       wm geometry .prompt $PlaceMenu
-
-       text .prompt.t -relief raised -bd 2 \
-               -width [string length $nm] -height 1 \
-               -setgrid 1
-       pack append .prompt .prompt.t { top expand fillx }
-       .prompt.t insert end "$nm"
-       for {set i 0} {$i <= $howmany} {incr i} {
-               if {[info exists Choice($i)] \
-               &&  $Choice($i) != 0 \
-               &&  [string first "outside range" $Choice($i)] < 0 \
-               &&  [string first "unexecutable," $Choice($i)] <= 0} {
-                       pack append .prompt \
-                         [button .prompt.b$i -text "$i: $Choice($i)" \
-                         -anchor w \
-                         -command "set howmany $i" ] \
-                         {top expand fillx}
-
-                       set j [string first "line " $Choice($i)]
-                       if {$j > 0} {
-                         set k [string range $Choice($i) $j end]
-                         scan $k "line %d" k
-                         bind .prompt.b$i <Enter> "report $k"
-                         bind .prompt.b$i <Leave> "report 0"
-                         bind .prompt.b$i <ButtonRelease-1> "set howmany $i"
-       }       }       }
-       tkwait variable howmany
-       set PlaceMenu [wm geometry .prompt]
-       set k [string first "\+" $PlaceMenu]
-       if {$k > 0} {
-               set PlaceMenu [string range $PlaceMenu $k end]
-       }
-       catch { foreach el [array names Choice]  { unset Choice($el) } }
-       destroy .prompt
-}
-
-proc report {n} {
-       .inp.t tag remove hilite 0.0 end
-       if {$n > 0} { src_line $n }
-}
-
-# validation options panel
-
-set an_typ -1; set cp_typ 0; set cyc_typ 0
-set as_typ -1;  set ie_typ 1; set ebc 0
-set ct_typ 0;  set et_typ 1
-set st_typ 0;  set se_typ 0; set bf_typ 0
-set oct_typ -1;        # remembers last setting used for compilation
-set nv_typ 1
-set po_typ -1; set cm_typ 0; set vb_typ 0
-set pr_typ 0;  set where 0
-set vr_typ 0;  set xu_typ -1
-set ur_typ 1;  set vbox 0
-set killed 0;  set Job_Done 0; set tcnt 0
-set waitwhat "none"
-set not_warned_yet 1
-
-set LastGenerate       ""
-set LastCompile        ""
-set NextCompile        ""
-
-proc syntax_check {a T} {
-       global SPIN BG FG
-
-       mkpan_in
-       add_log "$SPIN $a pan_in"
-       catch {exec $SPIN $a pan_in >&pan.tmp} err ;# added -v
-       set cnt 0
-       set maxln 50
-       set ef [open pan.tmp r]
-       .inp.t tag remove hilite 0.0 end
-       .inp.t tag remove sel 0.0 end
-       set pln 0
-       set allmsg ""
-       while {[gets $ef line] > -1} {
-               add_log "$line"
-               set allmsg "$allmsg\n$line"
-               if {[string first "spin: line" $line] >= 0} {
-                       scan $line "spin: line %d" pln
-                       src_line $pln
-               }
-               if {[string first "spin: warning, line" $line] >= 0} {
-                       scan $line "spin: warning, line %d" pln
-                       src_line $pln
-               }
-               incr cnt
-       }
-       close $ef
-       if {$cnt == 0} { add_log "no syntax errors" } else {
-               warner $T "$allmsg" 800
-       }
-       update
-}
-
-proc prescan {} {
-       global an_typ cp_typ nv_typ po_typ
-       global xu_typ as_typ ie_typ
-
-       mkpan_in
-
-       if {$an_typ == -1} {
-               set an_typ 0
-               set nv_typ [hasWord "never"]
-               if {[hasWord "accept.*:"]} {
-                       set an_typ 1
-                       set cp_typ 2
-               } elseif {[hasWord "progress.*:"]} {
-                       set an_typ 1
-                       set cp_typ 1
-               }
-       }
-       if {$po_typ == -1} {
-               if {[hasWord "_last"] \
-               ||  [hasWord "provided.*\\("] \
-               ||  [hasWord "enabled\\("]} {
-                       set po_typ 0
-               } else {
-                       set po_typ 1
-               }
-       }
-       if {$xu_typ == -1} {
-               if {[hasWord "xr"] || [hasWord "xs"]} {
-                       set xu_typ 1
-               } else {
-                       set xu_typ 0
-               }
-       }
-       if {$as_typ == -1} {
-               if {$an_typ == 0} {
-                       set as_typ [hasWord "assert"]
-                       set ie_typ 1
-               } else {
-                       set as_typ 0
-                       set ie_typ 0
-               }
-       }
-}
-
-proc basicval2 {} {
-       global e ival expl HelvBig PlaceSim
-       global an_typ cp_typ nv_typ firstime
-       global cyc_typ ct_typ lt_typ
-       global et_typ st_typ se_typ bf_typ stop
-       global vb_typ pr_typ vr_typ ur_typ xu_typ
-
-       set nv_typ 1
-       set an_typ 1
-       set cp_typ 2
-
-       dump_tl "pan.ltl"
-
-       catch { .menu.run.m entryconfigure 8 -state normal }
-       catch { .tl.results.top.rv configure -state normal }
-       set stop 0
-       set firstime 0
-       set lt_typ 1
-
-       catch {destroy .v}
-       toplevel .v
-
-       set k [string first "\+" $PlaceSim]
-       if {$k > 0} {
-               set PlaceSim [string range $PlaceSim $k end]
-       }
-
-       wm title .v "LTL Verification Options"
-       wm iconname .v "VAL"
-       wm geometry .v $PlaceSim
-
-       prescan
-
-       frame .v.correct -relief flat -borderwidth 1m
-       frame .v.cframe  -relief raised -borderwidth 1m
-
-       set z .v.correct
-
-       frame $z.rframe  -relief raised -borderwidth 1m
-
-       label $z.rframe.lb \
-               -font $HelvBig \
-               -text "Options" \
-               -relief sunken -borderwidth 1m
-
-       checkbutton $z.rframe.fc -text "With Weak Fairness" \
-               -variable cyc_typ \
-               -relief flat 
-       checkbutton $z.rframe.xu -text "Check xr/xs Assertions" \
-               -variable xu_typ \
-               -relief flat
-
-       pack append $z.rframe \
-               $z.rframe.lb {top pady 4 frame w fillx} \
-               $z.rframe.fc {top pady 4 frame w} \
-               $z.rframe.xu {top pady 4 frame w filly}
-
-       pack append $z $z.rframe {top frame nw filly}
-
-       label .v.cframe.lb \
-               -font $HelvBig \
-               -text "Verification" \
-               -relief sunken -borderwidth 1m
-
-       radiobutton .v.cframe.ea -text "Exhaustive" \
-               -variable ct_typ -value 0 \
-               -relief flat 
-       radiobutton .v.cframe.sa -text "Supertrace/Bitstate" \
-               -variable ct_typ -value 1 \
-               -relief flat 
-       radiobutton .v.cframe.hc -text "Hash-Compact" \
-               -variable ct_typ -value 2 \
-               -relief flat 
-
-       pack append .v.cframe .v.cframe.lb {top pady 4 frame nw fillx} \
-               .v.cframe.ea {top pady 4 frame nw} \
-               .v.cframe.sa {top pady 4 frame nw} \
-               .v.cframe.hc {top pady 4 frame nw}
-
-       frame .v.pf -relief raised -borderwidth 1m
-       frame .v.pf.mesg -borderwidth 1m
-       
-       label .v.pf.mesg.loss0 \
-               -font $HelvBig \
-               -text "A Full Queue" \
-               -relief sunken -borderwidth 1m
-       radiobutton .v.pf.mesg.loss1 -text "Blocks New Msgs" \
-               -variable l_typ -value 0 \
-               -relief flat
-       radiobutton .v.pf.mesg.loss2 -text "Loses New Msgs" \
-               -variable l_typ -value 1 \
-               -relief flat
-       pack append .v.pf.mesg \
-               .v.pf.mesg.loss0 {top pady 4 frame w expand fillx} \
-               .v.pf.mesg.loss1 {top pady 4 frame w} \
-               .v.pf.mesg.loss2 {top pady 4 frame w}
-       pack append .v.pf \
-               .v.pf.mesg   {left frame w expand fillx}
-
-       pack append .v \
-               .v.cframe  {top frame w fill}\
-               .v.correct {top frame w fill}\
-               .v.pf {top frame w expand fill}
-
-       pack append .v [button .v.adv -text "\[Set Advanced Options]" \
-               -command "advanced_val" ] {top fillx}
-       pack append .v [button .v.run -text "Run" \
-               -command {runval ".tl.results.t"} ] {right frame se}
-       pack append .v [button .v.exit -text "Cancel" \
-               -command "set PlaceSim [wm geometry .v]; \
-               set stop 1; destroy .v"] {right frame se}
-       pack append .v [button .v.help -text "Help" -fg red \
-               -command "roadmap2f" ] {right frame se}
-
-       tkwait visibility .v
-       raise .v
-}
-
-set PlaceBasic "+200+10"
-set PlaceAdv   "+150+10"
-
-proc basicval {} {
-       global e ival expl HelvBig PlaceBasic
-       global an_typ nv_typ firstime as_typ ie_typ
-       global cyc_typ ct_typ lt_typ as_typ ie_typ
-       global et_typ st_typ se_typ bf_typ stop
-       global vb_typ pr_typ vr_typ ur_typ xu_typ
-
-       catch { .menu.run.m entryconfigure 8 -state normal }
-       catch { .tl.results.top.rv configure -state normal }
-       set stop 0
-       set firstime 0
-       set lt_typ 0
-
-       catch {destroy .v}
-       toplevel .v
-
-       wm title .v "Basic Verification Options"
-       wm iconname .v "VAL"
-       wm geometry .v $PlaceBasic
-
-       prescan
-
-       frame .v.correct -relief flat -borderwidth 1m
-       frame .v.cframe  -relief raised -borderwidth 1m
-
-       set z .v.correct
-
-       frame $z.rframe  -relief raised -borderwidth 1m
-
-       label $z.rframe.lb \
-               -font $HelvBig \
-               -text "Correctness Properties" \
-               -relief sunken -borderwidth 1m
-       radiobutton $z.rframe.sp -text "Safety (state properties)" \
-               -variable an_typ -value 0 \
-               -relief flat \
-               -command { set cyc_typ 0; set cp_typ 0
-                       if {$an_typ == 0} {
-                               set as_typ [hasWord "assert"]
-                               set ie_typ 1
-                       }
-                }
-       frame $z.rframe.sf
-       checkbutton $z.rframe.sf.as -text "Assertions" \
-               -variable as_typ \
-               -relief flat \
-               -command {
-                       set an_typ 0
-                       if {![hasWord "assert"] && $as_typ==1} then {
-                               complain6
-                       }
-                }
-       checkbutton $z.rframe.sf.ie -text "Invalid Endstates" \
-               -variable ie_typ \
-               -relief flat \
-               -command { set an_typ 0 }
-
-       frame $z.rframe.sf.fill -width 15
-       pack append $z.rframe.sf \
-               $z.rframe.sf.fill {left frame w} \
-               $z.rframe.sf.as {top pady 4 frame w} \
-               $z.rframe.sf.ie {top pady 4 frame w}
-
-       radiobutton $z.rframe.cp -text "Liveness (cycles/sequences)" \
-               -variable an_typ -value 1 \
-               -relief flat \
-               -command {
-                       set as_typ 0; set ie_typ 0
-                       if {[hasWord "accept"]} then { set cp_typ 2 }\
-                       elseif {[hasWord "progress"]} then { set cp_typ 1 } \
-                       else complain5
-               }
-
-       frame $z.rframe.sub
-       radiobutton $z.rframe.sub.np -text "Non-Progress Cycles" \
-               -variable cp_typ -value 1 \
-               -relief flat \
-               -command {
-                       set an_typ 1
-                       if {![hasWord "progress"] && $cp_typ==1} then {
-                               complain4
-                       }
-                }
-       radiobutton $z.rframe.sub.ac -text "Acceptance Cycles" \
-               -variable cp_typ -value 2 \
-               -relief flat \
-               -command {
-                       set an_typ 1
-                       if {![hasWord "accept"] && $cp_typ==2} then {
-                               complain1
-                       }
-               }
-       checkbutton $z.rframe.sub.fc -text "With Weak Fairness" \
-               -variable cyc_typ \
-               -relief flat  \
-               -command { if {$an_typ==0} then "set cyc_typ 0; complain3" }
-
-       checkbutton $z.rframe.nv -text "Apply Never Claim (If Present)" \
-               -variable nv_typ \
-               -relief flat \
-               -command { if {![hasWord "never"] && $nv_typ==1} then "complain2" }
-       checkbutton $z.rframe.ur -text "Report Unreachable Code" \
-               -variable ur_typ \
-               -relief flat
-       checkbutton $z.rframe.xu -text "Check xr/xs Assertions" \
-               -variable xu_typ \
-               -relief flat
-
-       frame $z.rframe.sub.fill -width 15
-       pack append $z.rframe.sub \
-               $z.rframe.sub.fill {left frame w} \
-               $z.rframe.sub.np {top pady 4 frame w} \
-               $z.rframe.sub.ac {top pady 4 frame w} \
-               $z.rframe.sub.fc {top pady 4 frame w}
-
-       pack append $z.rframe \
-               $z.rframe.lb {top pady 4 frame w fillx} \
-               $z.rframe.sp {top pady 4 frame w} \
-                       $z.rframe.sf {top pady 4 frame w} \
-               $z.rframe.cp {top pady 4 frame w} \
-                       $z.rframe.sub {top pady 4 frame w} \
-               $z.rframe.nv {top pady 4 frame w} \
-               $z.rframe.ur {top pady 4 frame w} \
-               $z.rframe.xu {top pady 4 frame w filly}
-
-       pack append $z $z.rframe {top frame nw filly}
-
-       label .v.cframe.lb \
-               -font $HelvBig \
-               -text "Search Mode" \
-               -relief sunken -borderwidth 1m
-
-       radiobutton .v.cframe.ea -text "Exhaustive" \
-               -variable ct_typ -value 0 \
-               -relief flat 
-       radiobutton .v.cframe.sa -text "Supertrace/Bitstate" \
-               -variable ct_typ -value 1 \
-               -relief flat 
-       radiobutton .v.cframe.hc -text "Hash-Compact" \
-               -variable ct_typ -value 2 \
-               -relief flat 
-
-       pack append .v.cframe .v.cframe.lb {top pady 4 frame nw fillx} \
-               .v.cframe.ea {top pady 4 frame nw} \
-               .v.cframe.sa {top pady 4 frame nw} \
-               .v.cframe.hc {top pady 4 frame nw}
-
-       frame .v.pf -relief raised -borderwidth 1m
-       frame .v.pf.mesg -borderwidth 1m
-       
-       label .v.pf.mesg.loss0 \
-               -font $HelvBig \
-               -text "A Full Queue" \
-               -relief sunken -borderwidth 1m
-       radiobutton .v.pf.mesg.loss1 -text "Blocks New Msgs" \
-               -variable l_typ -value 0 \
-               -relief flat
-       radiobutton .v.pf.mesg.loss2 -text "Loses New Msgs" \
-               -variable l_typ -value 1 \
-               -relief flat
-       pack append .v.pf.mesg \
-               .v.pf.mesg.loss0 {top pady 4 frame w fillx} \
-               .v.pf.mesg.loss1 {top pady 4 frame w} \
-               .v.pf.mesg.loss2 {top pady 4 frame w}
-       pack append .v.pf \
-               .v.pf.mesg {left frame nw expand fill}
-
-       pack append .v \
-               .v.correct {left} \
-               .v.cframe  {top frame n expand fill}\
-               .v.pf {top frame n expand fill}
-
-       pack append .v [button .v.nvr -text "\[Add Never Claim from File]" \
-               -command "call_nvr" ] {top fillx}
-       pack append .v [button .v.ltl -text "\[Verify an LTL Property]" \
-               -command "destroy .v; call_tl" ] {top fillx}
-       pack append .v [button .v.adv -text "\[Set Advanced Options]" \
-               -command "advanced_val" ] {top fillx}
-       pack append .v [button .v.run -text "Run" \
-               -command {set PlaceBasic [wm geometry .v]; runval "0"} ] {right frame se}
-       pack append .v [button .v.exit -text "Cancel" \
-               -command {set PlaceBasic [wm geometry .v]; \
-               set stop 1; destroy .v}] {right frame se}
-       pack append .v [button .v.help -text "Help" -fg red \
-               -command "roadmap2e" ] {right frame se}
-
-       tkwait visibility .v
-       raise .v
-}
-
-set HasNever ""
-
-proc call_nvr {} {
-       global HasNever
-       global xversion Fname nv_typ
-
-       switch [info commands tk_getOpenFile] "" {
-               set fileselect "FileSelect open"
-       } default {
-               set fileselect "tk_getOpenFile \
-                       -filetypes { \
-                               { { Aut files }  .aut } \
-                               { { Nvr files }  .nvr } \
-                               { { All Files }   *   } \
-                               }"
-       }
-
-       set HasNever [eval $fileselect]
-
-       if {$HasNever == ""} {
-               wm title . "SPIN CONTROL $xversion -- File: $Fname"
-               set nv_typ 0
-       } else {
-               set nv_typ 1
-               set z [string last "\/" $HasNever]
-               if {$z > 0} {
-                       incr z
-                       set HsN [string range $HasNever $z end]
-               } else {
-                       set HsN $HasNever
-               }
-               wm title . "SPIN CONTROL $xversion -- File: $Fname  Claim: $HsN"
-       }
-}
-
-proc advanced_val {} {
-       global e ival expl HelvBig
-       global nv_typ firstime PlaceAdv
-       global cyc_typ ct_typ
-       global et_typ st_typ se_typ bf_typ stop po_typ cm_typ
-       global vb_typ pr_typ vr_typ ur_typ xu_typ
-
-       catch { .menu.run.m entryconfigure 8 -state normal }
-       catch { .tl.results.top.rv configure -state normal }
-       set stop 0
-       set firstime 0
-
-       catch {destroy .av}
-       toplevel .av
-
-       wm title .av "Advanced Verification Options"
-       wm iconname .av "VAL"
-       wm geometry .av $PlaceAdv
-
-       frame .av.pans
-       frame .av.pans.correct -relief flat
-       frame .av.memopts -relief flat;         # memory options panel
-       frame .av.oframe  -relief raised -borderwidth 1m ;# error trail options
-       frame .av.recomp  -relief raised -borderwidth 1m ;# recompilation
-
-       prescan
-
-       for {set x 0} {$x<=2} {incr x} {
-               frame .av.memopts.choice$x -relief flat
-               entry .av.memopts.choice$x.e1 -relief sunken -width 20
-               label .av.memopts.choice$x.e2 -text $e($x) -relief flat
-               .av.memopts.choice$x.e1 insert end $ival($x)
-
-               pack append .av.memopts.choice$x \
-                       .av.memopts.choice$x.e2 {left  frame w fillx} \
-                       [button .av.memopts.choice$x.e3 -text $expl($x) \
-                       -command "d_list $x" ] {right frame e} \
-                       .av.memopts.choice$x.e1 {right frame e fillx}
-
-               pack append .av.memopts \
-                       .av.memopts.choice$x { top frame w pady 5 fillx}
-       }
-       for {set x 7} {$x<=7} {incr x} {
-               frame .av.memopts.choice$x -relief flat
-               entry .av.memopts.choice$x.e1 -relief sunken -width 20
-               label .av.memopts.choice$x.e2 -text $e($x) -relief flat
-               .av.memopts.choice$x.e1 insert end $ival($x)
-
-               pack append .av.memopts.choice$x \
-                       .av.memopts.choice$x.e2 {left  frame w fillx} \
-                       [button .av.memopts.choice$x.e3 -text $expl($x) \
-                       -command "d_list $x" ] {right frame e} \
-                       .av.memopts.choice$x.e1 {right frame e fillx}
-
-               pack append .av.memopts \
-                       .av.memopts.choice$x { top frame w pady 5 fillx}
-       }
-       for {set x 3} {$x<=5} {incr x} {
-               frame .av.memopts.choice$x -relief flat
-               entry .av.memopts.choice$x.e1 -relief sunken -width 20
-               label .av.memopts.choice$x.e2 -text $e($x) -relief flat
-               .av.memopts.choice$x.e1 insert end $ival($x)
-
-               pack append .av.memopts.choice$x \
-                       .av.memopts.choice$x.e2 {left  frame w fillx} \
-                       [button .av.memopts.choice$x.e3 -text $expl($x) \
-                       -command "d_list $x" ] {right frame e} \
-                       .av.memopts.choice$x.e1 {right frame e fillx}
-
-               pack append .av.memopts \
-                       .av.memopts.choice$x { top frame w pady 5 fillx}
-       }
-       set z .av.pans.correct
-       frame $z.rframe  -relief raised -borderwidth 1m
-       label $z.rframe.lb3 \
-               -font $HelvBig \
-               -text "   Error Trapping   " \
-               -relief sunken -borderwidth 1m
-       radiobutton $z.rframe.c0 -text "Don't Stop at Errors" \
-               -variable et_typ -value 0 \
-               -relief flat 
-       checkbutton $z.rframe.c0a -text "Save All Error-trails" \
-               -variable st_typ \
-               -relief flat 
-       checkbutton $z.rframe.c0b -text "Find Shortest Trail (iterative)" \
-               -variable se_typ \
-               -relief flat
-       checkbutton $z.rframe.c0c -text "Use Breadth-First Search" \
-               -variable bf_typ \
-               -relief flat
-       frame  $z.rframe.basic1 
-
-       frame $z.rframe.cc
-       radiobutton $z.rframe.cc.c1 -text "Stop at Error Nr:" \
-               -variable et_typ -value 1 \
-               -relief flat 
-       entry $z.rframe.cc.c2 -relief sunken -width 8
-       $z.rframe.cc.c2 insert end "$ival(6)"
-       pack append $z.rframe.cc \
-               $z.rframe.cc.c1 {left}\
-               $z.rframe.cc.c2 {right expand fillx}
-
-       pack append $z.rframe \
-               $z.rframe.lb3 { top expand fillx frame nw} \
-               $z.rframe.cc  {top pady 4 frame w} \
-               $z.rframe.c0  {top pady 4 frame w} \
-               $z.rframe.c0a {top pady 4 frame w} \
-               $z.rframe.c0b {top pady 4 frame w} \
-               $z.rframe.c0c {top pady 4 frame w} \
-               $z.rframe.basic1 {top frame w}
-       pack append $z $z.rframe {top frame nw expand fill}
-
-       frame .av.pans.pf -relief flat
-       set z .av.pans.pf
-       frame $z.mesg -relief raised -borderwidth 1m;           # queue loss options
-       frame $z.pframe -relief raised -borderwidth 1m
-       label $z.pframe.lb2 \
-               -font $HelvBig \
-               -text "   Type of Run   " \
-               -relief sunken -borderwidth 1m
-       checkbutton $z.pframe.po -text "Use Partial Order Reduction" \
-               -variable po_typ \
-               -relief flat 
-       checkbutton $z.pframe.cm -text "Use Compression" \
-               -variable cm_typ \
-               -relief flat 
-#      checkbutton $z.pframe.vb -text "Verbose (For Debugging Only)" \
-#              -variable vb_typ \
-#              -relief flat
-       checkbutton $z.pframe.pr -text "Add Complexity Profiling" \
-               -variable pr_typ \
-               -relief flat
-       checkbutton $z.pframe.vr -text "Compute Variable Ranges" \
-               -variable vr_typ \
-               -relief flat
-
-       pack append $z.pframe \
-               $z.pframe.lb2 {top fillx pady 4 frame w} \
-               $z.pframe.po {top pady 4 frame w} \
-               $z.pframe.cm {top pady 4 frame w} \
-               $z.pframe.pr  {top pady 4 frame w} \
-               $z.pframe.vr  {top pady 4 frame w}
-
-       pack append .av.pans.pf \
-               .av.pans.pf.pframe  {top frame nw expand fill}
-       pack append .av.pans \
-               .av.pans.correct {left frame nw expand fillx}\
-               .av.pans.pf {left frame nw expand fillx}
-
-       button .av.help -text "Help" -fg red -command "roadmap2d"
-       button  .av.basic1 -text "Set" -fg red -command "stopval 1" 
-       button  .av.basic0 -text "Cancel" -command "stopval 0" 
-
-       pack append .av \
-               .av.memopts {top frame w} \
-               .av.pans {top fillx} \
-               .av.help  {left frame w} \
-               .av.basic1 {right frame e} \
-               .av.basic0 {right frame e}
-
-       raise .av
-}
-
-proc g_list {} {
-       global FG BG
-
-       catch {destroy .r}
-       toplevel .r
-
-       wm title .r "Options"
-       wm iconname .r "Options"
-
-       frame .r.top
-               listbox .r.top.list -width  6 -height 3 -relief raised
-               listbox .r.top.expl -width 40 -height 3  -relief flat
-       pack append .r.top \
-               .r.top.list {left}\
-               .r.top.expl {left}
-       frame .r.bot
-               text .r.bot.text -width 40 -height 1 -relief flat
-               .r.bot.text insert end "(Double-Click option or Cancel)"
-               button .r.bot.quit -text "Cancel" -command "destroy .r"
-       pack append .r.bot \
-               .r.bot.text {top}\
-               .r.bot.quit {frame s}
-
-       frame .r.caps
-               text .r.caps.cap1 -width 6 -height -1 -fg blue
-               text .r.caps.cap2 -width 30 -height -1 -fg blue
-               .r.caps.cap1 insert end "Option:"
-               .r.caps.cap2 insert end "Meaning:"
-       pack append .r.caps \
-               .r.caps.cap1 {left} \
-               .r.caps.cap2 {left}
-
-       pack append .r \
-               .r.caps  {frame w}\
-               .r.top {top expand} \
-               .r.bot {bottom expand}
-
-       foreach i { "-o1" "-o2" "-o3" } {
-               .r.top.list insert end $i
-       }
-       foreach i { \
-               "disable dataflow-optimizations" \
-               "disable dead variables elimination" \
-               "disable statement merging" } {
-               .r.top.expl insert end $i
-       }
-       bind .r.top.list <Double-Button-1> {
-               set extra [selection get]
-               .av.memopts.choice5.e1 insert end " $extra"
-               destroy .r
-       }
-}
-
-proc r_list {} {
-       global FG BG
-
-       catch {destroy .r}
-       toplevel .r
-
-       wm title .r "Options"
-       wm iconname .r "Options"
-
-       frame .r.top
-               listbox .r.top.list -width  6 -height 8 -relief raised
-               listbox .r.top.expl -width 40 -height 8  -relief flat
-       pack append .r.top \
-               .r.top.list {left}\
-               .r.top.expl {left}
-       frame .r.bot
-               text .r.bot.text -width 40 -height 1 -relief flat
-               .r.bot.text insert end "(Double-Click option or Cancel)"
-               button .r.bot.quit -text "Cancel" -command "destroy .r"
-       pack append .r.bot \
-               .r.bot.text {top}\
-               .r.bot.quit {frame s}
-
-       frame .r.caps
-               text .r.caps.cap1 -width 6 -height -1 -fg blue
-               text .r.caps.cap2 -width 30 -height -1 -fg blue
-               .r.caps.cap1 insert end "Option:"
-               .r.caps.cap2 insert end "Meaning:"
-       pack append .r.caps \
-               .r.caps.cap1 {left} \
-               .r.caps.cap2 {left}
-
-       pack append .r \
-               .r.caps  {frame w}\
-               .r.top {top expand} \
-               .r.bot {bottom expand}
-
-       foreach i { "-d" "-q" "-I" "-h?" "-s" "-A" "-E" "-w?" } {
-               .r.top.list insert end $i
-       }
-       foreach i { \
-               "print state tables and stop" \
-               "require all chans to be empty in valid endstates" \
-               "try to find shortest trail" \
-               "choose another seed for hash 1..32 (default 1)" \
-               "use 1-bit hashing (default is 2-bit)" \
-               "ignore assertion violation errors" \
-               "ignore invalid endstate errors" \
-               "set explicit -w parameter" \
-               "" } {
-               .r.top.expl insert end $i
-       }
-       bind .r.top.list <Double-Button-1> {
-               set extra [selection get]
-               .av.memopts.choice4.e1 insert end " $extra"
-               destroy .r
-       }
-}
-
-proc d_list {nr} {
-
-       if {$nr == 0} { roadmap2a; return }
-       if {$nr == 1} { roadmap2b; return }
-       if {$nr == 2} { roadmap2c; return }
-       if {$nr == 4} { r_list; return }
-       if {$nr == 5} { g_list; return }
-       if {$nr == 7} { roadmap2k; return }
-#      if {$nr != 3} { roadmap2; return }
-
-       catch {destroy .b}
-       toplevel .b
-
-       wm title .b "Options"
-       wm iconname .b "Options"
-
-       frame .b.top
-               scrollbar .b.top.scroll -command ".b.top.list yview"
-               listbox   .b.top.list -yscroll ".b.top.scroll set" -relief raised
-       pack append .b.top \
-               .b.top.scroll {right filly}\
-               .b.top.list {left expand}
-
-       frame .b.bot
-               text .b.bot.text -width 21 -height 1 -relief flat
-               .b.bot.text insert end "(Double-Click option)"
-               button .b.bot.quit -text "Cancel" -command "destroy .b"
-               button .b.bot.expl -text "Explanations" -command "roadmap6"
-       pack append .b.bot \
-               .b.bot.text {top frame nw}\
-               .b.bot.expl {left}\
-               .b.bot.quit {left}
-
-
-       pack append .b \
-               .b.top {top frame nw expand} \
-               .b.bot {bottom}
-
-       foreach i { \
-               "-DBCOMP" \
-               "-DCTL" \
-               "-DGLOB_ALPHA" \
-               "-DMA=?" \
-               "-DNFAIR=?" \
-               "-DNIBIS" \
-               "-DNOBOUNDCHECK" \
-               "-DNOREDUCE" \
-               "-DNOCOMP" \
-               "-DNOSTUTTER" \
-               "-DNOVSZ" \
-               "-DPRINTF" \
-               "-DRANDSTORE=?" \
-               "-DR_XPT" \
-               "-DSDUMP" \
-               "-DSVDUMP" \
-               "-DVECTORSZ=?" \
-               "-DW_XPT=?" \
-               "-DXUSAFE" \
-               } {
-               .b.top.list insert end $i
-       }
-       bind .b.top.list <Double-Button-1> {
-               set directive [selection get]
-               .av.memopts.choice3.e1 insert end " $directive"
-               destroy .b
-       }
-}
-
-proc complain1 {} {
-       set m "warning: there are no accept labels"
-       add_log $m
-       catch { tk_messageBox -icon info -message $m }
-}
-
-proc complain2 {} {
-       set m "warning: there is no never claim"
-       add_log $m
-       catch { tk_messageBox -icon info -message $m }
-}
-
-proc complain3 {} {
-       set m "weak fairness is irrelevant to state properties"
-       add_log $m
-       catch { tk_messageBox -icon info -message $m }
-}
-
-proc complain4 {} {
-       set m "warning: there are no progress labels"
-       add_log $m
-       catch { tk_messageBox -icon info -message $m }
-}
-
-proc complain5 {} {
-       global an_typ
-       set m "warning: there are neither accept nor progress labels"
-       add_log $m
-       set an_typ 0
-       catch { tk_messageBox -icon info -message $m }
-}
-
-proc complain6 {} {
-       set m "warning: there are no assert statements in the spec"
-       add_log $m
-       catch { tk_messageBox -icon info -message $m }
-}
-
-proc complain7 {} {
-       set m "warning: Breadth-First Search implies a restriction to Safety properties"
-       add_log $m
-       catch { tk_messageBox -icon info -message $m }
-}
-
-proc complain8 {} {
-       set m "error: cannot combine -DMA and -DBITSTATE"
-       add_log $m
-       catch { tk_messageBox -icon info -message $m }
-}
-
-proc stopval {how} {
-       global stop ival PlaceAdv
-
-       if {$how} {
-       set ival(0) "[.av.memopts.choice0.e1 get]"
-       set ival(1) "[.av.memopts.choice1.e1 get]"
-       set ival(2) "[.av.memopts.choice2.e1 get]"
-       set ival(3) "[.av.memopts.choice3.e1 get]"
-       set ival(4) "[.av.memopts.choice4.e1 get]"
-       set ival(5) "[.av.memopts.choice5.e1 get]"
-       set ival(7) "[.av.memopts.choice7.e1 get]"
-       set ival(6) "[.av.pans.correct.rframe.cc.c2 get]"
-       }
-       set stop 1
-       if {[winfo exists .av]} {
-               set PlaceAdv [wm geometry .av]
-               set k [string first "\+" $PlaceAdv]
-               if {$k > 0} {
-                       set PlaceAdv [string range $PlaceAdv $k end]
-               }
-               destroy .av
-       }
-}
-
-proc log {n} {
-       set m 1
-       set cnt 0
-       while {$m<$n} {
-               set m [expr $m*2]
-               incr cnt
-       }
-       return $cnt
-}
-
-proc bld_v_options {} {
-       global an_typ cp_typ cyc_typ as_typ ie_typ
-       global et_typ st_typ se_typ l_typ bf_typ
-       global ct_typ ival v_options a_options
-       global c_options po_typ cm_typ vb_typ
-       global pr_typ vr_typ ur_typ xu_typ
-       global ol_typ oct_typ nv_typ lt_typ
-
-       set ol_typ $l_typ
-       set oct_typ $ct_typ
-
-       set a_options "-a -X"
-       if {$l_typ==1}  { set a_options [format "%s -m" $a_options] }
-       if {$lt_typ==1} { set a_options [format "%s -N pan.ltl" $a_options] }
-
-       set Mbytes $ival(0)
-       catch { set Mbytes [.av.memopts.choice0.e1 get] }
-
-       # the Mstate scale resolution is in thousands: 2^10
-       set Mstate [expr 10+[log $ival(1)]]
-       catch { set Mstate [expr 10+[log [.av.memopts.choice1.e1 get]]] }
-       set Mdepth $ival(2)
-       catch { set Mdepth [.av.memopts.choice2.e1 get] }
-       catch { set ival(0) "[.av.memopts.choice0.e1 get]" }
-       catch { set ival(1) "[.av.memopts.choice1.e1 get]" }
-       catch { set ival(2) "[.av.memopts.choice2.e1 get]" }
-       catch { set ival(3) "[.av.memopts.choice3.e1 get]" }
-       catch { set ival(4) "[.av.memopts.choice4.e1 get]" }
-       catch { set ival(5) "[.av.memopts.choice5.e1 get]" }
-       catch { set ival(7) "[.av.memopts.choice7.e1 get]" }
-
-       if {$ct_typ == 2} {     ;# hash-compact
-               set c_options [format "-DHC -DMEMLIM=%d" $Mbytes]
-
-               # in exhaustive mode: #hashtable ~~ #states
-
-               set v_options "-X -m$Mdepth -w$Mstate"
-
-               if {$Mstate >= $Mbytes} {
-               catch {
-               tk_messageBox -icon info \
-                       -message "The Estimated Statespace size exceeds \
-the maximum that the Memory limit you set would allow."
-               }
-                       return 0
-               }
-       } elseif {$ct_typ==1}   {
-               set c_options [format "-DBITSTATE -DMEMLIM=%d" $Mbytes]
-
-               # in supertrace mode: #bits ~~ 128x #states
-               # (effectively the #bytes will be ~~ 16x #states)
-
-               set Mstate [expr 7+$Mstate]
-               set v_options "-X -m$Mdepth -w$Mstate"
-
-               if {$Mstate-3 >= $Mbytes} {
-               catch {
-               tk_messageBox -icon info \
-                       -message "The Estimated Statespace size exceeds \
-maximum allowed by the Memory limit that you set would allow."
-               }
-                       return 0
-               }
-       } else {
-               set c_options [format "-DMEMLIM=%d" $Mbytes]
-
-               # in exhaustive mode: #hashtable ~~ #states
-
-               set v_options "-X -m$Mdepth -w$Mstate"
-
-               if {$Mstate >= $Mbytes} {
-               catch {
-               tk_messageBox -icon info \
-                       -message "The Estimated Statespace size exceeds \
-the maximum that the Physical Memory limit allows."
-               }
-                       return 0
-               }
-       }
-       set c_options [format "-D_POSIX_SOURCE %s" $c_options]
-       if {$an_typ==0} { set c_options [format "%s -DSAFETY" $c_options] }
-       if {$an_typ==1 && $cp_typ==1}   { set c_options [format "%s -DNP" $c_options] }
-       if {$po_typ==0} { set c_options [format "%s -DNOREDUCE" $c_options] }
-       if {$cm_typ==1 && $ct_typ!=1}   { set c_options [format "%s -DCOLLAPSE" $c_options] }
-       if {$vb_typ==1} { set c_options [format "%s -DCHECK" $c_options] }
-       if {$nv_typ==0} { set c_options [format "%s -DNOCLAIM" $c_options] }
-       if {$se_typ!=0} { set c_options [format "%s -DREACH" $c_options] }
-       if {$bf_typ!=0} {
-               if {$an_typ != 0} {
-                       complain7
-                       set c_options [format "%s -DBFS -DSAFETY" $c_options]
-               } else {
-                       set c_options [format "%s -DBFS" $c_options]
-       }       }
-       if {$xu_typ==0 && $po_typ!=0}   { set c_options [format "%s -DXUSAFE" $c_options] }
-       if {$pr_typ==1} { set c_options [format "%s -DPEG" $c_options] }
-       if {$vr_typ==1} { set c_options [format "%s -DVAR_RANGES" $c_options] }
-       if {$cyc_typ==1}        {
-               set c_options [format "%s -DNFAIR=3" $c_options]
-       } else {
-               set c_options [format "%s -DNOFAIR" $c_options]
-       }
-       set foo $ival(3)
-       catch { set foo [.av.memopts.choice3.e1 get] }
-
-       if {[string first "-DBITSTATE" $c_options] > 0 && [string first "-DMA" $foo] > 0} {
-               complain8
-       }
-       set c_options [format "%s %s" $c_options $foo ]
-
-       set foo $ival(4)
-       catch { set foo [.av.memopts.choice4.e1 get] }
-       set v_options [format "%s %s" $v_options $foo ] 
-
-       set foo $ival(5)
-       catch { set foo [.av.memopts.choice.5.e1 get] }
-       set a_options [format "%s %s" $a_options $foo ]
-
-       if {$an_typ==0 && $as_typ==0} { set v_options [format "%s -A" $v_options] }
-       if {$an_typ==0 && $ie_typ==0} { set v_options [format "%s -E" $v_options] }
-       if {$an_typ==1 && $cp_typ==1} { set v_options [format "%s -l" $v_options] }
-       if {$an_typ==1 && $cp_typ==2} { set v_options [format "%s -a" $v_options] }
-       if {$cyc_typ==1} { set v_options [format "%s -f" $v_options] }
-       if {$ur_typ==0} { set v_options [format "%s -n" $v_options] }
-       if {$st_typ==1} { set v_options [format "%s -e" $v_options] }
-       if {$se_typ!=0} { set v_options [format "%s -i" $v_options] }
-       if {$et_typ==0} { set v_options [format "%s -c0" $v_options] }
-       if {$et_typ==1} { set v_options [format "%s -c%s" $v_options $ival(6)] }
-       if {$ct_typ==1 && $ival(7) != 2} { set v_options [format "%s -k%s" $v_options $ival(7)] }
-       return 1
-}
-
-set mt 0
-set skipmax 10
-
-proc runval {havedest} {
-       global Unix CC SPIN Fname PlaceSim
-       global v_options a_options notignored
-       global c_options Job_Done mt skipmax
-       global stop s_typ vbox waitwhat not_warned_yet
-       global LastGenerate LastCompile NextCompile
-
-       set stop 0
-       if {[bld_v_options] == 0} {
-               advanced_val
-               return
-       }
-       if {[winfo exists .v]} {
-               set PlaceSim [wm geometry .v]
-               destroy .v
-       }
-       catch {destroy .av}
-       if {[string first "\?" $c_options] > 0} {
-               add_log "error: undefined '?' in optional compiler directives"
-               return
-       }
-       if {[string first "\?" $v_options] > 0} {
-               add_log "error: undefined '?' in extra runtime options"
-               return
-       }
-       add_log "<starting verification>"
-       if {$havedest != "0"} {
-               $havedest insert end "<starting verification>\n"
-       }
-
-       set nochange [no_change]
-       if {$nochange == 0} { set LastGenerate "" }
-
-       if {$LastGenerate == $a_options} {
-               add_log "<no code regeneration necessary>"
-               if {$havedest != "0"} {
-                       $havedest insert end "<no code regeneration necessary>\n"
-               }
-               set errmsg 0
-       } else {
-               set LastCompile ""
-               add_log "$SPIN $a_options pan_in"; update
-               if {$havedest != "0"} {
-                       $havedest insert end "$SPIN $a_options pan_in\n"
-               }
-               if {$Unix} {
-                       catch {eval exec $SPIN $a_options pan_in} errmsg
-               } else {
-                       catch {eval exec $SPIN $a_options pan_in >&pan.tmp}
-                       set errmsg [msg_file pan.tmp 0]
-               }
-               if {[string length $errmsg]>0} {
-                       set foo [string first "Exit-Status 0" $errmsg]
-                       if {$foo<0} {
-                               add_log "$errmsg"
-                               if {$havedest != "0"} {
-                                       $havedest insert end "$errmsg\n"
-                               }
-                               update
-                               return
-                       }
-                       incr foo -2
-                       set errmsg [string range $errmsg 0 $foo]
-                       add_log "$errmsg"
-                       if {$havedest != "0"} {
-                               $havedest insert end "$errmsg\n"
-                       }
-       }       }
-       set LastGenerate $a_options
-
-       set NextCompile "$CC -o pan $c_options pan.c"
-
-       if {$havedest != "0"} {
-               catch { $havedest yview -pickplace end }
-       }
-       if {$LastCompile == $NextCompile && [file exists pan]} {
-               add_log "<no recompilation necessary>"
-               if {$havedest != "0"} {
-                       $havedest insert end "<no recompilation necessary>\n"
-               }
-               set errmsg 0
-       } else {
-               add_log $NextCompile
-               if {$havedest != "0"} {
-                       $havedest insert end "$NextCompile\n"
-               }
-               catch {
-                       warner "Compiling" "Please wait until compilation of the \
-executable produced by spin completes." 300
-               }
-               update
-               if {$Unix} {
-                       rmfile "./pan"
-                       catch {eval exec $NextCompile >pan.tmp 2>pan.err}
-               } else {
-                       rmfile "pan.exe"
-                       catch {eval exec $NextCompile >pan.tmp 2>pan.err}
-               }
-
-               set errmsg [msg_file pan.tmp 0]
-               if {[string length $errmsg] == 0} {
-                       set errmsg [msg_file pan.err 0]
-               } else {
-                       set errmsg "$errmsg\n[msg_file pan.err 0]"
-               }
-
-               catch {destroy .warn}
-
-               auto_reset
-               if {$Unix} {
-                       if {[auto_execok "./pan"] == "" \
-                       ||  [auto_execok "./pan"] == 0} {
-                               add_log "$errmsg"
-                               add_log "compilation failed"
-                               if {$havedest != "0"} {
-                                       $havedest insert end "<compilation failed>\n"
-                               }
-                               update
-                               return
-                       }
-               } else {
-                       if {[auto_execok "pan"] == "" \
-                       ||  [auto_execok "pan"] == 0} {
-                               add_log "$errmsg"
-                               add_log "compilation failed"
-                               if {$havedest != "0"} {
-                                       $havedest insert end "<compilation failed>\n"
-                               }
-                               update
-                               return
-       }       }       }
-
-       set LastCompile $NextCompile
-       set NextCompile ""
-
-       if {$Unix} {
-               set PREFIX "time ./pan -v"
-       } else {
-               set PREFIX "pan -v"
-       }
-       add_log "$PREFIX $v_options"; update
-       if {$havedest != "0"} {
-               $havedest insert end "$PREFIX $v_options\n"
-               catch { $havedest yview -pickplace end }
-       }
-       set errmsg ""
-       update
-       rmfile pan.out
-       set errmsg [catch {eval exec $PREFIX $v_options >&pan.out &}]
-       if {$errmsg} {
-               add_log "$errmsg"
-               add_log "could not run verification"
-               if {$havedest != "0"} {
-                       $havedest insert end "<could not run verification>\n"
-               }
-               update
-               return
-       }
-
-       set not_warned_yet 1
-       if {$havedest != "0"} {
-               set vbox $havedest
-       } else {
-               set vv [mkbox "Verification Output" "VerOut" "$Fname.out" 80 20]
-               set vbox .c$vv.z.t
-       }
-       update
-       set mt 0
-       after 5000 outcheck $vbox
-       update
-}
-
-proc outcheck {vbox} {
-       global stop where not_warned_yet runtime mt Unix Fname FG skipmax
-
-       set firstline 1
-       set have_trail 0
-       set po_red_viol 0
-
-       if {[winfo exists $vbox] == 0} {
-               add_log "<verification output panel $vbox was closed>"
-               return
-       }
-
-       set erline 0; set lnr 0
-       set nomem 0; set nerr 0
-
-       if {$stop == 0} {
-         catch { set nt [file mtime pan.out] }
-         if {$mt == $nt && $skipmax > 0} {
-               incr skipmax -1
-         } else {
-         set mt $nt
-         set skipmax 10
-         set fd [open pan.out r]
-         while {[gets $fd line] > -1} {
-               if {$firstline} {
-                       set firstline 0
-                       set nerr 0
-                       set trunc 0
-                       set nomem 0
-                       .inp.t tag remove hilite 0.0 end
-                       catch { $vbox delete 0.0 end }
-                       set lnr 0
-               }
-               catch { $vbox insert end "$line\n" }
-               incr lnr
-               catch { $vbox yview -pickplace end }
-               update
-
-               if {[string first "line" $line]>=0} {
-                       scan $line "\tline %d" where
-                       catch { src_line $where }
-               }
-               if {[string first "State-vector" $line] == 0 \
-               ||  ([string first "error:" $line] == 0 \
-               &&   [string first "error: max search depth too small" $line] != 0)} {
-                       set stop 1      ;# run must have completed
-                       set nerr [string first "errors:" $line]
-                       if {$nerr > 0} {
-                       set part [string range $line $nerr end]
-                       scan $part "errors: %d" nerr
-                       if {$nerr == 0} {
-                               catch { .tl.results.top.title configure\
-                                       -text "Verification Result: valid" -fg $FG
-                               }
-                       } else {
-                               catch { .tl.results.top.title configure\
-                                       -text "Verification Result: not valid" -fg red
-                               }
-                       }
-                       set erline $lnr
-                       incr erline -1
-                       }
-               }
-               if {[string first "search depth too small" $line]>0} {
-                       set trunc 1
-               }
-               if {[string first "wrote pan_in.trail" $line]>0} {
-                       set have_trail 1
-               }
-               if {[string first "violated: access to chan" $line]>0} {
-                       set po_red_viol 1
-               }
-               if {[string first "out of memory" $line]>0} {
-                       set nomem 1
-               }
-               if {[string first "A=atomic;" $line]>0} {
-                       set stop 1
-               }
-               update
-         }
-         catch "close $fd"
-       } }
-       if {$nomem || $po_red_viol} { set erline 0 }
-
-       if {$stop || ($have_trail && $po_red_viol==0 && ($nerr>0 || $trunc>0))} {
-               catch { $vbox yview 0.0 }
-               add_log "<verification done>"
-               if {$nerr > 0 || $trunc == 1 || $nomem == 1} {
-                       if {[file exists pan_in.trail]} {
-                               cpfile pan_in.trail $Fname.trail
-                       } elseif {[file exists pan_in.tra]} {
-                               cpfile pan_in.tra $Fname.trail
-                       }
-                       catch { repeatbox $nerr $trunc $nomem }
-               }
-       } else {
-               if {$not_warned_yet} {
-                       set runtime 0
-                       set stop 0
-                       set line "Running verification -- waiting for output"
-                       catch { $vbox insert end "$line\n" }
-                       set line "\t(kill background process 'pan' to abort run)"
-                       catch { $vbox insert end "$line\n" }
-                       if {$Unix == 0} {
-                       set line "\t(use ctl-alt-del to kill pan)"
-                       catch { $vbox insert end "$line\n" }
-                       } else {
-                       set line "\t(use /bin/ps to find pid; then: kill -2 pid)"
-                       catch { $vbox insert end "$line\n" }
-                       catch { $vbox yview -pickplace end }
-                       }
-                       set not_warned_yet 0
-               } else {
-                       incr runtime 5
-                       if {$stop} {
-                               add_log "<done>"
-                               return
-                       } else {
-                       if {$runtime%60 == 0} {
-                               set rt [expr $runtime / 60]
-                               add_log "verification now running for approx $rt min.."
-                       }}
-                       update
-               }
-               after 5000 outcheck $vbox
-       }
-}
-
-proc src_line {s} {
-       global FG BG
-       scan $s %d tgt_lnr
-
-       if {$tgt_lnr > 0} {
-       .inp.t tag add hilite $tgt_lnr.0 $tgt_lnr.end
-       .inp.t tag configure hilite -background $FG -foreground $BG
-               if {$tgt_lnr > 10} {
-       .inp.t yview -pickplace [expr $tgt_lnr-10]
-               } else {
-       .inp.t yview -pickplace [expr $tgt_lnr-1]
-               }
-       }
-}
-
-proc repeatbox { {nerr} {trunc} {nomem}} {
-       global s_typ PlaceWarn whichsim
-
-       if {$nerr <= 0 && $trunc <= 0 && $nomem <= 0} { return }
-
-       catch {destroy .rep}
-       toplevel .rep
-
-       wm title .rep "Suggested Action"
-       wm iconname .rep "Suggest"
-       wm geometry .rep $PlaceWarn
-       button .rep.b0 -text "Close" -command {destroy .rep}
-       button .rep.b1 -text "Run Guided Simulation.." \
-               -command {destroy .rep; Rewind }
-       button .rep.b2 -text "Setup Guided Simulation.." \
-               -command {destroy .rep; simulation }
-
-       if {$nerr>0} {
-               message .rep.t -width 500 -text "\
-Optionally, repeat the run with a different search\
-depth to find a shorter path to the error.
-
-Or, perform a GUIDED simulation to retrace\
-the error found in this run, and skip\
-the first series of steps if the error was\
-found at a depth greater than about 100 steps)."
-               set s_typ 1
-               set whichsim 0
-
-               pack append .rep .rep.t {top expand fill}
-               pack append .rep .rep.b0 {right}
-               pack append .rep .rep.b1 {right}
-               pack append .rep .rep.b2 {right}
-       } else {
-
-               if {$nomem>0} {
-                       message .rep.t -width 500 -text "\
-Make sure the Physical Memory parameter (under Advanced\
-Options) is set to the maximum physical memory available.\
-If not, repeat the verification with the true maximum.\
-(Don't set it higher than the physical limit though.)\
-Otherwise, use compression, or switch to a\
-Supertrace Verification."
-               } else {
-
-                       if {$trunc} {
-
-                       message .rep.t -width 500 -text "\
-If the search was incomplete (truncated)\
-because the max search depth was too small,\
-try to increase the depth limit (it is set\
-in Advanced Options of the Verification Parameters\
-Panel), and repeat the verification."
-                       }
-               }
-               pack append .rep .rep.t {top expand fill}
-               pack append .rep .rep.b0 {right}
-       }
-}
-
-# Main startup and arg processing
-# this is at the end - to make sure all
-# proc declarations were seen
-
-if {$argc == 1} {
-       set Fname "$argv"
-       wm title . "SPIN CONTROL $xversion -- File: $Fname"
-       cleanup 0
-       cpfile $argv.trail pan_in.trail
-       reopen
-
-       check_xsp $argv
-}
-
-focus .inp.t
-update
This page took 0.100106 seconds and 4 git commands to generate.