#!/bin/sh PROMPT="==" SHOW="show" cleanup () { rm -f $TMPFILE; } go () { printf "${1}\r\n" | nc $2 $3 } usage() { printf "usage: \n" printf " visit a resource:\n" printf " $0 \n" printf " init links:\n" printf " $0 -i \n" printf " show this help:\n" printf " $0 -h\n" printf "\n" printf "In a gopher page, just type:\n" printf " !./g %% LINE\n" printf "to visit the resource at LINE, or:\n" printf " !./d %% LINE\n" printf "to download the resource at LINE\n\n" exit 0 } trap cleanup INT QUIT HUP KILL ABRT TERM if [ $# -lt 1 ]; then usage fi if [ "$1" = "-h" ]; then usage; fi if [ "$1" = "-i" ]; then ln -s $0 g ln -s $0 d ln -s $0 v exit 0 fi script_name=$(basename $0) if [ "${script_name}" = "gophed" -o "${script_name}" = "v" ]; then sel=$(echo $1 | sed -r 's:/:+:g') TMPFILE=$(mktemp /tmp/gophed_$2_${sel}_$3.XXXXXXXXXXXXXXXXXXX) go "$1" "$2" "$3" > $TMPFILE cat $SHOW - | ed -p ${PROMPT} $TMPFILE fi if [ "${script_name}" = "g" ]; then LINE=$(awk "{if (NR == $2) print \$0;}" $1) RESOURCE=$(echo "$LINE" | cut -d ' ' -f 2) HOST=$(echo "$LINE" | cut -d ' ' -f 3) PORT=$(echo "$LINE" | awk -F ' ' '{ match($4,/[[:digit:]]+/); print substr($4,RSTART,RLENGTH) }') SEL=$(echo $RESOURCE | sed -r 's:/:+:g') TMPFILE=$(mktemp /tmp/gophed_${HOST}_${SEL}_${PORT}.XXXXXXXXXXXXXXXXXXX) go "$RESOURCE" "$HOST" "$PORT" > $TMPFILE cat $SHOW - | ed -p ${PROMPT} $TMPFILE fi if [ "${script_name}" = "d" ]; then LINE=$(awk "{if (NR == $2) print \$0;}" $1) RESOURCE=$(echo "$LINE" | cut -d ' ' -f 2) HOST=$(echo "$LINE" | cut -d ' ' -f 3) PORT=$(echo "$LINE" | awk -F ' ' '{ match($4,/[[:digit:]]+/); print substr($4,RSTART,RLENGTH) }') DIR_RESOURCE=$(dirname $RESOURCE) echo "Download $RESOURCE in ${HOST}${RESOURCE}" mkdir -p "$HOST/$DIR_RESOURCE" go "$RESOURCE" "$HOST" "$PORT" > "${HOST}${RESOURCE}" fi cleanup