Listing 2. Tcl Script for processing data

#!/usr/bin/tclsh
# TCL script to display all user-defined values
# from a form
proc urlDecode {text}
{
   # Replace `+' chars, then hexidecimals
   regsub -all {\+} $text { } text
   regsub -all {%([0-9a-hA-H][0-9a-hA-H])} \
      $text {[format %c 0x\1]} url
   # Send back the result 
   return [subst $url]
}

proc cgiParse {} {
   global cgi env 
   # Find out what type of request it was, and get
   # the data 
   if {[info exists env(QUERY_STRING)]} {
      set text $env(QUERY_STRING)
   } elseif {[info exists env(CONTENT_LENGTH)]} {
      set text [read stdin $env(CONTENT_LENGTH)]
   } else {
      gets stdin text
   } 
   # Decode the data 
   foreach {name value} [split $text &=] {
      set cgi([urlDecode $name]) \
         [urlDecode $value]
   }
}
# Print a header and run 
puts "Content-type: text/html \n\n"
cgiParse
foreach foo [array names cgi] {
   puts "Variable: $foo Value: $cgi($foo) <br>
}