#!/usr/bin/tclsh8.3
###############################################################################
#
# Abfrageprozessor für Mr.Check (Fremdwörterlexikon)
#  Erik Buchmann, August '01
#

regsub {[ ]+} $argv {+} search

set header ""
set content ""

global header content

################################
# Funktionen
proc getServer {client_request server} {
       global header content

       regsub -all -lineanchor "^\[\t \n\]+" [string trim $client_request] "" client_request

       # Socket aufmachen und Daten holen
       if {[catch {set server_channel [socket $server 80]}]} {
               puts "Got Error: Server not found"
               exit
       }

       fconfigure $server_channel -translation crlf -blocking true
       puts $server_channel "$client_request\n"
       flush $server_channel

       #Header holen
       set line "foo"
       set header ""
       while {$line!="" } {
               set line [gets $server_channel]
               set header "$header\n$line"
       }

       # Daten holen
       fconfigure $server_channel -translation binary -blocking true
       set content [read $server_channel]

       close $server_channel
}

################################
# Anfrage nach Location aufbauen

set client_request "\
       GET /v2.0/Mrcheck.php?CID=MrcheckDGFW&SB=$search HTTP/1.0
       Connection: close
       User-Agent: lex.tcl
       Host: mr-check.xipolis.net
       Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*
       Accept-Language: en
       Accept-Charset: iso-8859-1,*,utf-8"

getServer $client_request "mr-check.xipolis.net"

######################
# Location extrahieren
regexp -lineanchor {(Location: http://)([^/]+)([^
]*)} $header nix nix server location

# Location umformen
regsub {Mrcheck.php.*$} $location "main.php" location

################################
# Anfrage nach Inhalt aufbauen

set client_request "\
       GET $location HTTP/1.0
       Connection: close
       User-Agent: lex.tcl
       Host: $server
       Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*
       Accept-Language: en
       Accept-Charset: iso-8859-1,*,utf-8"

getServer $client_request $server

#Anfang und Ende abschneiden
regsub {^.*?(\</select\>)} $content {} content
regsub {^.*?(\</table\>)} $content {} content
regsub {(\<img src=).*$} $content {} content

#alle HTML-Tags entfernen
regsub -all -nocase {\<.*?\>} $content {} content

#Umlaute
regsub -all {(&auml;|&#228;)} $content {ä} content
regsub -all {(&Auml;|&#196;)} $content {Ä} content
regsub -all {(&ouml;|&#246;)} $content {ö} content
regsub -all {(&Ouml;|&#214;)} $content {Ö} content
regsub -all {(&uuml;|&#252;)} $content {ü} content
regsub -all {(&Uuml;|&#220;)} $content {Ü} content
regsub -all {(&szlig;|&#223;)} $content {ß} content
regsub -all {&lt;} $content {<} content
regsub -all {&gt;} $content {>} content
regsub -all {(&laquo;|&#171;)} $content {«} content
regsub -all {(&raquo;|&#187;)} $content {»} content
regsub -all {(&oslash;|&#248;)} $content {ø} content
regsub -all {(&eacute;|&#233;|&#113;|&#x113;)} $content {é} content
regsub -all {(&aacute;|&#225;|&#224;)} $content {á} content
regsub -all {(&oacute;|&#243;)} $content {ó} content
regsub -all {(&yacute;|&#253;)} $content {ý} content

#Whitespace
regsub -all {[  ]+} $content { } content
regsub -all -lineanchor {^[ ]+} $content {} content

set clist [split $content "\n"]

puts "------------------------------------------------------------"

foreach x $clist {

       if {[string length [string trim $x]]>0} {
               if {[regexp {^(Quelle:)} $x]} {
                       puts " "
               } elseif {[regexp {^(Hilfe \| schlie.en)} $x ]} {
                       puts "keine weiteren Ergebnisse gefunden!"
               } else {
                       puts "$x"
               }
       }
}

puts "------------------------------------------------------------"