Whoops, I forgot the attachment too.

Ian.

-- 
Ian Beckwith - [EMAIL PROTECTED] - http://nessie.mcc.ac.uk/~ianb/
GPG fingerprint: AF6C C0F1 1E74 424B BCD5  4814 40EC C154 A8BA C1EA

#!/bin/sh
# $Id: surfraw.IN,v 1.6 2005/08/31 12:09:40 jmm-guest Exp $
# Surfraw -- Shell Users' Revolutionary Front Against the World wide web
#
# (c) 2000-2001 Julian Assange, placed into the public domain
# (c) 2000 Melbourne Institute for Advanced Study, placed into the public domain
#
# see the file COPYING for further copyright details
#

surfraw_version=2.1.5
surfraw_api_version=1.0
w3_argv0=`basename "$0"`

elvidir="/usr/lib/surfraw"

# defaults

w3_config_hook () {
    return 1
}

w3_config () {
        prefix=/usr
   def   SURFRAW_global_conf    /etc/surfraw.conf
   def   SURFRAW_conf           $HOME/.surfraw.conf

        test -r "$SURFRAW_global_conf" || err "couldn't source 
SURFRAW_global_conf ($SURFRAW_global_conf)"
    . "$SURFRAW_global_conf"
    w3_config_hook
    test -r "$SURFRAW_conf" && . "$SURFRAW_conf"
}

warn () {
    echo "$w3_argv0 WARNING: ""$@"
}

err () {
    echo "$w3_argv0 ERROR: ""$@"
    exit 1
}

yesno () {
    eval value=\$${1}
    case `echo "$value" | tr A-Z a-z` in
        yes|true|on|1)  return 0 ;;
        no|false|off|0) return 1 ;;
        *) err "\"$1\" is not set correctly. Should be (yes|on|1|no|off|0). Is 
\"$value\"" ;;
    esac
}

ifyes () {
    yesno "$@" && return 0
    return 1
}

ifno () {
    yesno "$@" && return 1
    return 0
}

ok () {
    yesno "$@"
}

null () {
    test -z "$@" && return 0
    return 1
}

def () {
    eval value=\$${1}
    test -z "$value" || return 0
    eval ${1}="$2"
    return 0
}

defyn () {
    eval value=\$${1}
    test -z "$value" && eval ${1}="$2"
    yesno "$1"
}

setopt  () {
    eval value=\$${1}
    eval ${1}="$2"
}

setoptyn () {
    eval value=\$${1}
    eval ${1}="$2"
    yesno "$1"
}

quote_ifs () {
         if [ -z "$1" ];   then return;  fi
     perl -e '$ifs=$ENV{IFS} || " "; $arg=shift;if($arg =~/[$ifs]/) { 
$arg="\"$arg\""; } print "$arg\n"; ' "$1"
}

bookmark_file_search () {
        search="$1"
        file="$2"
        if [ -f "$file" ]
        then
                awk -v search="$search" '$1 ~ search { print $2; }'  $file
        fi
}

bookmark_lookup () {
        search="$1"
        lookup=`bookmark_file_search "$search" ~/.surfraw.bookmarks`
        if [ -z "$lookup" ]
        then
                lookup=`bookmark_file_search "$search" /etc/surfraw.bookmarks`
        fi
        if [ -n "$lookup" ]
        then
                echo "$lookup"
        fi
}

w3_find_prog () {
  prog="$1"
  old_ifs="${IFS:-\" \"}"
  IFS=":"
  path_ifs="$PATH"
  for dir in $path_ifs; do
    test -z "$dir" && dir=.
    if test -e "$dir/$prog"; then
        echo "$dir/$prog"
        IFS="$old_ifs"
        return 0
    fi
  done
  IFS="$old_ifs"
  return 1
}

w3_url_escape () {
    echo "$@" | sed 's/%/%25/g;
                     s/+/%2B/g;
#                    s/ /+/g;
                     s/ /%20/g;
                         s/(/%28/g;
                         s/)/%29/g;
                     s/"/%22/g;
                     s/#/%23/g;
                     s/\$/%24/g;
                     s/&/%26/g;
                     s/,/%2C/g;
                     s/\./%2E/g;
                     sx/x%2Fx;
                     s/:/%3A/g;
                     s/;/%3B/g;
                     s/</%3C/g;
                     s/=/%3D/g;
                     s/>/%3E/g;
                     s/?/%3F/g;
                     s/@/%40/g;
                     s/\[/%5B/g;
                     s/\\/%74/g;
                     s/\]/%5D/g;
                     s/\^/%5E/g;
                     s/{/%7B/g;
                     s/|/%7C/g;
                     s/}/%7D/g;
                     s/~/%7E/g;
                   '"s/'/%60/g"
}

w3_url_of_arg () {
    if ok SURFRAW_quote_args; then
        args=\""$@"\"
    else
        args="$@"
    fi
    if ok SURFRAW_escape_url_args; then
        w3_url_escape "$args"
    else
            echo "$args"
    fi
}

true () {
    return 0
}

false () {
    return 1
}

w3_global_usage () {
# style: keep sorted
#-------------------------------------79 cols----------------------------------
    cat <<EOF
Global options:
  -browser=EXECUTABLE           Set browser
                                Default: $SURFRAW_browser
  -elvi                         List Surfraw mechanisms for conquering evil
  -escape-url-args=yes|no       Apply url escaping to arguments
                                Default: $SURFRAW_escape_url_args
                                Environment: SURFRAW_escape_url_args
  -g | -graphical               Get some windowed sin
                                Default: $SURFRAW_graphical
                                Environment: SURFRAW_graphical
  -help                         What you're reading now, dude
  -quiet=yes|no                 I can't enjoy it with you talking all the time
                                Default: $SURFRAW_quiet
                                Environment: SURFRAW_quiet
  -new[=yes|no]                 Start in a new window
                                Default: $SURFRAW_new_window
                                Environment: SURFRAW_new_window
  -t | -text                    Back to the yellow brick road
  -q | -quote                   Quote arguments with " characters
                                Default: $SURFRAW_quote_args
                                Environment: SURFRAW_quote_args
  -version                      Display Surfraw version ($surfraw_version)
Copyright:
  Copyright (c) 2003-2006 The Surfraw-Devel Team
                           <[EMAIL PROTECTED]>
  Copyright (c) 2000-2001 Julian Assange <[EMAIL PROTECTED]>
  Copyright (c) 2001 Australian Institute for Collaborative Research
  Copyright (c) 2000 Melbourne Institute for Advanced Study
EOF
}

w3_usage_hook () {
    echo "Usage: $w3_argv0 [options] [args...]"
    w3_global_usage
}

w3_bad_option () {
    err "bad option \"${opt}\". Try ${w3_argv0} -help for usage information"
}

w3_parse_option_hook () {
    return 1
}

w3_parse_option () {
    opt="$1"
    case "$opt" in
            -*=*) optarg=`echo "$opt" | sed 's/[-_a-zA-Z0-9]*=//'`
    esac
    w3_parse_option_hook "$opt" "$optarg" && return 0
    
    case "$opt" in
        -browser=*)         setopt   SURFRAW_browser            $optarg ;;
        -elvi)              cat "$SURFRAW_elvi_list"; exit 0            ;;
        -escape-url-args=*) setoptyn SURFRAW_escape_url_args    $optarg ;;
        -g | -graphical)    setoptyn SURFRAW_graphical          yes     ;;
        -help | --help)     do_help=1                                   ;;
        -quiet=*)           setoptyn SURFRAW_quiet              $optarg ;;
        -q | -quote)        setoptyn SURFRAW_quote_args         yes     ;;
        -new)               setoptyn SURFRAW_new_window         yes     ;;
        -new=*)             setoptyn SURFRAW_new_window         $optarg ;;
        -t | -text)         unset DISPLAY
                            setoptyn SURFRAW_graphical          no      ;;
        -version)           echo $surfraw_version; exit 0               ;;
        --)                 return 1                                    ;;
        -*)                 w3_bad_option "$opt"                        ;;
        *)                  return 1                                    ;;
    esac
    return 0
}

w3_parse_args () {
    w3_args=
    def SURFRAW_browser none
    def SURFRAW_browser_args none
    defyn SURFRAW_quote_ifs yes
    do_help=0
    mode=unknown
    for arg in "$@"; do
            w3_parse_option "$arg"
        if [ $? -eq 1 ]
                then
                    if ok SURFRAW_quote_ifs
                        then
                            arg=`quote_ifs "$arg"`
                        fi
                    w3_args="$w3_args $arg"
                fi
    done
    if test $SURFRAW_browser = none; then
        if ok SURFRAW_graphical && test -n "$DISPLAY"; then
                SURFRAW_browser=$SURFRAW_graphical_browser
                SURFRAW_browser_args=$SURFRAW_graphical_browser_args
                mode=graphical
        else
                SURFRAW_browser=$SURFRAW_text_browser
                SURFRAW_browser_args=$SURFRAW_text_browser_args
                mode=text
        fi
    fi
    if ok do_help; then
        w3_usage_hook
        exit 0
    fi
}

w3_browse_url () {
   if ok SURFRAW_new_screen && test -n "$STY" && test $mode == text; then
        screen=yes
   else
        screen=no
   fi
    if ok screen; then
        if test $SURFRAW_browser_args = "none"; then
                $SURFRAW_screen $SURFRAW_browser "$@"
        else
                $SURFRAW_screen $SURFRAW_browser $SURFRAW_browser_args "$@"
        fi
    else
        if ok SURFRAW_graphical_remote && test $mode = graphical; then
                if ok SURFRAW_new_window; then 
                        newwin=", new-window"
                else
                        newwin=""
                fi
                if test $SURFRAW_browser_args = "none"; then
                        $SURFRAW_browser -remote "openURL($*$newwin)" 
2>/dev/null || $SURFRAW_browser "$@" &
                else
                        $SURFRAW_browser -remote "openURL($*$newwin)" 
2>/dev/null || $SURFRAW_browser $SURFRAW_browser_args "$@" &
                fi
        else
                if test $SURFRAW_browser_args = "none"; then
                                $SURFRAW_browser "$@"
                else
                        $SURFRAW_browser $SURFRAW_browser_args "$@"
                 fi
        fi
                
    fi
#    ifno SURFRAW_quiet && echo "Thank you for supporting the Shell Users' 
Revolutionary Front Rage Against the Web"
}

quote () {
        quoted=`echo "$1"|sed "s/'/'\\\\\''/g"`
        echo "'$quoted'"
}

surfraw_usage() {
        cat <<EOF
Usage: $w3_argv0 [-help] [-elvi] elvis [elvioptions] [search terms]
       $w3_argv0 [options] bookmark
    If you wish to run the elvi directly, run "surfraw-update-path" to append
        $elvidir to your \$PATH in your shell's config files.
    See surfraw-update-path(1) for details
Options:
   -elvi  List elvi
   -help  This help
sr is an alias for surfraw
EOF
        w3_global_usage
}

if [ "$w3_argv0" = "surfraw" -o "$w3_argv0" = "sr" ]
then
        w3_config
        opts=""
        elvi=""
        searchterms=""
        for arg in "$@"
        do
          # if it is an option
          if awk -v arg="$arg" 'BEGIN { if(arg ~ /^-/) { exit 0 } else { exit 1 
} } ' 
          then
                  # if option before elvi
                  if [ -z "$elvi" ]
                  then
                          case "$arg" in
                                  -help*) surfraw_usage;         exit 0 ;;
                                  -\?)    surfraw_usage;         exit 0 ;;
                                  -elvi*)  w3_parse_option -elvi; exit 0 ;;
                          esac
                  fi
                  if  [ -z "$opts" ]
                  then
                          opts="`quote "$arg"`"
                  else
                          opts="$opts `quote "$arg"`"
                  fi
          elif [ -z "$elvi" ]
          then
                  elvi="$arg"
          else
                  if [ -z "$searchterms" ]
                  then
                          searchterms="`quote "$arg"`"
                  else
                          searchterms="$searchterms `quote "$arg"`"
                  fi
          fi
        done
        if [ -z "$elvi" ]
        then
                surfraw_usage
                exit 0
        else
                if [ -x "$elvidir/$elvi" ]
                then
                        sh -c "$elvidir/$elvi $opts $searchterms"
                else
                        bookmark=`bookmark_lookup $elvi`
                        if [ -n "$bookmark" ]
                        then
                                w3_parse_args "$opts"
                                w3_browse_url "$bookmark"
                        else
                                echo "`basename $0`: $elvi: No elvis or 
bookmark with that name"
                                surfraw_usage
                                exit 1
                        fi
           fi
        fi
fi

Reply via email to