blob: 3784c0ec41c6bd02b7ab22072487f594baa61c0d [file] [log] [blame]
#!/bin/sh
# the next line restarts using tclsh \
exec tclsh "$0" "$@"
# This is an attempt to duplicate the dtcl parser in pure Tcl. It is
# not currently complete.
# $Id$
set buffer ""
proc dtcl_info { } {
puts "<table border=0 bgcolor=green><tr><td>\n
<table border=0 bgcolor=\"#000000\">\n
<tr><td align=center bgcolor=blue><font color=\"#ffffff\" size=+2>dtcl_info</font><br></td></tr>\n
<tr><td><font color=\"#ffffff\">Free cache size: XXX</font><br></td></tr>\n
<tr><td><font color=\"#ffffff\">PID: [pid]</font><br></td></tr>\n
</table>\n
</td></tr></table>\n"
}
proc buffered { x } {
}
proc headers { args } {
}
proc include { filename } {
set fl [ open $filename ]
fconfigure $fl -translation binary
puts -nonewline [ read $fl ]
close $fl
}
proc parse { filename } {
main $filename 0
}
proc hflush { } {
}
proc no_body { } {
}
proc hgetvars { } {
array set ENVS {x y}
array set VARS {a b}
}
proc var { command args } {
switch command {
get {
}
list {
}
exists {
}
names {
}
number {
}
}
}
proc buffer_add { x } {
puts -nonewline "$x"
}
proc hputs { x } {
puts -nonewline "$x"
}
proc accumulate { x } {
global buffer
append buffer $x
}
proc main { filename toplevel } {
global buffer
set fl [ open $filename ]
if { $toplevel != 1 } {
accumulate "namespace eval request \{\n"
accumulate "buffer_add \"\n"
} else {
accumulate "hputs \"\n"
}
set inside 0
while { 1 } {
if { [ eof $fl ] } { break }
set char [ read $fl 1 ]
if { $inside == 0 } {
if { $char == "<" } {
set char2 [ read $fl 1 ]
if { $char2 == "?" } {
set inside 1
accumulate "\"\n"
} else {
set char2 [ string map {\$ \\\$ \" \\\" [ \\\[ ] \\\] \\ \\\\} $char2 ]
accumulate "<$char2"
}
} else {
set char [ string map {\$ \\\$ \" \\\" [ \\\[ ] \\\] \\ \\\\} $char ]
accumulate "$char"
}
} else {
if { $char == "?" } {
set char2 [ read $fl 1 ]
if { $char2 == ">" } {
accumulate "\nhputs \"\n"
set inside 0
} else {
accumulate "+$char2"
}
} else {
accumulate "$char"
}
}
}
if { $inside == 0 } {
accumulate "\""
}
if { $toplevel != 1 } {
accumulate "\n\}\nnamespace delete request\n"
}
# puts "$buffer"
catch { eval "$buffer" } err
if { $err != "" } {
puts $err
puts "------------"
puts "$buffer"
}
}
main [ lindex $argv 0 ] 1