proc CGI_Parameter {{args {}}} { #
PARAMETER: Liste der CGI-Parameter # IST_LISTE: Array mit
Parametern als Elementen:
# 0 -
Parameter ist keine Liste
# 1 -
Parameter ist eine Liste global PARAMETER IST_LISTE
env if [info exists env(REQUEST_METHOD)]
{ if
{$env(REQUEST_METHOD)!="POST"}
{ #
GET... set
query $env(QUERY_STRING) } else
{ #
POST...
set query [read stdin
$env(CONTENT_LENGTH)]
} }
proc wandle {str}
{ # Ersetzungen durch den Client
rückgängig machen: #
Leerzeichen wurden durch +
ersetzt: regsub -all {\+} $str
" " str # In str
Hexzahlen rückwandeln #
Zeilenumbrüche wurden durch %0D%0A
ersetzt: regsub -all
{%0[dD]%0[aA]} $str "\n"
str # Sonderfall & wegen
Sonderbedeutung in regsub: regsub
-all "%26" $str \\&
str # sonstige Hexzahlen
rückwandeln: while {[regexp
{%([0-9a-fA-F][0-9a-fA-F])} $str dummy hexzahl]}
{ regsub
"%$hexzahl" $str [format "%c" "0x$hexzahl"]
str
} return
$str }
# Extrahieren der einzelnen
Variablen: while {[regexp {([^&]+)=([^&]*)} $query
alles vname vwert]} { set vname
[wandle $vname] set vwert [wandle
$vwert] global
$vname if [info exists $vname]
{ if
$IST_LISTE($vname)
{
lappend $vname
$vwert }
else
{
set IST_LISTE($vname)
1
set $vname [list $vname
$vwert]
} } else
{ set
$vname
$vwert set
IST_LISTE($vname)
0 lappend
PARAMETER $vname
} # extrahiertes Paar
entfernen: regsub
{([^&]+)=([^&]*)} $query "" query
} # Übergebene Variablen erzeugen, falls nicht
enthalten: foreach el $args
{ if {![info exists $el]}
{ global
$el set
IST_LISTE($el)
0 set $el
""
} } }
proc HTTP_Header {{args {}}} { #
Schreibt "Content-Type: text/html" und "" and
stdout. # optionale Parameter werden als HTTP-Header
ausgegeben. puts "Content-Type:
text/html\n\n" foreach el $args { puts
$el } puts
"" }