blob: 2bb9b7e8963fd83846dcc263963675ac79a67ff7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
#!/bin/sh
PROMPT='=='
SHOW='show'
cleanup () {
rm -f "$TMPFILE";
}
go () {
printf '%s\r\n' "$1" | nc "$2" "$3"
}
usage() {
printf '%s\n' \
'usage:' \
' visit a resource:' \
" $0 <path> <server> <port>" \
' init links:' \
" $0 -i" \
' show this help:' \
" $0 -h" \
'' \
'In a gopher page, just type:' \
" !./g %% LINE" \
'to visit the resource at LINE, or:' \
" !./d %% LINE" \
'to download the resource at LINE\n'
exit 0
}
trap cleanup INT QUIT HUP KILL ABRT TERM
[ "$#" -lt 1 ] || [ "$1" = -h ] && usage
if [ "$0" = gophed ] && [ "$1" = -i ]; then
ln -sf "$0" g
ln -sf "$0" d
ln -sf "$0" v
exit 0
fi
script_name="$(basename "$0")"
if [ "$script_name" = gophed ] || [ "$script_name" = v ]; then
sel="$(printf '%s' "$1" | sed -r 's:/:+:g')"
TMPFILE="$(mktemp "/tmp/gophed_${2}_${sel}_$3.XXXXXXXXXXXXXXXXXXX")"
go "$1" "$2" "$3" > "$TMPFILE"
cat "$SHOW" - | ed -p "$PROMPT" "$TMPFILE"
cleanup
exit 0
fi
if [ "$script_name" = g ] || [ "$script_name" = d ]; then
LINE="$(awk "{if (NR == '$2') print '$0';}" "$1")"
RESOURCE="$(printf '%s' "$LINE" | cut -d ' ' -f 2)"
HOST="$(printf '%s' "$LINE" | cut -d ' ' -f 3)"
PORT="$(printf '%s' "$LINE" | awk -F ' ' '{ match($4,/[[:digit:]]+/); print substr($4,RSTART,RLENGTH) }')"
if [ "$script_name" = g ]; then
SEL="$(printf '%s' "$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
DIR_RESOURCE="$(dirname "$RESOURCE")"
printf 'Download %s in %s\n' "$RESOURCE" "$HOST$RESOURCE"
mkdir -p "$HOST/$DIR_RESOURCE"
go "$RESOURCE" "$HOST" "$PORT" > "$HOST$RESOURCE"
fi
cleanup
exit 0
fi
printf '%s: command not found\n' "$scriptname"
cleanup
exit 1
|