[Jorge Moreno]
<
>
[JorgePIC%|% width=200 height=200]
<
>
<>
** contact **
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!)
[androwishIcon3%|% width=100 height=100]
** Great Tutorials **
* Learn X in Y minutes (Where X=Tcl) https://learnxinyminutes.com/docs/tcl/
* A Brief Introduction to Tcl/Tk ftp://ftp.oreilly.com/pub/convention/os/tutorial/tcltk.pdf
** My Books:**
%|Title|Author|%
&|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...**
* [LogParser]
* [LogParser goes COM]
* [playing BLT]
* [timeliner (minutes instead of years)]
* [multiple timers]
* [a form for Access Database]
* [Clif Flynt Articles]
* [LemonTree branch]
* [Tclodbc + BLT]
* [a perpetual calendar]
* [JeeMon]
* [Mavrig]
* [LemonTree Org Chart] Oct-9-2012
* [Playing PIC Simulation] Nov-11-2012
* [Web Scraping with htmlparse] Dec-4-2012
* [CGI script for directory listing, simple posts and templates] Dec-29-2012
* [Androwish: Icon]
* [colorized crc]
* [plink]
* [Interfacing PS2 Keyboard with Arduino and Androwish]
* [BLT data series in rows or columns]
* [Androwish Serial Port]
* [Script Catalog - KPV]
* [Uli Ender bitbang I2C with Arduino] 11/23/2019
----
** pages where I have made minor edits...**
* [toggle button] on Feb-2011
* [web2desktop] on 7/27/2011
* [Turtle Shell for Androwish] 3/21/2014
* [Ticker] 4/2/2014
* [True Random Numbers] 4/3/2014
----
** when programming with Tcl, I use:**
for XML parsing
* drive [LogParser] through COM and Tcl
web scrapping
* tool that helps: firefox add-on that shows tdom structure (DOM Inspector)
* tool that shows http protocol (HttpFox)
* [LemonTree branch]
diagrams
* http://www.graphviz.org/
* [Tcldot]
* [XML Graph to canvas]
* [Generating Syntax Diagrams Using Tk]
WebServer
* [Wibble]
* [tclHttpd]
Static content
* [MajaMaja]
driving other windows application
* [cwind]
Most used:
* [tclODBC]
* [BLT]
* [tablelist]
----
** Bookmarks:**
* [Windows wish console]
* [a little spreadsheet]
* [Using Tcl to write WWW client side applications within the WWW browser]
* Home Automation Portal Appliance with Tcl: http://hometoys.com/emagazine.php?url=/htinews/apr06/articles/appliance/part2.htm
* http://net.tutsplus.com/tutorials/other/http-headers-for-dummies/
----
* [Teach programming to children]
* [High-level wrapper for pdf4tcl]
* http://tcl.projectforum.com/young/22
* http://incrtcl.sourceforge.net/itcl/mmc/snaps.html
* [Quick photo rotation] which includes how to rotate a label...
----
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]
* [Simple Program Menu]
[Detlef Groth]
* [TemplateRecall]
* [dgDBBrowser]
[wdb]
* [MTE]
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 http://wfr.tcl.tk/1693 <
>
** Markup and text processing:**
* [Scan and modify text files]
* [EasyTextPrint] (includes awk)
* [Wiki format to HTML]
'xpg' - a text file browser (includes awk) http://wiki.tcl.tk/38443 awk and shell script <
>
2020-11-25 Domain Specific Language - https://medium.com/@jeffreybian/tcl-domain-specific-language-made-easy-820634556<
>
*** Web ***
%|Date|Page|tags|%
&|2017-12-20|[Editing the Tcl'ers Wiki using an editor of your choice]|TBD|&
&|2017-12-28|[w3m]|automate web browser with Expect|&
*** SQLite ***
%|Date|Page|tags|%
&|2017-12-20|[Get CPU Temperature Statistics]|sqlite|&
&|2017-12-28|[Paging with TkTreeCtrl + SQlite]|CREATE TABLE IF NOT EXISTS|&
&|2015-01-13|[Heronian triangles]|TBD|&
6/7/2018 Web HTML http
* [MkBugs]
* [My first wapp-lication]
* [Tcl does OCR online] 3/27/2019
*** Arduino ***
[Firmata]<
>
[Interfacing PS2 Keyboard with Arduino and Androwish]<
>
[JeeMon]<
>
[A scale with Arduino and AndroWish]<
>
<
>
*** BLT ***
[Filtering measurement values with a 1D Kalman filter]<
>
----
BLT-newbie - barchart: How to display value under mouse cursor<
>
http://computer-programming-forum.com/57-tcl/b286e0c308f1604e.htm<
>
----
BLT graph: Problem setting colors using RGB notation<
>
http://computer-programming-forum.com/57-tcl/790b8f5784d4984a.htm<
>
----
BLT vector creation: creation time grows as number of vectors created grows<
>
http://computer-programming-forum.com/57-tcl/326d86938e3c7375.htm<
>
*** Code Review:***
* [OpenSky API]
* [LogParser accessing the Windows event log]
* Androwish - Tcl interface to libmodbus, using Ffidl and TclOO
*** Assemblers:***
* Uli Ender's - See [17th European Tcl/Tk Users Meeting 2019]
* https://spivey.oriel.ox.ac.uk/corner/Nanocomp_clock (assembler in Tcl, C code for attiny85)
* [Qibec]
<
>
** My formatting guide**
*** Italics:***
''My quick reference''
''My quick reference''
*** Bold:***
'''My formatting guide'''
'''My formatting guide'''
*** Numbered List***
xxxd.xItem1
1. Item1
======tcl
puts "Tcl is great!"
======
puts "did I mention that Tcl is great?"
======
puts "Tcl/Tk"
======
Links:<
>
For [Formatting Rules] click [Formatting Rules%|%here%|%] or http://wiki.tcl.tk%|%here%|%
<
>
[graffiti]
----
** 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 ""
database connect db "DRIVER=$driver;DBQ=$dbfile"
foreach rec [db "select EmployeeID,LastName,FirstName FROM Employees;"] {
puts ""
foreach field $rec {
puts "$field | "
}
puts "
"
}
puts "
"
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.
----
** pscp **
''[JM] 7 Sep 2013'' - pscp from the http://www.chiark.greenend.org.uk/~sgtatham/putty/%|%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 jorge@192.168.1.82
.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 http://wfr.tcl.tk/273%|%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/resultat.tk
set outfile "C:/Users/jmoreno/Documents/code/gnuplot/resultat.tk"
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*]
update
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/resultat.tk
set outfile "C:/Users/jmoreno/Documents/code/gnuplot/resultat.tk"
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*]
#update
gnuplot .c
** Expect **
''[JM] 18 Feb 2014'' - The following example was good for me to try the basics<
>
[Remote input-output with Expect]
** XML Post HTTP **
''[JM] 26 Feb 2017'' - from:<
>
https://groups.google.com/forum/#!topic/comp.lang.tcl/B6afDJQg8LA
package require http
console show
set organism_name "nipah"
set xml "
B0905
org.pdb.query.simple.OrganismQuery
Organism Search : Organism Name=$organism_name
$organism_name
"
set url "http://www.rcsb.org/pdb/rest/search"
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
5.13
% package ifneeded tablelist 5.13
package provide tablelist 5.13;source -encoding utf-8 C:/Tcl/lib/teapot/package/tcl/teapot/tcl8/8.0/tablelist-5.13.tm
%
C:\Tcl\lib\teapot\package\tcl\lib\tablelist_common5.13
** TreeQL Examples **
+&
| 1
| [wiki-reaper]
| tbd
+&
| 2
| [Web Scraping with htmlparse]
| withatt type
+&
| 3
| https://github.com/jtcl-project/jtcl/blob/master/src/main/resources/tcl/pkg/tcllib/library/page/util_norm_peg.tcl
| 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 - -
#defaults
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
break
}
}
}
}
======
*** loteria - card creator ***
''[JM] 26 Nov 2020'' - based on [Maritime Signal Flags]<
>
for this to work, you will need the 54 images named lote'''nn'''.jpg
======
#####################################################################
# Creador de Cartas de Loteria
#
#
# Mostly based on:
# Marine Signal Flags & Flag System
#
# 2002-11-05 Keith Vetter
# 2005-06-10 HJG: Numeric Flags + some extra Chars (Answer...)
#####################################################################
package require Tk
package require Img
console show
for {set i 1} {$i < 55} {incr i} {
set ctr [format "%02d" $i]
lappend parms [list flower$i xColor lote$ctr.jpg]
}
# -------------
# create images from files
# -------------
set i 0
foreach item $parms \
{
foreach {name color file} $item break
lappend list [incr i]
set names($i) $name
set colors($i) $color
set files($i) $file
}
foreach i $list {
# tk_messageBox -message "$i $names($i) $files($i)"
image create photo $names($i) -file $files($i)
set image $names($i)
set ww [image width $image]
set hh [image height $image]
# create the mini image from the full image
foreach {type factor} {mini 3} \
{
set ww2 [expr {$ww / $factor}]
set hh2 [expr {$hh / $factor}]
image create photo ${type}$i -width $ww2 -height $hh2
${type}$i copy $image -subsample $factor
}
}
proc Flags {letter row col} {
if {$letter == ""} {
puts "$letter $row $col"
}
set xy [Shift $row $col 40 80]
puts $xy
.c create text $xy -text $letter -anchor c -tag lbl -font {Times 12 bold}
.c create image $xy -image mini$letter
}
# Shift - Shift coords over to a given row,col cell
proc Shift {row col args} {
set drow 100
set dcol 80
set x0 [expr {$col * $dcol}]
set y0 [expr {$row * $drow}]
set result {}
foreach {dx dy} $args {
lappend result [expr {$x0 + $dx}] [expr {$y0 + $dy}]
}
return $result
}
# Scales a unit figure into a given row,col cell
proc ScaleShift {row col xy} {
set drow 100
set dcol 80
set sx 50 ;# Scale factor in x
set sy 40
set x0 [expr {($col + .5) * $dcol}]
set y0 [expr {($row + .5) * $drow}]
set result {}
foreach {dx dy} $xy {
lappend result [expr {$x0 + $sx*($dx-.5)}] [expr {$y0 + $sy*($dy-.5)}]
}
return $result
}
# DoString -- shows a whole string as semaphore
proc DoString {str} {
global type
.c delete all
set alpha 1 ;# In alpha by default
set row [set col 0] ;# Initial position
set max_col [expr {[winfo width .c] / 80}] ;# Wrap column
set max_col 4
foreach letter [split $str ,] {
puts "calling Flags: $letter"
Flags $letter $row $col
foreach {row col} [NextCell $row $col $max_col] break
}
.c config -scrollregion [.c bbox all]
.c yview moveto 1
}
proc NextCell {row col max_col} {
if {[incr col] >= $max_col} {
return [list [incr row] 0]
}
return [list $row $col]
}
proc Tracer {args} {
DoString $::mytext
}
################################################################
# Put up our gui:
set type flags
canvas .c -highlightthickness 0 -bd 2 -relief raised -width 300 -height 400 \
-yscrollcommand {.sb set}
scrollbar .sb -orient vertical -command {.c yview}
entry .title -font {Times 18 bold} -relief raised
frame .f
label .lbl -text "Type text to see"
entry .e -textvariable mytext
pack .title -side top -fill x
pack .e .f -side bottom -fill x
# pack .sema .flag -in .f -side right
# pack .lbl -in .f -side left
pack .sb -side right -fill y
pack .c -side top -fill both -expand 1
bind .c <2> [bind Text <2>] ;# Enable dragging w/ button 2
bind .c [bind Text ]
bind .c Tracer
bind all {.c yview scroll [expr {-%D/120}] units}
update
trace variable mytext w Tracer
set mytext "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16"
.title insert end "Your name here..."
focus .e
.e icursor end
.e select range 0 end
======
<> Person