##
## functions
##

##  HTTPHEAD      - http server respone
##  search        - search in local swish++ index
##  message       - xmessage
##  ask           - xmessage

## gui_browser - helper for start_browser ## start_browser - open URL in either w3m or firefox ## umlaut4url - helper for google/wiki ## google - open google (-l de, -ie ISO-8859-1, -ie UTF-8 ## latin2english - use lysy2.archives.nd.edu/ to translate

##  wiki          - open http://(de|en).wikipedia.org/wiki/...
##  lx            - ls and sort by size
##  u             - english <=> deutsch (exakt)
##  U             - english <=> deutsch (partial/ignorecase)
##  dict          - simple dictd client
##  volume        - get/set audio volume
##  colorsel      - open finders color-select (lupe to grab)
##  ocr           - Tesseract Open Source OCR Engine

function HTTPHEAD
{

local host=${1:-"wais.org"}
local port=${2:-"80"}
#echo nc $host $port
echo -e "HEAD / HTTP/1.1\nHost:$host\nConnection: Close\n" | nc -w 10 $host $port }

function search_find_db
{

cd ~/lib/swish && ls swish++.conf.* | sed 's/^swish++.conf.//' | tr '\n' ' ' }
# search and edit:
function searche
{

${EDITOR:-vi} $( search "$@" | sed -n '/^[1-9]/s/^[0-9]* \([^ ]*\) .*/\1/p' ) }
function search
{

local index
local args

while [ "X$1" != "X" ] ; do

        case "X$1" in
            X-m) shift; index="$index $1"; shift;;
            X-n) shift; args="--max-results $1"; shift;;
            X--*) break;; # e.g. --near=5
            X-*) echo "usage: search [ -m $(search_find_db | sed 's/ /|/g') ] term ..">&2; return;;
            *) break;;
        esac

done

index=${index:-$(search_find_db)}
(

      cd ~/lib/swish
      for i in $index ; do
        echo -n "$i "
        /usr/local/bin/search $args -c swish++.conf.$i $* # || break
      done

)
}

# Message-ID: <43215DF3.2090301@wanadoo.fr> # unix-porting@lists.apple.com
# Fri, 09 Sep 2005 12:03:31 +0200
# Use "System Events" instead of "Finder" function message
{

local msg=${*:-"gute nacht!"}
msg=$(echo $msg | iconv -f ISO-8859-15 -t MAC) osascript -e "tell app \"finder\"
activate
display dialog \"$msg\" buttons \"ok\" default button 1 end" >/dev/null 2>&1 || true
}
function ask
{

local msg=${*:-"gute nacht!"}

osascript -e "tell app \"finder\"
activate
display dialog \"$msg\" buttons { \"ja\", \"nein\" } default button 1 end" | grep -q ':ja'
}
function ask2
{

local y="gute"
local n="nacht"
[ "X$1" != "X" ] && { y="$1" ; shift ; n="$*" ; }

osascript -e "tell app \"finder\"
activate
choose from list { \"$y\", \"$n\" } end"
}

function gui_browser
{

local url
local cmd=openURL
while [ "X$1" != "X" ] ; do

        case "X$1" in
             X-e) cmd="get URL";;
             Xhttp:*|Xftp:*|Xfile:*|Xhttps:*|X/*) url="$1" ;;
             *) url="file://$PWD/$1" ;;
        esac
        shift

done
/usr/bin/osascript -e "tell app \"Firefox\" to $cmd \"$url\"" }
function start_browser
{

local browser=${TTYBROWSER:-w3m}
while [ "X$1" != "X" ] ; do

        case "X$1" in
            X-n) browser=echo; shift;;
            X-x) browser=gui_browser; shift;;
            *) break;;
        esac

done
$browser "$@"
}

# see function google and function wiki # TODO perl?
# A LOT OF FORKS
function umlaut4url
{

local what="$@"
# Ä Ö Ü ä ö ü ß
what=`echo $what | sed 's/[äÄ]/%C3%A4/g'` what=`echo $what | sed 's/[öÖ]/%C3%B6/g'` what=`echo $what | sed 's/[üÜ]/%C3%BC/g'` what=`echo $what | sed 's/ß/%C3%9F/g'` what=`echo $what | sed 's/(/%28/g;s/)/%29/g'` echo $what
}

alias deja='google -u groups.google.com//groups' function google
{

local lang
local code
local what
local url
local browserargs

### [ "$DISPLAY" != "" ] && wie="galeon -n"

#http://www.google.de/search?hl=de&ie=ISO-8859-1&q=appft1+microsoft+linux+patent&btnG=Google-Suche&meta=

while [ "X$1" != "X" ] ; do

        case "X$1" in
            "X-l")  shift; lang=$1; shift;;
            "X-u")  shift; url=$1; shift;;
            "X-ie") shift; code=$1; shift;;
            "X-h")  echo "usage: google [-x] [-l de|en] [-n] word .."; return;;
            X-*) browserargs="$browserargs $1"; shift;;
            *) break;;
        esac

done

# "so wie so" => %22so_wie_so%22
what=`echo $* | sed 's/^ *//;s/ /+/g;s/"/%22/g'` what=`umlaut4url $what`

url="${url:-www.google.${lang:-com}/search}" url="http://${url}?${code:+ie=${code}&}q=$what"

start_browser $browserargs "$url"
}

function latin2english
{

[ $# -eq 1 ] && {

w3m -dump "http://lysy2.archives.nd.edu/cgi-bin/words.exe?$1"; } || {

echo "usage: latin2english latinword" >&2; }
}

# todo
# http://de.wikipedia.org/wiki/Spezial:Search/SoMeThInG function wiki
{

local lang=de
local url
local browserargs
while [ "X$1" != "X" ] ; do

        case "X$1" in
            "X-l")  shift; lang=$1; shift;;
            "X-h")  echo "usage: wiki [-x] [-l de|en] [-n] word .."; return;;
            X-*) browserargs="$browserargs $1"; shift;;
            *) break;;
        esac

done

what=`echo $* | sed 's/ /_/g'`
what=`umlaut4url $what`

# wikidate if no URL gien
if [ "X$what" = "X" ] ; then

url=http://en.wikipedia.org/wiki/`date +%B_%e | sed "s/ //"` else

url="http://${lang}.wikipedia.org/wiki/${what}" fi

start_browser $browserargs "$url"
}

# ls sorted by size
function lx ()
{
/bin/ls -l "$@" | sort -k5 -n
}

function u { LANG=de_DE.ISO8859-15 grep -w "$*" $HOME/Public/de-en; } function U { grep -i "$*" $HOME/Public/de-en; }

function dict
{

# see ~/Documents/rfc2229.txt
#
# dict://<user>;<auth>@<host>:<port>/d:<word>:<database>:<n> # dict://<user>;<auth>@<host>:<port>/m:<word>:<database>:<strat>:<n> #
# The "/d" syntax specifies the DEFINE command (section 3.2), whereas # the "/m" specifies the MATCH command (section 3.3). #
# for a list of dict servers:
# http://www.luetzschena-stahmeln.de/dictd/index.php

local pager=/bin/cat
/usr/bin/tty 0>&1 >/dev/null 2>&1 && pager=${PAGER:-/usr/bin/less}

(
# localhost mapped with VBoxManage to debian, see ~/Documents/install.txt for host in 192.168.2.2 dict.org; do

        echo -n "trying $host ..."
        /usr/bin/curl --connect-timeout 3 "dict://$host/d:'$1':\*" && echo

done
) 2>&1 | $pager
}

function volume
{

if [ "X" = "X$1" ]; then

osascript -e 'get volume settings' else

osascript -e "set volume output volume $1" fi
}

function colorsel
{

# colorsel: 63423 51643 22400 # use high-byte and convert to hex: F7C957 col=`osascript -e "tell app \"finder\"

         activate
         choose color
         end" | tr -d ','`

colhex=`echo $col | sed 's/^/obase=16 /' | tr ' ' '\n' | bc | cut -c 1,2 | tr -d '\n'` echo $col
echo $colhex
}

function ocr
{

# http://www.geocities.com/thierryguy/ocube.sh.html # convert in.x -density 150x150 -resize 200% -fill white -tint 50 -level 20%,80%,1.0 \ # -sigmoidal-contrast 30,50% -sharpen 0x2 -compress none -monochrome out.tiff case "$1" in

        *.tiff) /opt/local/bin/tesseract $1 ${1%.tiff};;
        *) echo -e "Usage: ocr file.tiff\n\tuse 'convert -monochrome in.tiff out.tiff for best quality";;

esac
}