Scipad 3.1
Allan Cornet [Fri, 9 Jul 2004 14:10:53 +0000 (14:10 +0000)]
22 files changed:
scilab/tcl/scipad.tcl
scilab/tcl/scipadsources/BUGS [new file with mode: 0644]
scilab/tcl/scipadsources/CHANGELOG
scilab/tcl/scipadsources/FormatStringsForDebugWatch.sci
scilab/tcl/scipadsources/bindings.tcl
scilab/tcl/scipadsources/colorize.tcl
scilab/tcl/scipadsources/db_actbptmanagement.tcl [new file with mode: 0644]
scilab/tcl/scipadsources/db_argsmanagement.tcl
scilab/tcl/scipadsources/db_bptsmanagement.tcl [new file with mode: 0644]
scilab/tcl/scipadsources/db_configureexec.tcl
scilab/tcl/scipadsources/db_debugsession.tcl
scilab/tcl/scipadsources/db_states.tcl [new file with mode: 0644]
scilab/tcl/scipadsources/db_watch.tcl
scilab/tcl/scipadsources/debugger.tcl
scilab/tcl/scipadsources/defaults.tcl
scilab/tcl/scipadsources/mainwindow.tcl
scilab/tcl/scipadsources/menues.tcl
scilab/tcl/scipadsources/popupmenus.tcl
scilab/tcl/scipadsources/scilabexec.tcl
scilab/tcl/scipadsources/textarea.tcl
scilab/tcl/scipadsources/whichfun.tcl
scilab/tcl/words

index 22d5b78..3ba6188 100644 (file)
@@ -1,6 +1,6 @@
 #!/bin/sh
 # the next line restarts using wish \
-# exec `which wish` "$0" "$@"
+ exec `which wish` "$0" "$@"
 
 if { [info exists pad] } { 
     raise $pad
diff --git a/scilab/tcl/scipadsources/BUGS b/scilab/tcl/scipadsources/BUGS
new file mode 100644 (file)
index 0000000..3d300c9
--- /dev/null
@@ -0,0 +1,176 @@
+SCIPAD BUGS AND WISHES LIST - Rev. 3.1
+
+Bugs:
+-----
+-colorization: the regexp for the new class "numbers" is not perfect,
+ e123 is caught as number.
+
+-scipad resizes (in wrong grid units) upon font change only the first 
+ Untitled.sce (if still open, i.e. not destroyed). But, as now scipad 
+ remembers both fontsize and geometry across quit, a restart triggers 
+ nevertheless a resize, so the restart produces a geometry different than 
+ the one of the previous session.
+
+-Find in selection does not work correctly on unix.
+
+-Ctrl-v copies also inside the find/replace/filename dialogs, but does not
+ replace an existing selection. Problem of setting up the proper bindings,
+ likely. Note: this happens only on some platforms.
+
+-On unix, focus to the Find window can be off when clicking on some other window, 
+ such as scipad, even though Find stays always on top
+-Line number finding in functions may provide wrong results in some pathological
+ cases of continued lines, namely:
+ . "Mixed" continued lines, i.e. a single cont line splitted in many buffer lines,
+   some of them containing dots and some other not
+ . Nested brackets or braces in continued lines
+
+
+Old bugs/whishes which have been hacked but could have been done better:
+------------------------------------------------------------------------
+
+-if a copy-paste modification on a buffer is undone once too much, a 
+ "lifo($id) pop error, empty" results
+ -- This is now done, but perhaps not correctly. Just added a catch as I was
+  not proficient enough to find out why the commandStack and the cursorStack
+  gain different last element index only once a paste has been performed.
+  Note: tcl/tk8.4.6 now supports directly undo/redo in text widgets, and takes
+  care of the modified flag. Could therefore get rid of all this code in scipad.tcl
+
+-(the text cursor disappears every now and then while moving it around with the
+  arrows) -- now hacked: the cursor is always on and red but does not blink (is
+  it a tcl8.3.4 bug? - is blinking triggered by "events" like moving the 
+  mouse?)
+  Note: Using tcl/tk8.4.6 the cursor never disappears, therefore blinking restored
+  for that revision for Windows. For Unix, cursor blinking is disabled.
+
+-the row width of the window is wrong. As it is now it is hacked to [55], but
+ it seems to be in wrong width units. This leads to disproportions when 
+ changing font size. Btw in my WM the window size is seen in a tooltip when
+ resizing it.
+ -- Explanation: wm geometry in "grid" units - which are defined in an 
+  arbitrary way.
+
+-added  "evaluate selection",  i.e.  send to  scilab  only the  selected
+ text. It is  done, but: a) I  had has to translate \n  in commas (a very
+ long line can result, but I  found that up  to ~16300 char is  ok for
+ execstr); b) it used to go amok if the selection contains "function" 
+ without "endfunction" [scilab problem - with the latest CVS that should
+ be fixed]; c) I hacked that  comments are stripped off, but wasn't
+ proficient enough  to treat "xxx//xxx"  strings; d) it  doesn't output
+ nicely the strings passed on scilab's shell. Likely all this has to do
+ with limitations  of ScilabEval [execstr()].   In at least  one windows
+ version (old  ScilabEval? the command  is catched by the  history) the
+ first character of the command is  dropped (it was a known issue about
+ Copy/Paste).  I  do not hack-prepend a  space, as the  bug lies likely
+ there.
+Note: this is continuously changing and platform dependent. scilab 3.0RC1 has
+~4000 chars for linux and ~500 for windows. This has to do with the mechanics
+of ScilabEval and the command queue space.
+A workaround could be to via execstr(TK_GetVar), but then scipad has to be launched
+inside the master tk interpreted (perhaps in a namespace) and not in a slave interpreter.
+
+-after a succesful find the match is highlighted in green. This remains the 
+ selection color until one switches to another buffer. Hacked - now the text 
+ found gets selected normally, period.
+
+-command for indenting/unindenting. Now I just duplicated the Comment/uncomment
+ stuff, which works fine but just for two spaces. This is a "hard indentation":
+ physical insertion/removal of spaces; someone made provisions for a tag 
+ "indentation". probably a logical one. I think physical is more general.
+
+-after a paste (either Ctrl-v or 2nd-button), the selection is cleared. 
+ I could as well have left it in the old place with the cursor at 
+ the insertion point - but then typing erases the selection even if the 
+ cursor is somewhere else. A matter of taste. The two copy paste methods
+ are not identical since now the latter is equivalent to a copy-paste 
+ operation, so I could even decide a different option for each of the two.
+
+-the debugger works well for functions but shell scripts are not supported yet.
+  Step by step execution remains to be implemented, but this requires Scilab
+  core support.
+
+
+Wishes:
+-------
+
+-default colors, fonts, options are user-modifiable (currently, it is necessary to
+ edit SCI/tcl/scipadsources/defaults.tcl)
+
+-parentheses and brackets get colorized in colors according to their level
+ of nesting
+
+-unmatched parentheses are highlighted (e.g. stroke-tru) like in Matlab's editor
+
+-colorization supports different sets of keywords: e.g. for scopes, % constants,
+ hardcoded functions, distribution macros, toolbox additions; dynamical colorization 
+ (the current loaded functions, defined global variables are highlighted properly  -
+ the list could be read either at scipad startup or resfreshed on demand)
+
+-highlighting of for--end, while--end, select--end blocks while typing, 
+ like for parentheses; scope background remains highlighted in a background tint 
+ (choose a suitable scheme for nested structures), OR, block keywords 
+ are highlighted in different colors than standard keywords.
+-On some platforms and builds (e.g. xaw/linux) scipad cannot paste-in text selected 
+ in the standard scilab shell, which is a dire need.
+ Currently scipad can nicely either import text copied from applications which 
+ support Ctrl-C (with Ctrl-C) or 2nd button copy-paste (X selection), including even
+ the scilab-gtk shell. What is the technical difference with the standard scilab
+ shell? Note: this happens only on some platforms. At least on Win2000 it works
+ since Scilab 3.0
+
+-a taylored 3rd-button popup menu (currently it is just the edit menu) - i.e.
+ it includes execute selection, comment/uncomment this line, insert/delete
+ breakpoints
+
+-Add a Revert to saved... in the file menu.
+
+-display only pruned filenames (and full pathnames in case of ambiguity) 
+ in the titlebar, windows menu, etc. 
+
+-smart indentation (i.e., for automatically indents the next line, end
+ automatically indents back, etc)
+-(customizable?) tool bar
+-paned window, to allow for viewing two different parts of the text buffer at the
+ same time, or maybe two different buffers.
+-add a 'Go to function...' entry in a menu. Upon selection, a sub-menu would open
+ allowing for selection of any function found in all the currently opened buffers.
+ Could also be displayed in a combobox (but tk does not support combos natively)
+ which would be part of the tool bar. Or a spinbox plus a 'Go' button.
+ The buffer search could be launched only on invocation of the spinbox arrows or
+ on menu selection.
+
+-add a "Go to line N in function..." and "Go to logical line", which take into 
+ account continued lines, procedures and menu entries.
+
+-subwindows (e.g Find.., file choosers, debugger, tk_messageBoxes...)
+ should inherit the current font size
+
+-Outside of scipad: add and bulletproof a function which finds the source of a
+ library function and loads it into scipad showfunctionpath(), and propose it to
+ scilab core
+ Note: the existing get_function_path does the same but searches only in SCI.
+
+-same with a function for opening the script which produced the lasterro(): 
+ editoffendingline()
+
+-"compile xml as help page" command
+
+-"Create help skeleton" command (invokes help_skeleton in Scilab and retrieves the
+ generated text for modification in Scipad)
+
+-In the file menu, add the list of the n more recently opened files for quick access
+
+-Conditional breakpoints
+
+-Allow to watch an element of a variable, and not only the variable array (i.e. to watch
+ d(1) and not only d if d is a matrix). Problem: if d exists in Scilab, exists(d) is true
+ but exists(d(1)) is false!
+
+-Improve the aesthetics of Scipad (see sciGUI)
+
index 763df08..a61c413 100644 (file)
@@ -366,3 +366,62 @@ Francois VOGEL, 17/06/04
    file permissions that way. TMPDIR is set for Scipad in scipad.sci
  * splitted debugger.tcl in several sub-files to ease maintainability
  * version --> 3.0 (submitted to the Scilab team under bug #559)
+
+Francois VOGEL, 07/07/04
+ * simplified the use of the debugger: Scipad now maintains a state variable containing
+   "NoDebug" (no debugger correct configuration performed nor debug session started),
+   "ReadyForDebug" (debugger configuration performed OK but no debug session started), or
+   "DebugInProgress" (debug session started, Scilab prompt is -1->)
+   A schematic of the state machine is available in db_state.tcl
+   This allows for the following improvements:
+   - commands add/remove breakpoint and add/remove breakpoint during debug merged in the
+     debug menu - Scipad now knows if the setbpt/delbpt should be sent or not
+   - commands remove all breakpoints and remove all breakpoints in Scilab merged in the
+     debug menu - selecting this now deletes all breakpoints both in Scipad and in Scilab
+   - debug menu entries are disabled/enabled depending on the debugger state, so that the
+     user should get less confused about the possible actions at any given time of the
+     debug session (this copes also with colorization schemes)
+   - if no debug session was initialized, the button-3 popup menu is the edit menu
+     otherwise it is the debug menu - this is the 1st contextual menu in Scipad
+   - the debugger state is made known to the user from the bakground color of the message
+     area at the bottom of the Scipad window - for improved readability, messages are now
+     displayed in black instead of blue
+ * getf "FormatStringsForDebugWatch.sci" moved to db_states.tcl. If the user did not open
+   the watch window before launching a debug session, this .sci file was not getf'ed in
+   the right workspace and was therefore unknown later on during the debug session
+   Note: putting a ScilabEval at the mainlevel (e.g. defaults.tcl) does not work!
+ * exec getwatchcomm.sce is no more performed if unnecessary, i.e. if there is no watch
+   variable defined by the user
+ * added a binding to help fixing watch window repositioning that occurred sometimes
+ * the watch variables changed by the user in the watch window are now correctly passed
+   to Scilab (bug 818 in the resume function has been corrected in the CVS)
+ * the debugger now handles correctly functions containing varargin as an input argument
+ * incorporated some corrections from ES:
+   - proc importmatlab corrected with quotes as mentioned in bug #856 (was also included
+     in the CVS by the Scilab Team)
+   - removed the # at line 3 of scipad.tcl, so that Scipad can again be launched directly
+     in Unix shells
+   - on Unix the cursor is always on again, regardless of the TCL/TK version
+ * 'Remove all breakpoints' now removes the breakpoints in all the opened buffers
+ * On start of a debug session, the currently displayed file is exec'ed. Now the buffer
+   containing the function selected during the configuration phase is also exec'ed
+ * Breakpoints sent to Scilab on start of a debug session are now collected through all
+   the opened buffers, and removed accordingly in Scilab at the end of the debug session
+ * When adding a new watch variable, its value is now immediately retrieved from Scilab,
+   it is no more necessary to resume execution
+ * incorporated Scilab Team's changes in the CVS Scipad:
+   - changed 'Scilab Group' into 'Scilab Consortium' in the About window (proc aboutme)
+   - added echo of the ScilabEval command in proc execfile from ScilabExec.tcl whatever
+     the platform (and changed the disp into a mprintf - saves space in the shell!)
+ * added int16, int32, uint8, uint16, uint32 in file "words"
+ * proc load_words now closes the file "words" after having read it
+ * active breakpoint tagging dramatically improved:
+   - corrected active breakpoint tag when breakpoint is in conditional structure (for,
+     while, or anything else)
+   - works now with sub-functions or other nested structures containing breakpoints
+   - displays the correct buffer (if already opened), i.e. the buffer where the active
+     breakpoint lies
+ * When the watch window was open at the same time the user configured execution in the
+   configure box, the next time the Add button was hit in the watch window an error poped
+   out. This is now fixed
+ * version --> 3.1
index 20c3813..ae6ac49 100644 (file)
@@ -13,7 +13,7 @@ function [svar] = FormatStringsForDebugWatch(varargin)
 
   if tvar<>1 & tvar<>2 & tvar<>4 & tvar<>5 & tvar<>6 & tvar<>8 & tvar<>10 & tvar<>15 & tvar<>16 & tvar<>17 then
     // unsupported cases
-    error("FormatStringsForDebugWatch: type not handled");
+    error("type not handled (input argument is of type "+typeof(var)+")");
 
   else
     // supported cases
@@ -48,6 +48,7 @@ function [svar] = FormatStringsForDebugWatch(varargin)
       else
         co = strcat(string(coeff(var))," ");
         if degree(var) > 0 then
+          // <TODO> search for the unknown could be improved using varn()
           varstr = string(var);
           poltok = tokens(varstr(2));
           unknown = part(poltok($),length(poltok($)));
@@ -99,11 +100,13 @@ function [svar] = FormatStringsForDebugWatch(varargin)
       if length(var) == 0 then svar = listpref + "list()";
       else
         for i = 1:length(var)
+          // <TODO> search for the undefined items could be improved using definedfields()
           ie = execstr("getfield(i,var)","errcatch");  // catch the undefined items
           if ie <> 117 then
             svar = svar + FormatStringsForDebugWatch(getfield(i,var)) + ",";
           else
             svar = svar + "\""Undefined\"",";  // Well, this actually defines this element as a string
+                                               // <TODO> find a solution for having a properly undefined element instead
           end
         end
         svar = part(svar,1:length(svar)-1);
index e89140a..d7ba799 100644 (file)
@@ -121,7 +121,7 @@ bind all <F10> {}
 bind $pad <F10> {configurefoo_bp}
 bind $pad <Control-F11> {execfile_bp}
 bind $pad <F11> {resume_bp}
-bind $pad <Shift-F11> {insertremovedebug_bp}
+#bind $pad <Shift-F11> {insertremovedebug_bp}
 bind $pad <Shift-F12> {goonwo_bp}
 bind $pad <F12> {stepbystep_bp}
 bind $pad <Control-F12> {showwatch_bp}
index 31427fe..ebd75eb 100644 (file)
@@ -20,6 +20,7 @@ proc load_words {} {
                         set words($type.$col.$ch) $line
                 }
         }
+        close $f
 }
 
 #ES 2/10/2003
@@ -213,37 +214,40 @@ proc changelanguage {newlanguage} {
 #ES,FV 27/5/04 
 proc schememenus {textarea} {
   global pad listoffile
- # set dm $pad.filemenu.debug
+  set dm $pad.filemenu.debug
   if {$listoffile("$textarea",language) == "scilab"} {
 #enable "Load into scilab"
         $pad.filemenu.exec entryconfigure 1 -state normal
 #enable all the Debug entries
+# FV 07/07/04, now this is more selectively set in function of the debugger state
+# (see setdbmenuentriesstates_bp)
 #        for {set i 1} {$i<=[$dm index last]} {incr i} {
 #            if {[$dm type $i] == "command"} {
-#               $dm entryconfigure $i -state normal
+#                $dm entryconfigure $i -state normal
 #            }
 #        }
 # restore their bindings
     bind $pad <Control-l> {execfile}
     bind $pad <F5> {filetosave %W; execfile}
-       bind $pad <F9> {insertremove_bp}
-       bind $pad <Control-F9> {removeall_bp}
-       bind $pad <F10> {configurefoo_bp}
-       bind $pad <Control-F11> {execfile_bp}
-       bind $pad <F11> {resume_bp}
-       bind $pad <Shift-F11> {insertremovedebug_bp}
-       bind $pad <Shift-F12> {goonwo_bp}
-       bind $pad <F12> {stepbystep_bp}
-    bind $pad <Control-F12> {showwatch_bp}
+#      bind $pad <F9> {insertremove_bp}
+#      bind $pad <Control-F9> {removeall_bp}
+#      bind $pad <F10> {configurefoo_bp}
+#      bind $pad <Control-F11> {execfile_bp}
+#      bind $pad <F11> {resume_bp}
+##     bind $pad <Shift-F11> {insertremovedebug_bp}
+#      bind $pad <Shift-F12> {goonwo_bp}
+#      bind $pad <F12> {stepbystep_bp}
+#    bind $pad <Control-F12> {showwatch_bp}
+    setdbmenuentriesstates_bp
   } else {
 #disable "Load into scilab"
         $pad.filemenu.exec entryconfigure 1 -state disabled
 #disable all the Debug entries
-#        for {set i 1} {$i<=[$dm index last]} {incr i} {
-#            if {[$dm type $i] == "command"} {
-#                $dm entryconfigure $i -state disabled
-#            }
-#        }
+        for {set i 1} {$i<=[$dm index last]} {incr i} {
+            if {[$dm type $i] == "command"} {
+                $dm entryconfigure $i -state disabled
+            }
+        }
 # remove their bindings
     bind $pad <Control-l> {}
     bind $pad <F5> {}
@@ -252,7 +256,7 @@ proc schememenus {textarea} {
        bind $pad <F10> {}
        bind $pad <Control-F11> {}
        bind $pad <F11> {}
-       bind $pad <Shift-F11> {}
+#    bind $pad <Shift-F11> {}
        bind $pad <Shift-F12> {}
        bind $pad <F12> {}
     bind $pad <Control-F12> {}
diff --git a/scilab/tcl/scipadsources/db_actbptmanagement.tcl b/scilab/tcl/scipadsources/db_actbptmanagement.tcl
new file mode 100644 (file)
index 0000000..cdb6b0c
--- /dev/null
@@ -0,0 +1,52 @@
+proc updateactivebreakpoint {} {
+    set comm1 "\[db_l,db_m\]=where();"
+    set comm2 "TK_EvalStr(\"scipad eval {updateactivebreakpointtag  \"+string(db_l(2))+\" \"+string(db_m(2))+\"}\");"
+    set fullcomm [concat $comm1 $comm2]
+    ScilabEval "     $fullcomm"
+    while {[checkscilabbusy "nomessage"] == "busy"} {}
+}
+
+proc updateactivebreakpointtag {{activeline -1} {activemacro -1}} {
+    global listoftextarea pad
+    if {$activeline == -1} {return}
+    set textareafun ""
+    foreach textarea $listoftextarea {
+        $textarea tag remove activebreakpoint 0.0 end
+        set nextfun [$textarea search -exact -forwards -regexp\
+                     "\\mfunction\\M" 0.0 end ]
+        while {$nextfun != ""} {
+            while {[lsearch [$textarea tag names $nextfun] "textquoted"] != -1 || \
+                   [lsearch [$textarea tag names $nextfun] "rem2"] != -1 } {
+                set nextfun [$textarea search -exact -forwards -regexp\
+                             "\\mfunction\\M" "$nextfun +8c" end]
+            }
+            if {$nextfun != ""} {
+                set infun [whichfun [$textarea index "$nextfun +1l"] $textarea]
+                set funname [lindex $infun 0]
+                if {$funname == $activemacro} {
+                    set textareafun $textarea
+                    set funstart [lindex $infun 3]
+                    break
+                }
+                set nextfun [$textarea search -exact -forwards -regexp\
+                             "\\mfunction\\M" "$nextfun +8c" end ]
+            }
+        }
+    }
+    if {$textareafun != ""} {
+        set windmenuindex [expr [lsearch $listoftextarea $textareafun] + 1]
+        $pad.filemenu.wind invoke $windmenuindex
+        set infun [whichfun [$textareafun index "$funstart +1l"] $textareafun]
+        set offset 1
+        # <TODO> This while loop could be improved (proc whichfun takes time to execute)
+        # Its purpose is to make the line number in the buffer correspond to $activeline
+        # reported by where() in Scilab
+        while {[lindex $infun 1] != $activeline} {
+            incr offset
+            set infun [whichfun [$textareafun index "$funstart + $offset l"] $textareafun]
+        }
+        set actline [expr $funstart + $offset ]
+        $textareafun tag add activebreakpoint "$actline linestart" "$actline lineend"
+        $textareafun see $actline
+    }
+}
index 3a14f9d..69e3511 100644 (file)
@@ -1,7 +1,6 @@
-proc Addarg_bp {w leftwin rightwin} {
+proc Addarg_bp {w focusbut leftwin rightwin} {
     global lang
     global argname argvalue
-    global buttonAdd
     set pos [$leftwin curselection]
     if {$pos == ""} {set pos -1}
     set adda $w.adda
@@ -64,7 +63,7 @@ proc Addarg_bp {w leftwin rightwin} {
         focus $adda.f.f1.entry
     }
     grab $adda
-    focus $buttonAdd
+    focus $focusbut
 }
 
 proc OKadda_bp {w pos leftwin rightwin} {
@@ -97,6 +96,12 @@ proc OKadda_bp {w pos leftwin rightwin} {
                 if {$argvalue == ""} {set argvalue $unklabel}
                 set watchvars [linsert $watchvars $pos $argname]
                 set watchvarsvals($argname) $argvalue
+                if {$argvalue == $unklabel} {
+                    set filename [creategetfromshellcomm]
+                    if {$filename != "emptyfile"} {
+                        ScilabEval "     exec(\"$filename\");"
+                    }
+                }
             }
             $leftwin insert $pos $argname
             $rightwin insert $pos $argvalue
diff --git a/scilab/tcl/scipadsources/db_bptsmanagement.tcl b/scilab/tcl/scipadsources/db_bptsmanagement.tcl
new file mode 100644 (file)
index 0000000..bb664b8
--- /dev/null
@@ -0,0 +1,131 @@
+proc insertremove_bp {{buf "current"}} {
+    global debugstate
+    if {$debugstate == "DebugInProgress"} {
+        insertremovedebug_bp $buf
+    } else {
+        if {$buf == "current"} {
+            set textarea [gettextareacur]
+        } else {
+            set textarea $buf
+        }
+        set infun [whichfun [$textarea index "insert linestart"] $textarea]
+        if {$infun !={}} {
+            set i1 "insert linestart"
+            set i2 "insert lineend"
+            set activetags [$textarea tag names $i1]
+            if {[string first breakpoint $activetags] == -1} {
+                $textarea tag add breakpoint $i1 $i2
+            } else {
+                $textarea tag remove breakpoint $i1 $i2
+                $textarea tag remove activebreakpoint $i1 $i2
+            }
+        }
+    }
+}
+
+proc insertremovedebug_bp {{buf "current"}} {
+    if {$buf == "current"} {
+        set textarea [gettextareacur]
+    } else {
+        set textarea $buf
+    }
+    if {[checkscilabbusy] == "OK"} {
+        set i1 "insert linestart"
+        set i2 "insert lineend"
+        set activetags [$textarea tag names $i1]
+        if {[string first breakpoint $activetags] == -1} {
+            set infun [whichfun [$textarea index $i1] $textarea]
+            if {$infun !={} } {
+                $textarea tag add breakpoint $i1 $i2
+                set funname [lindex $infun 0]
+                set lineinfun [expr [lindex $infun 1] - 1]
+                set setbpcomm " setbpt(\"$funname\",$lineinfun);"
+                ScilabEval $setbpcomm
+            } else {
+                # <TODO> .sce case
+            }
+        } else {
+            # There was bug(s) in scilab routines/interf/matsys.f file
+            # on this one: in -1-> mode, setbpt("foo",linenum) worked, but
+            # delbpt("foo",linenum) did not (bp was removed from dispbpt
+            # list but execution still stopped at linenum)
+            # The correction has been submitted to Scilab team (see
+            # bugzilla #718), is part of Scilab CVS and will be included
+            # in Scilab 3.0. If the patch is not installed, the following
+            # will fail.
+            set infun [whichfun [$textarea index $i1] $textarea]
+            if {$infun !={} } {
+                $textarea tag remove breakpoint $i1 $i2
+#                $textarea tag remove activebreakpoint $i1 $i2
+                set funname [lindex $infun 0]
+                set lineinfun [expr [lindex $infun 1] - 1]
+                set delbpcomm " delbpt(\"$funname\",$lineinfun);"
+                ScilabEval $delbpcomm
+            } else {
+                # <TODO> .sce case
+            }
+        }
+    }
+}
+
+proc removeall_bp {} {
+    global listoftextarea
+    if {[checkscilabbusy] == "OK"} {
+        foreach textarea $listoftextarea {
+            set saveinsert [$textarea index insert]
+            set tagranges [$textarea tag ranges breakpoint]
+            foreach {bp_start bp_stop} $tagranges {
+                $textarea mark set insert $bp_start
+                insertremove_bp $textarea
+            }
+            $textarea mark set insert $saveinsert
+        }
+    }
+}
+
+proc removescilab_bp {outp} {
+    global funnames listoftextarea
+    if {[checkscilabbusy] == "OK"} {
+        set delbpcomm ""
+        if {$funnames != ""} {
+            foreach fun $funnames {
+                set delbpcomm [concat $delbpcomm "delbpt(\"$fun\");"]
+            }
+            foreach textarea $listoftextarea {
+                set tagranges [$textarea tag ranges breakpoint]
+                foreach {tstart tstop} $tagranges {
+                    set infun [whichfun [$textarea index $tstart] $textarea]
+                    if {$infun !={} } {
+                        set funname [lindex $infun 0]
+                        set lineinfun [expr [lindex $infun 1] - 1]
+                        if {[lsearch $funnames $funname] == -1} {
+                            set delbpcomm [concat $delbpcomm "delbpt(\"$funname\",$lineinfun);"]
+                        }
+                    }
+                }
+            }
+            if {$outp != "no_output"} {
+                ScilabEval " $delbpcomm"
+            }
+        } else {
+            # <TODO> .sce case
+        }
+        return $delbpcomm
+    }
+}
+
+proc removeallactive_bp {} {
+    global listoftextarea
+    foreach textarea $listoftextarea {
+        $textarea tag remove activebreakpoint 0.0 end
+    }
+}
+
+proc reshape_bp {} {
+    set textareacur [gettextareacur]
+    set tagranges [$textareacur tag ranges breakpoint]
+    foreach {tstart tstop} $tagranges {
+        $textareacur tag remove breakpoint $tstart $tstop
+        $textareacur tag add breakpoint "$tstart linestart" "$tstart lineend"
+    }
+}
index a7888f2..f359e35 100644 (file)
@@ -1,6 +1,6 @@
 proc configurefoo_bp {} {
     global pad conf lang
-    global listboxinput listboxinputval listboxscrolly spin buttonAdd
+    global listboxinput listboxinputval listboxscrolly spin buttonAddc
     global funnames funvars funvarsvals funnameargs
     set conf $pad.conf
     catch {destroy $conf}
@@ -55,8 +55,8 @@ proc configurefoo_bp {} {
     } else {
         set bl "Ajouter/Modifier"
     }
-    set buttonAdd $conf.f.f2.f2l.buttonAdd
-    button $buttonAdd -text $bl -width 20 -underline 0
+    set buttonAddc $conf.f.f2.f2l.buttonAdd
+    button $buttonAddc -text $bl -width 20 -underline 0
     if {$lang == "eng"} {
         set bl "Remove"
     } else {
@@ -64,11 +64,11 @@ proc configurefoo_bp {} {
     }
     set buttonRemove $conf.f.f2.f2l.buttonRemove
     button $buttonRemove -text $bl -width 20 -underline 0
-    pack $conf.f.f2.f2l.label $buttonAdd $buttonRemove -pady 4
+    pack $conf.f.f2.f2l.label $buttonAddc $buttonRemove -pady 4
     frame $conf.f.f2.f2r
     set listboxinput $conf.f.f2.f2r.listboxinput
     set listboxinputval $conf.f.f2.f2r.listboxinputval
-    $buttonAdd configure -command {if {[$spin get] != ""} {Addarg_bp $conf $listboxinput $listboxinputval}}
+    $buttonAddc configure -command {if {[$spin get] != ""} {Addarg_bp $conf $buttonAddc $listboxinput $listboxinputval}}
     $buttonRemove configure -command "Removearg_bp $listboxinput $listboxinputval"
     set listboxscrolly $conf.f.f2.f2r.yscroll
     scrollbar $listboxscrolly -command "scrollyboth_bp $listboxinput $listboxinputval"
@@ -107,8 +107,8 @@ proc configurefoo_bp {} {
 
     pack $conf.f
 #    bind $conf <Return> "OKconf_bp $conf"
-    bind $conf <Return> {if {[$spin get] != ""} {Addarg_bp $conf $listboxinput $listboxinputval}}
-    bind $listboxinput <Double-Button-1> {if {[$spin get] != ""} {Addarg_bp $conf $listboxinput $listboxinputval}}
+    bind $conf <Return> {if {[$spin get] != ""} {Addarg_bp $conf $buttonAddc $listboxinput $listboxinputval}}
+    bind $listboxinput <Double-Button-1> {if {[$spin get] != ""} {Addarg_bp $conf $buttonAddc $listboxinput $listboxinputval}}
 #    bind $conf <Escape> "Cancelconf_bp $conf"
     bind $conf <Escape> "OKconf_bp $conf"
     bind $conf <BackSpace> "Removearg_bp $listboxinput $listboxinputval"
@@ -120,7 +120,7 @@ proc configurefoo_bp {} {
     bind $conf <Down> {scrollarrows_bp $listboxinput down}
     bind $conf <MouseWheel> {if {%D<0} {scrollarrows_bp $listboxinput down}\
                                        {scrollarrows_bp $listboxinput up}}
-    focus $buttonAdd
+    focus $buttonAddc
     grab $conf
     if {$funnames == ""} {Obtainall_bp}
     if {$funnames == ""} {OKconf_bp $conf}
@@ -264,9 +264,14 @@ proc OKconf_bp {w} {
             }
             set strargs [string range $strargs 1 end]
             set funnameargs "$funname\($strargs\)"
+            setdbstate "ReadyForDebug"
+        } else {
+            set funnameargs ""  
+            setdbstate "NoDebug"
         }
-    } else {
+    } else {       # .sce case
         set funnameargs ""
+#        setdbstate "ReadyForDebug"
     }
     destroy $w
 }
@@ -296,6 +301,9 @@ proc checkarglist {funname} {
                 set orderOK "true"
                 set i 0
                 foreach var $funvars($funname) {
+                    if {[lindex $listvars $i] == "varargin"} {
+                        break
+                    }
                     if {$var != [lindex $listvars $i]} {
                         set orderOK "false"
                         break
@@ -311,7 +319,7 @@ proc checkarglist {funname} {
             set mes "Function name or input arguments do not match definition\
                      of the function $funname in the file!\n\nCheck function\
                      name and arguments (names, order) in the configuration dialog.\
-                     \nArguments order can be changed using drap and drop with\
+                     \nArguments order can be changed using drag and drop with\
                      right mouse button in the arguments listbox."
             set tit "Error in selected function name or arguments"
         } else {
@@ -374,6 +382,10 @@ proc Obtainall_bp {} {
             set listvars [string range $funline [expr $oppar+1] [expr $clpar-1]]
             set listvars [string map {, " "} $listvars]
             foreach var $listvars {
+                if {$var == "varargin"} {
+                    set listvars [lreplace $listvars [lsearch $listvars "varargin"] end]
+                    break
+                }
                 $listboxinput insert end $var
                 set funvarsvals($funname,$var) ""
                 $listboxinputval insert end $funvarsvals($funname,$var)
index ab64a80..929b513 100644 (file)
@@ -20,47 +20,51 @@ proc checkscilabbusy {{mb "message"}} {
 }
 
 proc execfile_bp {} {
-    global funnameargs funsinbuffer
+    global funnameargs listoftextarea funsinbuffer waitmessage
     if {[checkscilabbusy] == "OK"} {
+        showinfo $waitmessage
         set removecomm [removescilab_bp "no_output"]
-        set textareacur [gettextareacur]
-        set tagranges [$textareacur tag ranges breakpoint]
         set setbpcomm ""
-        set firstbp "true"
-#        set nlins -1
- #       set nlins -2
-        foreach {tstart tstop} $tagranges {
-            set infun [whichfun [$textareacur index $tstart]]
-            if {$infun !={} } {
-                set funname [lindex $infun 0]
-                set lineinfun [expr [lindex $infun 1] - 1]
-                set setbpcomm [concat $setbpcomm "setbpt(\"$funname\",$lineinfun);"]
-                if {$firstbp == "true"} {
-                    set firstbp "false"
-                    $textareacur tag remove activebreakpoint 1.0 end
-                    $textareacur tag add activebreakpoint "$tstart linestart" "$tstart lineend"
-                    $textareacur mark set insert "$tstart linestart"
-                    $textareacur see "$tstart linestart"
+        foreach textarea $listoftextarea {
+            set tagranges [$textarea tag ranges breakpoint]
+    #        set nlins -1
+     #       set nlins -2
+            foreach {tstart tstop} $tagranges {
+                set infun [whichfun [$textarea index $tstart] $textarea]
+                if {$infun !={} } {
+                    set funname [lindex $infun 0]
+                    set lineinfun [expr [lindex $infun 1] - 1]
+                    set setbpcomm [concat $setbpcomm "setbpt(\"$funname\",$lineinfun);"]
+               } else {
+                    # <TODO> .sce case: I thought about:
+                    # - inserting pause before each bp, or
+                    # - inserting mode(6) plus mode(0) before each bp
+                    # but none is satisfactory. Using mode() will fail in loops,
+                    # and pause is very limited (no way to add a new bp during debug,
+                    # or to remove all bp to finish execution ignoring them)
+    #                incr nlins 1
+     #               incr nlins 2
+    #                $textarea insert "$tstart +$nlins l linestart" "pause\n"
+     #               $textarea insert "$tstart +$nlins l linestart" "mode(6)\nmode(0)\n"
                 }
-           } else {
-                # <TODO> .sce case: I thought about:
-                # - inserting pause before each bp, or
-                # - inserting mode(6) plus mode(0) before each bp
-                # but none is satisfactory. Using mode() will fail in loops,
-                # and pause is very limited (no way to add a new bp during debug,
-                # or to remove all bp to finish execution ignoring them)
-#                incr nlins 1
- #               incr nlins 2
-#                $textareacur insert "$tstart +$nlins l linestart" "pause\n"
- #               $textareacur insert "$tstart +$nlins l linestart" "mode(6)\nmode(0)\n"
             }
         }
         if {$funnameargs != ""} {
-            execfile
+            execfile "current"
+            set funname [string range $funnameargs 0 [expr [string first "(" $funnameargs] - 1]]
+            foreach textarea $listoftextarea {
+                if {[info exists funsinbuffer($textarea)]} {
+                    if {[lsearch $funsinbuffer($textarea) $funname] != -1 && \
+                         $textarea != [gettextareacur]} {
+                        execfile $textarea
+                    }
+                }
+            }
 # Leading spaces here to avoid possible loss of first characters
 # However this does not work for long lines created by execfile (i.e.
 # lines that take a long time to display or execute in Scilab window)
             if {$setbpcomm != ""} {
+                setdbstate "DebugInProgress"
                 set commnvars [createsetinscishellcomm]
                 set watchsetcomm [lindex $commnvars 0]
                 if {$watchsetcomm != ""} {
@@ -69,7 +73,11 @@ proc execfile_bp {} {
                 while {[checkscilabbusy "nomessage"] == "busy"} {}
                 ScilabEval "     $setbpcomm; $funnameargs,$removecomm"
                 set filename [creategetfromshellcomm]
-                ScilabEval "     exec(\"$filename\");"
+                if {$filename != "emptyfile"} {
+                    ScilabEval "     exec(\"$filename\");"
+                }
+                while {[checkscilabbusy "nomessage"] == "busy"} {}
+                updateactivebreakpoint
             } else {
                 ScilabEval "     $funnameargs"
             }
@@ -77,31 +85,12 @@ proc execfile_bp {} {
             # <TODO> .sce case
 ##            execfile
         }
-    }
-}
-
-proc removescilab_bp {outp} {
-    global funnames
-    if {[checkscilabbusy] == "OK"} {
-        set textareacur [gettextareacur]
-        set tagranges [$textareacur tag ranges breakpoint]
-        set setbpcomm ""
-        if {$funnames != ""} {
-            foreach fun $funnames {
-                set setbpcomm [concat $setbpcomm "delbpt(\"$fun\");"]
-            }
-            if {$outp != "no_output"} {
-                ScilabEval " $setbpcomm"
-            }
-        } else {
-            # <TODO> .sce case
-        }
-        return $setbpcomm
+#        showinfo " "
     }
 }
 
 proc stepbystep_bp {} {
-# <TODO>
+# <TODO> step by step support
 # I have no satisfactory solution for the time being.
 # The heart of the matter with step by step execution is that
 # once the execution is stopped there is no way of knowing what is the next
@@ -113,33 +102,14 @@ proc stepbystep_bp {} {
 # Scilab interpreter, therefore the best way would probably be to add a new
 # Scilab function that would return the line number of the next instruction to
 # be executed. This should no be such a tricky thing to do drawing inspiration
-# e.g. from setbpt. Then I would have to hack a way of returning a result to
-# tcl from a ScilabEval. 
-# Note: There is a similar issue with active bp tag in conditional structures.
-# Currently the "next active bp" is the next one in the file
-# but this becomes wrong if the bp is in a for, while, if or case
+# e.g. from setbpt. 
     tk_messageBox -message "Sorry, step execution not yet implemented!"
 }
 
 proc resume_bp {} {
-# <TODO> correct wrong active bp tag when bp is in conditional structure
-# Solution to this is similar to what is explained in proc stepbystep_bp 
-    global funnameargs
+    global funnameargs waitmessage
     if {[checkscilabbusy] == "OK"} {
-        set textareacur [gettextareacur]
-        set actbprange [$textareacur tag ranges activebreakpoint]
-        if {$actbprange != {} } {
-            set actstart [lindex $actbprange 0]
-            set actstop [lindex $actbprange 1]
-            $textareacur tag remove activebreakpoint $actstart $actstop
-            set nextbprange [$textareacur tag nextrange breakpoint $actstop]
-            if {$nextbprange != {} } {
-                set newipos [lindex $nextbprange 0]
-                $textareacur tag add activebreakpoint $newipos [lindex $nextbprange 1]
-                $textareacur mark set insert $newipos
-                $textareacur see $newipos
-            }
-        }
+        showinfo $waitmessage
         if {$funnameargs != ""} {
             set commnvars [createsetinscishellcomm]
             set watchsetcomm [lindex $commnvars 0]
@@ -147,36 +117,49 @@ proc resume_bp {} {
                 ScilabEval "     $watchsetcomm"
                 set returnwithvars [lindex $commnvars 1]
                 while {[checkscilabbusy "nomessage"] == "busy"} {}
-    # <TODO> : [..]=resume(..) is bugged! -> replaced by a simple resume with no argument
-    # but then the changes in the watch window are obviously not reflected in the calling
-    # workspace in Scilab
-    #            ScilabEval "     $returnwithvars"
-                ScilabEval "     resume"
+    # [..]=resume(..) was bugged (see bug 818)
+    # The changes made by the user in the watch window were not reflected in the calling
+    # workspace in Scilab. The correction is part of CVS from 18/06/04 or later, and
+    # it will be included in Scilab 3.0
+                ScilabEval "     $returnwithvars"
             } else {
                 while {[checkscilabbusy "nomessage"] == "busy"} {}
                 ScilabEval "     resume"
             }
             set filename [creategetfromshellcomm]
-            ScilabEval "     exec(\"$filename\");"
+            if {$filename != "emptyfile"} {
+                ScilabEval "     exec(\"$filename\");"
+            }
+            while {[checkscilabbusy "nomessage"] == "busy"} {}
+            updateactivebreakpoint
+            while {[checkscilabbusy "nomessage"] == "busy"} {}
+            checkendofdebug_bp
         } else {
             # <TODO> .sce case
             # Sending \n is if mode(6) mode(0) is used. If pause, there is no
             # need to distinguish between .sci and .sce (resume is sent for both)
  #           ScilabEval " "
         }
+#        showinfo " "
     }
 }
 
 proc goonwo_bp {} {
-    global funnameargs
+    global funnameargs waitmessage
     if {[checkscilabbusy] == "OK"} {
+        showinfo $waitmessage
         if {$funnameargs != ""} {
             [gettextareacur] tag remove activebreakpoint 1.0 end
             removescilab_bp "with_output"
-            ScilabEval " resume"
+            ScilabEval "     resume"
+            while {[checkscilabbusy "nomessage"] == "busy"} {}
             set filename [creategetfromshellcomm]
-            ScilabEval "     exec(\"$filename\");"
+            if {$filename != "emptyfile"} {
+                ScilabEval "     exec(\"$filename\");"
+            }
         }
+        setdbstate "ReadyForDebug"
+#        showinfo " "
     }
 }
 
@@ -187,14 +170,20 @@ proc dispcallstack_bp {} {
 }
 
 proc canceldebug_bp {} {
-    global funnameargs
+    global funnameargs waitmessage
     if {[checkscilabbusy] == "OK"} {
+        showinfo $waitmessage
         if {$funnameargs != ""} {
             [gettextareacur] tag remove activebreakpoint 1.0 end
             removescilab_bp "with_output"
-            ScilabEval " abort"
+            ScilabEval "     abort"
+            while {[checkscilabbusy "nomessage"] == "busy"} {}
             set filename [creategetfromshellcomm]
-            ScilabEval "     exec(\"$filename\");"
+            if {$filename != "emptyfile"} {
+                ScilabEval "     exec(\"$filename\");"
+            }
         }
+        setdbstate "NoDebug"
+#        showinfo " "
     }
 }
diff --git a/scilab/tcl/scipadsources/db_states.tcl b/scilab/tcl/scipadsources/db_states.tcl
new file mode 100644 (file)
index 0000000..6b9e8e1
--- /dev/null
@@ -0,0 +1,169 @@
+####################################################################
+#          Basic state machine for the Scipad debugger             #
+####################################################################
+#
+# -->-|
+#     |
+# ---------
+# |NoDebug|---->---- insertremove_bp  |
+# ---------          removeall_bp     |
+# |   \    \         showwatch_bp     |
+# |    \    \        dispcallstack_bp
+# |     \    \----<---------|
+# |      \
+# |       \ configurefoo_bp(OK) ---------------
+# |        \-------->----------|ReadyForDebug|-->-- insertremove_bp  |
+# |                            ---------------      removeall_bp     |
+# |                             /   / \             configurefoo_bp  |
+# |canceldebug_bp   <enddebug> /   /   \            showwatch_bp     |
+# |                |goonwo_bp /   /     \           dispcallstack_bp
+# |                          /   /       \-------<--------|
+# |               |---->----/   /
+# |   -----------------        /execfile_bp
+# |-<-|DebugInProgress|---<---/
+#     -----------------
+#        \     \
+#         \     \
+#          \     \-->-- insertremove_bp  |
+#           \           removeall_bp     |
+#            \          resume_bp        |
+#             \         showwatch_bp     |
+#              \        dispcallstack_bp
+#               \----<--------|
+####################################################################
+
+proc setdbstate {state} {
+    global debugstate
+    if {$state == "NoDebug"} {
+        removeallactive_bp
+    }
+    if {$state == "ReadyForDebug"} {
+        if {$debugstate == "NoDebug"} {
+            getdebuggersciancillaries_bp
+        }
+        removeallactive_bp
+    }
+    # Before this point, $state is the new debug state, and $debugstate is the old one
+    set debugstate $state
+    setdbmenuentriesstates_bp
+    setdbstatevisualhint_hp
+}
+
+proc getdbstate {} {
+    global debugstate
+    return $debugstate
+}
+
+proc setdbmenuentriesstates_bp {} {
+    global pad debugstate
+    set dm $pad.filemenu.debug
+
+    if {$debugstate == "NoDebug"} {
+        $dm entryconfigure 1 -state normal
+        bind $pad <F9> {insertremove_bp}
+        $dm entryconfigure 2 -state normal
+        bind $pad <Control-F9> {removeall_bp}
+        $dm entryconfigure 4 -state normal
+        bind $pad <F10> {configurefoo_bp}
+        $dm entryconfigure 6 -state disabled
+        bind $pad <Control-F11> {}
+        $dm entryconfigure 7 -state disabled
+        bind $pad <F11> {}
+#        bind $pad <Shift-F11> {insertremovedebug_bp}
+        $dm entryconfigure 8 -state disabled
+        bind $pad <F12> {}
+        $dm entryconfigure 9 -state disabled
+        bind $pad <Shift-F12> {}
+        $dm entryconfigure 11 -state normal
+        bind $pad <Control-F12> {showwatch_bp}
+        $dm entryconfigure 12 -state normal
+        $dm entryconfigure 14 -state disabled
+
+    } elseif {$debugstate == "ReadyForDebug"} {
+        $dm entryconfigure 1 -state normal
+        bind $pad <F9> {insertremove_bp}
+        $dm entryconfigure 2 -state normal
+        bind $pad <Control-F9> {removeall_bp}
+        $dm entryconfigure 4 -state normal
+        bind $pad <F10> {configurefoo_bp}
+        $dm entryconfigure 6 -state normal
+        bind $pad <Control-F11> {execfile_bp}
+        $dm entryconfigure 7 -state disabled
+        bind $pad <F11> {}
+#        bind $pad <Shift-F11> {insertremovedebug_bp}
+        $dm entryconfigure 8 -state disabled
+        bind $pad <F12> {}
+        $dm entryconfigure 9 -state disabled
+        bind $pad <Shift-F12> {}
+        $dm entryconfigure 11 -state normal
+        bind $pad <Control-F12> {showwatch_bp}
+        $dm entryconfigure 12 -state normal
+        $dm entryconfigure 14 -state disabled
+
+    } elseif {$debugstate == "DebugInProgress"} {
+        $dm entryconfigure 1 -state normal
+        bind $pad <F9> {insertremove_bp}
+        $dm entryconfigure 2 -state normal
+        bind $pad <Control-F9> {removeall_bp}
+        $dm entryconfigure 4 -state disabled
+        bind $pad <F10> {}
+        $dm entryconfigure 6 -state disabled
+        bind $pad <Control-F11> {}
+        $dm entryconfigure 7 -state normal
+        bind $pad <F11> {resume_bp}
+#        bind $pad <Shift-F11> {insertremovedebug_bp}
+        $dm entryconfigure 8 -state disabled
+#        bind $pad <F12> {stepbystep_bp}
+        bind $pad <F12> {}
+        $dm entryconfigure 9 -state normal
+        bind $pad <Shift-F12> {goonwo_bp}
+        $dm entryconfigure 11 -state normal
+        bind $pad <Control-F12> {showwatch_bp}
+        $dm entryconfigure 12 -state normal
+        $dm entryconfigure 14 -state normal
+
+    } else {
+        tk_messageBox -message "Unknown debugstate: please report"
+    }
+}
+
+proc getdebuggersciancillaries_bp {} {
+    global env
+    ScilabEval "     getf \"$env(SCIPATH)/tcl/scipadsources/FormatStringsForDebugWatch.sci\""
+}
+
+proc setdbstatevisualhint_hp {} {
+    global pad debugstate
+    global lang colormen
+    if {$debugstate == "NoDebug"} {
+        $pad.statusmes configure -background $colormen
+        if {$lang == "eng"} {
+#            showinfo "Currently no debug session"
+        } else {
+#            showinfo "Pas de session de débug en cours"
+        }
+    } elseif {$debugstate == "ReadyForDebug"} {
+        $pad.statusmes configure -background SpringGreen
+        if {$lang == "eng"} {
+            showinfo "Ready to start debug"
+        } else {
+            showinfo "Prêt pour le débug"
+        }
+    } elseif {$debugstate == "DebugInProgress"} {
+        $pad.statusmes configure -background tomato3
+        if {$lang == "eng"} {
+            showinfo "Debug in progress"
+        } else {
+            showinfo "Débug en cours"
+        }
+    }
+}
+
+proc checkendofdebug_bp {} {
+    set comm1 "\[db_le,db_me\]=where();"
+    set comm2 "if db_le==\[\],"
+    set comm3 "TK_EvalStr(\"scipad eval {setdbstate \"\"ReadyForDebug\"\" }\");"
+    set comm4 "end;"
+    set fullcomm [concat $comm1 $comm2 $comm3 $comm4]
+    ScilabEval "     $fullcomm"
+}
index fc664a3..4783afc 100644 (file)
@@ -1,7 +1,7 @@
 proc showwatch_bp {} {
     global pad watch lang env
-    global lbvarname lbvarval scrolly buttonAdd
-    global watchvars watchvarsvals
+    global lbvarname lbvarval scrolly
+    global watchvars watchvarsvals buttonAddw
     global firsttimeinshowwatch watchgeom
     set watch $pad.watch
     catch {destroy $watch}
@@ -28,8 +28,8 @@ proc showwatch_bp {} {
     } else {
         set bl "Ajouter/Modifier"
     }
-    set buttonAdd $watch.f.f2.f2l.buttonAdd
-    button $buttonAdd -text $bl -width 20 -underline 0
+    set buttonAddw $watch.f.f2.f2l.buttonAdd
+    button $buttonAddw -text $bl -width 20 -underline 0
     if {$lang == "eng"} {
         set bl "Remove"
     } else {
@@ -37,12 +37,12 @@ proc showwatch_bp {} {
     }
     set buttonRemove $watch.f.f2.f2l.buttonRemove
     button $buttonRemove -text $bl -width 20 -underline 0
-    pack $watch.f.f2.f2l.label $buttonAdd $buttonRemove -pady 4
+    pack $watch.f.f2.f2l.label $buttonAddw $buttonRemove -pady 4
     frame $watch.f.f2.f2r
     set lbvarname $watch.f.f2.f2r.lbvarname
     set lbvarval $watch.f.f2.f2r.lbvarval
-    $buttonAdd configure -command {Addarg_bp $watch $lbvarname $lbvarval; \
-                                   closewatch_bp $watch nodestroy}
+    $buttonAddw configure -command {Addarg_bp $watch $buttonAddw $lbvarname $lbvarval; \
+                                    closewatch_bp $watch nodestroy}
     $buttonRemove configure -command {Removearg_bp $lbvarname $lbvarval; \
                                       closewatch_bp $watch nodestroy}
     set scrolly $watch.f.f2.f2r.yscroll
@@ -78,11 +78,11 @@ proc showwatch_bp {} {
     pack $watch.f.f9 -pady 4
 
     pack $watch.f
-    bind $watch <Return> {Addarg_bp $watch $lbvarname $lbvarval; \
+    bind $watch <Return> {Addarg_bp $watch $buttonAddw $lbvarname $lbvarval; \
                           closewatch_bp $watch nodestroy}
-    bind $lbvarname <Double-Button-1> {Addarg_bp $watch $lbvarname $lbvarval; \
+    bind $lbvarname <Double-Button-1> {Addarg_bp $watch $buttonAddw $lbvarname $lbvarval; \
                                        closewatch_bp $watch nodestroy}
-    bind $watch <Escape> {set watchgeom [string trimleft [eval {wm geometry $watch}] 1234567890x];
+    bind $watch <Escape> {set watchgeom [string trimleft [eval {wm geometry $watch}] 1234567890x=]; \
                           closewatch_bp $watch}
     bind $watch <BackSpace> {Removearg_bp $lbvarname $lbvarval; \
                              closewatch_bp $watch nodestroy}
@@ -95,11 +95,11 @@ proc showwatch_bp {} {
     bind $watch <Down> {scrollarrows_bp $lbvarname down}
     bind $watch <MouseWheel> {if {%D<0} {scrollarrows_bp $lbvarname down}\
                                        {scrollarrows_bp $lbvarname up}}
-    bind $watch <Enter> {set watchgeom [string trimleft [eval {wm geometry $watch}] 1234567890x]}
+    bind $watch <Enter> {set watchgeom [string trimleft [eval {wm geometry $watch}] 1234567890x=]}
+    bind $watch <FocusOut> {set watchgeom [string trimleft [eval {wm geometry $watch}] 1234567890x=]}
     if { $firsttimeinshowwatch == "true" } { 
-        focus $buttonAdd
-        set watchgeom [string trimleft [eval {wm geometry $watch}] 1234567890x]
-        ScilabEval "getf \"$env(SCIPATH)/tcl/scipadsources/FormatStringsForDebugWatch.sci\""
+        focus $buttonAddw
+        set watchgeom [string trimleft [eval {wm geometry $watch}] 1234567890x=]
         set firsttimeinshowwatch "false"
     }
 }
@@ -124,7 +124,6 @@ proc creategetfromshellcomm {} {
 #    set fullcomm ""
 #    foreach var $watchvars {
 #         set comm1 "if exists(\"$var\"),"
-##         set comm2 "TK_EvalStr(\"scipad eval {set watchvarsvals($var) \"\"\"+string($var)+\"\"\"}\");"
 #         set comm2 "TK_EvalStr(\"scipad eval {set watchvarsvals($var) \"\"\"+FormatStringsForDebugWatch($var)+\"\"\"}\");"
 #         set comm3 "else"
 #         set comm4 "TK_EvalStr(\"scipad eval {set watchvarsvals($var) \"\"$unklabel\"\"}\");"
@@ -141,18 +140,19 @@ proc creategetfromshellcomm {} {
     set filename [file join "$tmpdir" "getwatchcomm.sce"]
     set tempfile [open $filename w+]
     foreach var $watchvars {
-         set comm1 "if exists(\"$var\"),"
-#         set comm2 "TK_EvalStr(\"scipad eval {set watchvarsvals($var) \"\"\"+string($var)+\"\"\"}\");"
-         set comm2 "TK_EvalStr(\"scipad eval {set watchvarsvals($var) \"\"\"+FormatStringsForDebugWatch($var)+\"\"\"}\");"
-         set comm3 "else"
-         set comm4 "TK_EvalStr(\"scipad eval {set watchvarsvals($var) \"\"$unklabel\"\"}\");"
-         set comm5 "end;"
-         set fullcomm [concat $comm1 $comm2 $comm3 $comm4 $comm5]
-         puts $tempfile $fullcomm
+        set comm1 "if exists(\"$var\"),"
+        set comm2 "TK_EvalStr(\"scipad eval {set watchvarsvals($var) \"\"\"+FormatStringsForDebugWatch($var)+\"\"\"}\");"
+        set comm3 "else"
+        set comm4 "TK_EvalStr(\"scipad eval {set watchvarsvals($var) \"\"$unklabel\"\"}\");"
+        set comm5 "end;"
+        set fullcomm [concat $comm1 $comm2 $comm3 $comm4 $comm5]
+        puts $tempfile $fullcomm
     }
     if {$fullcomm != ""} {
-         set fullcomm "TK_EvalStr(\"scipad eval {showwatch_bp}\");"
-         puts $tempfile $fullcomm
+        set fullcomm "TK_EvalStr(\"scipad eval {showwatch_bp}\");"
+        puts $tempfile $fullcomm
+    } else {
+       set filename "emptyfile"
     }
     close $tempfile
     return $filename
@@ -177,7 +177,7 @@ proc createsetinscishellcomm {} {
             set retcomm "$retcomm,$var"
         }
         set retcomm [string range $retcomm 1 end]
-        set retcomm "\[$retcomm\]=resume($retcomm)"
+        set retcomm "\[$retcomm\]=resume($retcomm);"
     }
     return [list $fullcomm $retcomm]
 }
index 00dd8f6..685ca2b 100644 (file)
@@ -11,8 +11,6 @@
 # Highest level:
 # --------------
 #   funnameargs: Full command sent to Scilab (function name with arguments)
-#                Generated by proc OKconf_bp
-#                Used by execfile_bp
 #
 # One level down: ($conf and $watch levels)
 # ---------------
 #
 #######################################################################
 
-set sourcedir [file join "$env(SCIPATH)" "tcl" "scipadsources"]
-source [file join $sourcedir db_tagsmanagement.tcl]
-source [file join $sourcedir db_debugsession.tcl]
-source [file join $sourcedir db_configureexec.tcl]
-source [file join $sourcedir db_watch.tcl]
-source [file join $sourcedir db_argsmanagement.tcl]
+set sourced [file join "$env(SCIPATH)" "tcl" "scipadsources"]
+source [file join $sourced db_states.tcl]
+source [file join $sourced db_bptsmanagement.tcl]
+source [file join $sourced db_actbptmanagement.tcl]
+source [file join $sourced db_debugsession.tcl]
+source [file join $sourced db_configureexec.tcl]
+source [file join $sourced db_watch.tcl]
+source [file join $sourced db_argsmanagement.tcl]
 
 #######################################################################
 ##################### End of breakpoint stuff #########################
index 970198e..baaf0b6 100644 (file)
@@ -1,5 +1,5 @@
 set winTitle "SciPad"
-set version "Version 3.0"
+set version "Version 3.1"
 set wordWrap none
 ##ES: default options which can be overridden
 if { ![info exists BGCOLOR] } {set BGCOLOR "snow1"}
@@ -36,3 +36,8 @@ array set watchvarsvals {}
 set firsttimeinshowwatch "true"
 # FV, 17/06/04, better do it in scipad.sci
 #ScilabEval "     TK_EvalStr(\"scipad eval {set tmpdir \"+TMPDIR+\"}\");"
+if {$lang=="eng"} {
+    set waitmessage "Please wait..."
+} else {
+    set waitmessage "Veuillez patienter..."
+}
\ No newline at end of file
index bc73238..f52a340 100644 (file)
@@ -71,13 +71,14 @@ set taille [expr [font measure $textFont " "] *3]
 ## Francois Vogel, 21/04/04: changed insertofftime to 500, and added 
 ##  insertontime 500
 ## FV 13/05/04: added test with tk_version on ES request
+## FV 07/07/04: changed test to adapt blinking to the platform rather to the tk version
 text $pad.textarea -relief sunken -bd 2 -xscrollcommand "$pad.xscroll set" \
        -yscrollcommand "$pad.yscroll set" -wrap $wordWrap -width 1 -height 1 \
         -fg $FGCOLOR -bg $BGCOLOR  -setgrid 1 -font $textFont -tabs $taille \
         -insertwidth 3 -insertborderwidth 2 -insertbackground $CURCOLOR \
         -selectbackground $SELCOLOR -exportselection 1
 set textareacur $pad.textarea  
-if {[expr $tk_version] >= 8.4} {
+if {$tcl_platform(platform) != "unix"} {
     $textareacur configure -insertofftime 500 -insertontime 500
 } else {
     $textareacur configure -insertofftime 0
@@ -101,7 +102,7 @@ label $pad.statusind -relief groove -state disabled -background $colormen \
 # added by Matthieu PHILIPPE 07/12/2001
 # this addes an entry widget to display information !
 label $pad.statusmes -relief groove -state disabled -background $colormen \
-    -foreground blue -width 30
+    -width 30
 # FV 21/05/04, added a second statusind to display the line number in functions
 label $pad.statusind2 -relief groove -state disabled -background $colormen \
     -width 24
@@ -115,7 +116,6 @@ wm minsize $pad 1 1
 #tk_messageBox -message $WMGEOMETRY;
 wm geometry $pad $WMGEOMETRY
 
-
 #the following comes from undoredo.tcl v2.5
 ###################################################################
 #set zed_dir [file dirname [info script]] 
index cda3d1d..d47af58 100644 (file)
@@ -263,70 +263,70 @@ if {$lang == "eng"} {
 }
 
 #debug menu
-#menu $pad.filemenu.debug -tearoff 1 -font $menuFont
-#if {$lang == "eng"} {
-#    $pad.filemenu add cascade -label "Debug" -underline 0 \
-#      -menu $pad.filemenu.debug
-#    $pad.filemenu.debug add command -label "Insert/Remove breakpoint" \
-#      -underline 0 -command "insertremove_bp" -accelerator F9
-#    $pad.filemenu.debug add command -label "Remove all breakpoints" \
-#      -underline 7 -command "removeall_bp" -accelerator Ctrl+F9
-#    $pad.filemenu.debug add separator
-#    $pad.filemenu.debug add command -label "Configure execution" \
-#      -underline 0 -command "configurefoo_bp" -accelerator F10
-#    $pad.filemenu.debug add separator
-#    $pad.filemenu.debug add command -label "Start execution with breakpoints" \
-#      -underline 0 -command "execfile_bp" -accelerator Ctrl+F11
-#    $pad.filemenu.debug add command -label "Go on up to next breakpoint" \
-#      -underline 12 -command "resume_bp" -accelerator F11
+menu $pad.filemenu.debug -tearoff 1 -font $menuFont
+if {$lang == "eng"} {
+    $pad.filemenu add cascade -label "Debug" -underline 0 \
+       -menu $pad.filemenu.debug
+    $pad.filemenu.debug add command -label "Insert/Remove breakpoint" \
+      -underline 0 -command "insertremove_bp" -accelerator F9
+    $pad.filemenu.debug add command -label "Remove all breakpoints" \
+      -underline 7 -command "removeall_bp" -accelerator Ctrl+F9
+    $pad.filemenu.debug add separator
+    $pad.filemenu.debug add command -label "Configure execution" \
+      -underline 0 -command "configurefoo_bp" -accelerator F10
+    $pad.filemenu.debug add separator
+    $pad.filemenu.debug add command -label "Start execution with breakpoints" \
+      -underline 0 -command "execfile_bp" -accelerator Ctrl+F11
+    $pad.filemenu.debug add command -label "Go on up to next breakpoint" \
+      -underline 12 -command "resume_bp" -accelerator F11
 #    $pad.filemenu.debug add command -label "Insert/Remove breakpoint during debug" \
 #      -underline 18 -command "insertremovedebug_bp" -accelerator Shift+F11
-#    $pad.filemenu.debug add command -label "Step by step" \
-#      -underline 0 -command "stepbystep_bp" -accelerator F12 -state disabled
-#    $pad.filemenu.debug add command -label "Go on ignoring any breakpoint" \
-#      -underline 1 -command "goonwo_bp" -accelerator Shift+F12
-#    $pad.filemenu.debug add command -label "Display call stack" \
-#      -underline 6 -command "dispcallstack_bp"
-#    $pad.filemenu.debug add separator
-#    $pad.filemenu.debug add command -label "Show watch" \
-#      -underline 5 -command "showwatch_bp" -accelerator Ctrl+F12
-#    $pad.filemenu.debug add separator
-#    $pad.filemenu.debug add command -label "Cancel debug" \
-#      -underline 5 -command "canceldebug_bp"
+    $pad.filemenu.debug add command -label "Step by step" \
+      -underline 0 -command "stepbystep_bp" -accelerator F12 -state disabled
+    $pad.filemenu.debug add command -label "Go on ignoring any breakpoint" \
+      -underline 1 -command "goonwo_bp" -accelerator Shift+F12
+    $pad.filemenu.debug add separator
+    $pad.filemenu.debug add command -label "Show watch" \
+      -underline 5 -command "showwatch_bp" -accelerator Ctrl+F12
+    $pad.filemenu.debug add command -label "Display call stack" \
+      -underline 6 -command "dispcallstack_bp"
+    $pad.filemenu.debug add separator
+    $pad.filemenu.debug add command -label "Cancel debug" \
+      -underline 5 -command "canceldebug_bp"
 #    $pad.filemenu.debug add command -label "Remove all breakpoints in Scilab" \
 #      -underline 0 -command "removescilab_bp with_output"
-#} else {
-#    $pad.filemenu add cascade -label "Débug" -underline 0 \
-#      -menu $pad.filemenu.debug
-#    $pad.filemenu.debug add command -label "Insérer/Supprimer un point d'arrêt" \
-#      -underline 0 -command "insertremove_bp" -accelerator F9
-#    $pad.filemenu.debug add command -label "Supprimer tous les points d'arrêt" \
-#      -underline 10 -command "removeall_bp" -accelerator Ctrl+F9
-#    $pad.filemenu.debug add separator
-#    $pad.filemenu.debug add command -label "Configurer l'exécution" \
-#      -underline 3 -command "configurefoo_bp" -accelerator F10
-#    $pad.filemenu.debug add separator
-#    $pad.filemenu.debug add command -label "Démarrer l'exécution avec les points d'arrêt" \
-#      -underline 0 -command "execfile_bp" -accelerator Ctrl+F11
-#    $pad.filemenu.debug add command -label "Continuer jusqu'au prochain point d'arrêt" \
-#      -underline 10 -command "resume_bp" -accelerator F11
+} else {
+    $pad.filemenu add cascade -label "Débug" -underline 0 \
+       -menu $pad.filemenu.debug
+    $pad.filemenu.debug add command -label "Insérer/Supprimer un point d'arrêt" \
+      -underline 0 -command "insertremove_bp" -accelerator F9
+    $pad.filemenu.debug add command -label "Supprimer tous les points d'arrêt" \
+      -underline 10 -command "removeall_bp" -accelerator Ctrl+F9
+    $pad.filemenu.debug add separator
+    $pad.filemenu.debug add command -label "Configurer l'exécution" \
+      -underline 3 -command "configurefoo_bp" -accelerator F10
+    $pad.filemenu.debug add separator
+    $pad.filemenu.debug add command -label "Démarrer l'exécution avec les points d'arrêt" \
+      -underline 0 -command "execfile_bp" -accelerator Ctrl+F11
+    $pad.filemenu.debug add command -label "Continuer jusqu'au prochain point d'arrêt" \
+      -underline 10 -command "resume_bp" -accelerator F11
 #    $pad.filemenu.debug add command -label "Insérer/Supprimer un point d'arrêt pendant le debug" \
 #      -underline 40 -command "insertremovedebug_bp" -accelerator Shift+F11
-#    $pad.filemenu.debug add command -label "Pas à pas" \
-#      -underline 0 -command "stepbystep_bp" -accelerator F12 -state disabled
-#    $pad.filemenu.debug add command -label "Continuer sans aucun point d'arrêt" \
-#      -underline 0 -command "goonwo_bp" -accelerator Shift+F12
-#    $pad.filemenu.debug add command -label "Montrer la pile des appels" \
-#      -underline 0 -command "dispcallstack_bp"
-#    $pad.filemenu.debug add separator
-#    $pad.filemenu.debug add command -label "Fenêtre watch" \
-#      -underline 8 -command "showwatch_bp" -accelerator Ctrl+F12
-#    $pad.filemenu.debug add separator
-#    $pad.filemenu.debug add command -label "Annuler le débug" \
-#      -underline 0 -command "canceldebug_bp"
+    $pad.filemenu.debug add command -label "Pas à pas" \
+      -underline 0 -command "stepbystep_bp" -accelerator F12 -state disabled
+    $pad.filemenu.debug add command -label "Continuer sans aucun point d'arrêt" \
+      -underline 0 -command "goonwo_bp" -accelerator Shift+F12
+    $pad.filemenu.debug add separator
+    $pad.filemenu.debug add command -label "Fenêtre watch" \
+      -underline 8 -command "showwatch_bp" -accelerator Ctrl+F12
+    $pad.filemenu.debug add command -label "Montrer la pile des appels" \
+      -underline 0 -command "dispcallstack_bp"
+    $pad.filemenu.debug add separator
+    $pad.filemenu.debug add command -label "Annuler le débug" \
+      -underline 0 -command "canceldebug_bp"
 #    $pad.filemenu.debug add command -label "Supprimer tous les points d'arrêt dans Scilab" \
 #      -underline 0 -command "removescilab_bp with_output"
-#}
+}
 
 # help menu
 # FV 13/05/04, -accelerator Shift+F1 uncommented
@@ -356,3 +356,5 @@ $pad configure -menu $pad.filemenu
 ####
 ##ES: remember fontsize
 setfontscipad $FontSize
+
+setdbstate "NoDebug"
index 3f047f1..755b766 100644 (file)
@@ -3,7 +3,13 @@ proc showpopup2 {} {
     global pad
     set numx [winfo pointerx .]
     set numy [winfo pointery .]
-    tk_popup $pad.filemenu.edit $numx $numy
+# FV 07/07/04, if there is no debug session, popup menu is the edit menu
+# otherwise it is the debug menu
+    if {[getdbstate] == "NoDebug"} {
+        tk_popup $pad.filemenu.edit $numx $numy
+    } else {
+        tk_popup $pad.filemenu.debug $numx $numy
+    }
 }
 proc showpopup3 {} {
     global pad
index 10947d3..48570ef 100644 (file)
@@ -1,8 +1,12 @@
-proc execfile {} {
+proc execfile {{buf "current"}} {
     global listoffile sciprompt lang
 
-    set textarea [gettextareacur]
-
+# FV 07/07/04, added capability for exec'ing a buffer which is not the current one
+    if {$buf == "current"} {
+        set textarea [gettextareacur]
+    } else {
+        set textarea $buf
+    }
     set doexec 1
     if [ expr [string compare [getccount $textarea] 1] == 0 ] {
        if {$lang == "eng"} {
@@ -38,7 +42,7 @@ proc execfile {} {
            }
        } else {
            set f $listoffile("$textarea",filename)
-           ScilabEval "exec(\"$f\");"
+           ScilabEval "     exec(\"$f\");"
        }
     }
 }
@@ -105,8 +109,12 @@ proc execselection {} {
             regsub -all -line "\"" $comm "\"\"" dispcomm
             regsub -all -line "'" $dispcomm "''" dispcomm1
             unset dispcomm
-            ScilabEval "disp(\"$dispcomm1\")" 
-           ScilabEval $comm
+# Changed by the Scilab Team, 26/06/04
+#            if {"$tcl_platform(platform)" == "unix"} {    }
+    #                          ScilabEval "disp(\"$dispcomm1\")" # {  }
+# Changed for mprintf and with \n on ES request
+            ScilabEval "mprintf(\"%s\\n\",\"$dispcomm1\")"
+                 ScilabEval $comm
           }
         }
      }
index dc1bb04..dd207e3 100644 (file)
@@ -111,7 +111,7 @@ proc setfontscipad {FontSize} {
     $pad.filemenu.wind configure -font $menuFont
     $pad.filemenu.options configure -font $menuFont
     $pad.filemenu.exec configure -font $menuFont
-    #$pad.filemenu.debug configure -font $menuFont
+    $pad.filemenu.debug configure -font $menuFont
     $pad.filemenu.help configure -font $menuFont
     foreach textarea $listoftextarea {$textarea configure -font $textFont}
     $pad.statusind configure -font $menuFont
index b40681b..da51909 100644 (file)
@@ -111,7 +111,7 @@ proc whichfun {indexin {buf "current"}} {
 #        tk_messageBox -message \
 #         "Etant à la ligne $ypos, la fonction $funname débute à $precfun, et il y a $contlines lignes multiples, i.e. nous sommes à la ligne $lineinfun de $funname"
 #      }
-        return [list $funname $lineinfun $funline $precfun] 
+        return [list $funname $lineinfun $funline $precfun $contlines] 
     }
 }
 
index c756a64..e7c1379 100644 (file)
@@ -9,7 +9,7 @@ edge_number edit_curv edit_graph_menus edit_graph edit eigenmarkov elemlib ell1m
 fac3d factors faurre fchamp fcontour2d fcontour fec feedback feval ffilt fftshift fft fgrayplot figure fileinfo file filter findm findobj findx0BD find_freq find_path find findABCD findAC findBD findBDK findR fishing fit_dat fix floor flts foo formatman format fort for fourplan fplot2d fplot3d1 fplot3d fprintf fprintfMat frep2tf freq freson frexp frfit frmag fscanf fscanfMat fsfirlin fsolve fspecg fstabst fstair ftest ftuneq fullrfk fullrf full fun2string funcprot function funptr fusee
 gainplot gamitg gammaln gamma gcare gcd gcf genfac3d genlib genmarkov gen_net geom3d geomean getblocklabel getcolor getcurblock getcwd getdate getd getenv getfield getfont getf getio getlinestyle getmark getpid getscicosvars getsymbol getvalue getversion get_function_path get gfare gfrancis girth givens glever glist global glue graduate grand graph_2_mat graph_center graph_complement graph_diameter graph_power graph_simp graph_sum graph_union graycolormap grayplot graypolarplot grep group gr_menu gschur gsort gspec gstacksize gtild g_margin
 h2norm halt hamilton hankelsv hank harmean havewindow help_skeleton help hermit hess hex2dec hilb hinf hist3d histplot home horner host hotcolormap householder hrmt htrianr hypermat h_cl h_inf_st h_inf h_norm
-iconvert icon_edit ieee if iirgroup iirlp iir ilib_build ilib_compile ilib_for_link ilib_gen_gateway ilib_gen_loader ilib_gen_Make imag impl imrep2ss imult im_inv inistate input insertion int2d int3d int8 intc intdec integrate interpln interp intersci intersect intg intl intlib intppty intsplin inttrap inttype int invr invsyslin inv_coeff inv iqr isdef isdir isequal iserror isglobal isinf isnan isoview isreal is_connex
+iconvert icon_edit ieee if iirgroup iirlp iir ilib_build ilib_compile ilib_for_link ilib_gen_gateway ilib_gen_loader ilib_gen_Make imag impl imrep2ss imult im_inv inistate input insertion int16 int2d int32 int3d int8 intc intdec integrate interpln interp intersci intersect intg intl intlib intppty intsplin inttrap inttype int invr invsyslin inv_coeff inv iqr isdef isdir isequal iserror isglobal isinf isnan isoview isreal is_connex
 jmat justify
 kalm karmarkar kernel keyboard knapsack kpure krac2 kron kroneck
 labostat language lasterror lattn lattp lcf lcmdiag lcm ldivf ldiv leastsq left legends length leqr levin lev lex_sort lft lgfft lib lin2mu lincos lindquist lines line_graph linfn linf link linmeq linpro linsolve linspace lin listfiles list lmisolver lmitool loadmatfile loadplots loadwave load_graph load locate log10 log1p log2 logm logspace log lotest lqe lqg2stan lqg_ltr lqg lqr lsq lsslist lstcat lstsize ltitr ludel lufact luget lusolve lu lyap
@@ -21,7 +21,7 @@ qassign qr quapro quart quaskro quit
 randpencil rand range rankqr rank rational rat rcond rdivf read4b readb readc_ readmps read realtime real recur reglin regress remezb remez repfreq replot residu resume return riccati riccsl ricc ric_desc rlist roblib roots rotate round routh_t rowcompr rowcomp rowinout rowregul rowshuff rpem rref rtitr rubberbox
 s2flib salesman savewave save_graph save scaling scanf schur sci2exp sci2for sci2map sciargs scicosim scicos_block scicos_cpr scicos_diagram scicos_graphics scicos_link scicos_main scicos_menus scicos_model scicos_pal scicos_params scicos_sim scicos_state scicos scifunc_block scilink scipad sd2sci secto3d select semidef sensi setbpt setdiff seteventhandler setfield setmenu setscicosvars set sfact sgrid shortest_path showprofile show_arcs show_graph show_nodes show_startupinfo sident siglib signm sign simp_mode simp sincd sinc sinc sinhm sinh sinm sin size sm2des sm2ss smooth solve sorder sort sound soundlib sp2adj spaninter spanplus spantwo sparse spchol spcompack specfact spec speye spget splin split_edge spones sprand sprintf spzeros sqroot sqrtm sqrt squarewave square srfaur srkf ss2des ss2ss ss2tf sscanf sskf ssprint ssrand stabil stacksize standard_define standard_draw standard_input standard_origin standard_output statslib stdevf stdev steadycos str2code strange strcat strindex string stripblanks strong_connex strong_con_nodes strsubst st_deviation st_ility subf subgraph subplot successors sum supernode sva svd svplot sylm sylv sysconv sysdiag sysfact syslin syssize systems system systmat
 tabul tangent tanhm tanh tanm tan tdinit tdcslib testmatrix texprint tf2des tf2ss then thrownan timer time_id titlepage tk_getdir tk_getfile tk_savefile tkscilib tlist toeplitz tokenpos tokens trace translatepaths trans_closure trans tree2code trfmod trianfml tril trimmean trisolve triu trzeros typename typeof type
-uicontrol uimenu ui_observer ulink unglue union unique unix_g unix_s unix_w unix_x unix unobs unsetmenu user utillib
+uicontrol uimenu ui_observer uint16 uint32 uint8 ulink unglue union unique unix_g unix_s unix_w unix_x unix unobs unsetmenu user utillib
 varargin varargout variancef variance varn vectorfind
 warning wavread wavwrite wfir what whereami whereis where while whos who_user who wiener wigner window winsid with_gtk with_pvm with_texmacs with_tk writb write4b write
 xarcs xarc xarrows xaxis xbasc xbasimp xbasr xchange xclear xclea xclick xclip xdel xdesslib xend xfarcs xfarc xfpolys xfpoly xfrect xgetech xgetfile xgetmouse xget xgraduate xgrid xinfo xinit xlfont xload xmltohtml xname xnumb xpause xpolys xpoly xrects xrect xrpoly xs2fig xs2gif xs2ppm xs2ps xsave xsegs xselect xsetech xsetm xset xstringb xstringl xstring xtape xtitle x_choices x_choose x_dialog x_matrix x_mdialog x_message_modeless x_message