Jorge Moreno


jorge raul moreno -at- hot mail -dot- com

I heard that every android has a wish: to be ticklish...
This Android never suffered Pteronophobia (the fear of being tickled by feathers!)

Great Tutorials

My Books:

Practical Programming in Tcl and Tk Brent Welch
Effective Tcl/Tk Programming Mark Harrison/Michael McLennan
Tcl/Tk for Real Programmers Clif Flynt
The Tcl Programming Language Ashok P Nadkarni

Effective Tcl/Tk Programming

Pages I started...

pages where I have made minor edits...

when programming with Tcl, I use:

for XML parsing

web scrapping

  • tool that helps: firefox add-on that shows tdom structure (DOM Inspector)
  • tool that shows http protocol (HttpFox)
  • LemonTree branch



Static content

driving other windows application

Most used:


2013-12-07 A few of your favorite things about editing scripts with Tkcon
2014-06-25 Hack-O-Matic
2014-08-09 filewait
2014-08-22 Quick Formatting ANSI Colour Escape Strings
2014-08-22 cgrep - Color your output with regular expressions!
2014-10-03 WikIndent input line by line
2015-03-13 Freecell for a cross platform alternative to SystemButtonFace color
2015-03-13 Invoking browsers to launch firefox under linux
2015-10-15 vgrep: a visual grep
2016-11-17 serial ports on Windows
Matthias Hoffmann

Detlef Groth


2017-03-17 minimalist wget
2017-07-05 getopt to parse out switches from the command line (argv) by name
2017-07-11 LiSA
SWIG exemples
Scan and modify text files
Easy Text Print (includes awk)
'xpg' - a text file browser (includes awk) awk and shell script


2017-12-20Editing the Tcl'ers Wiki using an editor of your choiceTBD
2017-12-28w3mautomate web browser with Expect


2017-12-20Get CPU Temperature Statisticssqlite
2017-12-28Paging with TkTreeCtrl + SQliteCREATE TABLE IF NOT EXISTS
2015-01-13Heronian trianglesTBD

6/7/2018 Web HTML http


Interfacing PS2 Keyboard with Arduino and Androwish
A scale with Arduino and AndroWish


Filtering measurement values with a 1D Kalman filter

BLT-newbie - barchart: How to display value under mouse cursor

BLT graph: Problem setting colors using RGB notation

BLT vector creation: creation time grows as number of vectors created grows

Code Review:


My formatting guide


 ''My quick reference''

My quick reference


 '''My formatting guide'''

My formatting guide

Numbered List

  1. Item1
puts "Tcl is great!"
 puts "did I mention that Tcl is great?"
puts "Tcl/Tk"

For Formatting Rules click here or here


tclODBC + tclhttpd

JM 22 Jul 2011 - I was just playing a little bit with tclhttpd by putting the following code on the file: \htdocs\cgi-bin\test.cgi

 package require tclodbc
 set driver "Microsoft Access Driver (*.mdb)"
 set dbfile "C:\\Program Files\\Microsoft Office\\office11\\samples\\Northwind.mdb"

 puts [html::h3 "getting info from Access through tclODBC..."]
 puts "<table border=1 cellpadding=4>"
 database connect db "DRIVER=$driver;DBQ=$dbfile"

 foreach rec [db "select EmployeeID,LastName,FirstName FROM Employees;"] {
   puts "<tr>"
   foreach field $rec {
     puts "<td>$field</td>"
     puts "</tr>"
 puts "</table>" 
 db disconnect

just after the following existing lines:

 puts [html::h1 "Hello, World!"]
 puts [html::h2 [clock format [clock seconds]]]

and I got a dynamic page that queries the database that comes as a sample with the Microsoft Access installation.

you can get there by means of the CGI link on the home page, then through the Sample form posted to test.cgi and finally hitting the "Submit Query" button.


JM 7 Sep 2013 - pscp from the putty family of tools, see also plink

  • The following script runs on a windows machine
  • Getting a file from an ubuntu machine
  • The file will be copied to c:\putty in this case
 console show
 proc action {} {
   cd c:/putty
   set f [open "|\"pscp.exe\" -l jorge -pw yourpwd [.from get]:[.path get] ."]
   puts done
 entry .from
 entry .path -width 50
 button .button -text get -command action

 .from insert 0 [email protected]
 .path insert 0 /home/jorge/sample.txt

 pack .from .path .button

gnuplot and the tkcanvas terminal type

JM 26 Oct 2013 - I dont know why, but I had to put some puts commands after the source command to make it work, if not, I was getting an error saying that the gnuplot commmand did not exist

 console show
 #set gpexe C:/gnuplot-4.0/bin/pgnuplot.exe
 set gpexe "C:/Program Files (x86)/gnuplot/bin/pgnuplot.exe"
 #set outfile C:/data/
 set outfile "C:/Users/jmoreno/Documents/code/gnuplot/"

 set gp [open "|\"$gpexe\"" r+]
 puts $gp "set term tk"
 puts $gp "set output '$outfile'"
 puts $gp "set noborder\nset zeroaxis"
 puts $gp "set xtics 1\nset ytics .5"
 puts $gp "plot \[-2:2\] atan(x)"
 close $gp

 pack [canvas .c]
 source $outfile
 puts $outfile
 puts [info commands gnu*]
 gnuplot .c

JM 7 Nov 2014 - Looks like the real fix is this (just waiting a little, to let pgnuplot.exe to completely close):

 console show
 #set gpexe C:/gnuplot-4.0/bin/pgnuplot.exe
 set gpexe "C:/Program Files (x86)/gnuplot/bin/pgnuplot.exe"
 #set outfile C:/data/
 set outfile "C:/Users/jmoreno/Documents/code/gnuplot/"

 set gp [open "|\"$gpexe\"" r+]
 puts $gp "set term tk"
 puts $gp "set output '$outfile'"
 puts $gp "set noborder\nset zeroaxis"
 puts $gp "set xtics 1\nset ytics .5"
 puts $gp "plot \[-2:2\] atan(x)"
 close $gp
 after 1000
 pack [canvas .c]
 source $outfile
 #puts "we are at: [pwd]"
 #puts $outfile
 #puts [info commands gnu*]
 gnuplot .c


JM 18 Feb 2014 - The following example was good for me to try the basics
Remote input-output with Expect


JM 26 Feb 2017 - from:!topic/comp.lang.tcl/B6afDJQg8LA

 package require http
 console show

 set organism_name "nipah"
 set xml "
 <?xml version=\"1.0\" encoding=\"UTF-8\"?>
 <description>Organism Search : Organism Name=$organism_name </description>
 set url ""

 set tok [::http::geturl $url -query $xml -type application/x-www-form-urlencoded]
 set rep [::http::data $tok]
 puts "[::http::status $tok]"
 puts $rep

 ::http::cleanup $tok 

Where is tablelist?

 % package require tablelist
 % package ifneeded tablelist 5.13
 package provide tablelist 5.13;source -encoding utf-8 C:/Tcl/lib/teapot/package/tcl/teapot/tcl8/8.0/


TreeQL Examples

1 wiki-reaper tbd
2 Web Scraping with htmlparse withatt type
3 over n

Other scripts that need some polishing

extract images from pdf

JM 20 Nov 2020 - This is mostly code from miniMu

package require mupdf
console show

set pdfFileName [tk_getOpenFile -filetypes {{Pdf .pdf}}]
set pdf [mupdf::open $pdfFileName]

set pageQty [$pdf npages]
for {set i 0} {$i < $pageQty} {incr i} {
        set page [$pdf getpage $i]   ;# 0 is the 1st page
        set ctr 0
        foreach imagen [$page images list] {
                puts $imagen
                set id [$page images extract -id [lindex $imagen 0] -as "img$i-[lindex $imagen 1]"]
                incr ctr

yet another grepGUI

JM 20 Nov 2020 - grepGUI based on RS's code from grep

console show
set W 30
set H 100
set X 0
set Y 0
console eval {
        set W 80
        set H 70
        set X 0
        set Y 0
        wm geometry . ${W}x$H+$X+$Y

label .mask_label  -text "Files:" -justify right
label .patt_label  -text "Regular expression:"

entry .files -textvariable filemask
button .btn -text grep! -command {
        console eval { .console delete 1.0 end }
        main refile.txt [.files get]
text .txt1 -height 10

grid .mask_label -row 0 -column 0 -sticky e 
grid .files -row 0 -column 1 -sticky w
grid .btn -row 0 -column 2
grid .patt_label -sticky w
grid .txt1 - -

set filemask    "*.log"
.txt1 insert end "^C\[XL\]\n"
.txt1 insert end "ERROR:\n"
.txt1 insert end "Test Case:\n"
.txt1 insert end "Other\n"

proc main {refile fileGlob} {

    puts [.txt1 get 1.0 end]
    set REset [split [string trim [.txt1 get 1.0 {end-1 char}]] \n]

        set files [eval glob -types f $fileGlob]
        foreach file $files {
            puts "============ $file"
            set fp [open $file]
            grep-f $REset $fp
            close $fp

proc grep-f {REset fp} {
    while {[gets $fp line] >= 0} {
        foreach RE $REset {
            if {[regexp $RE $line]} {
                puts $line