f91be7a8c6f27fa1a30be4086280f1fab2a0538b
[gofetch.git] / gopher.sh
1 #!/bin/sh
2
3 SERVER="$1"
4 SELECTOR="$2"
5 PORT="$3"
6 MODE="$4"
7
8 # Defaults:
9 [ "$PORT" = "" ] && PORT=70
10 if [ "$MODE" = "" ]; then
11 # "" or dir-like selector? -> 1 ; if not -> 0
12 echo "$SELECTOR" | grep "/$" >/dev/null && MODE=1 || MODE=0
13 [ "$SELECTOR" = "" ] && MODE=1
14 fi
15
16 if [ "$SERVER" = "" ]; then
17 echo "Syntax error: $0 [SERVER] ([SELECTOR]) ([PORT]) ([MODE])" >&2
18 exit 2
19 fi
20
21 # $0 [FILE]
22 cat_menu() {
23 i=0
24 cat "$1" | grep '^[i0-9]' | while read ln; do
25 ln="`echo "$ln" | cut -f1`"
26 if echo "$ln" | grep "^i" >/dev/null 2>&1; then
27 echo "$ln" | sed "s:^.: :g"
28 elif echo "$ln" | grep "^[0-9]" >/dev/null 2>&1; then
29 i=`expr $i + 1`
30 i=`printf %2.f $i`
31 field="`echo "$ln" | cut -c1`"
32 case "$field" in
33 0) typ='TXT';;
34 1) typ='DIR';;
35 7) typ='SRH';;
36 8) typ='TEL';;
37 *) typ='???';;
38 esac
39 echo "$ln" | sed "s:^.:$typ $i :g"
40 #else
41 # Bad line
42 fi
43 done
44 }
45
46 # $0 [FILE]
47 choices() {
48 i=0
49 cat "$1" | grep '^[0-9]' | while read choice; do
50 i=`expr $i + 1`
51 i=`printf %2.f $i`
52
53 echo "$i --> $choice"
54 done
55 }
56
57 # $0 [FILE] [INDEX] [FIELD]
58 # Fields:
59 # 1 = type/name
60 # 2 = selector
61 # 3 = server
62 # 4 = port
63 getsel() {
64 cat "$1" | grep '^[0-9]' | tail -n+"$2" | head -n 1 | cut -f"$3"
65 }
66
67 tmp="`mktemp gofetch.current_page.XXXXX`"
68 finish() {
69 rm -rf "$tmp"
70 }
71 trap finish EXIT
72
73 if [ $MODE = 1 ]; then
74 echo "$SELECTOR" | nc "$SERVER" "$PORT" | sed 's:\r::g' > "$tmp"
75 else
76 echo "$SELECTOR" | nc "$SERVER" "$PORT" > "$tmp"
77 fi
78
79 case "$MODE" in
80 0)
81 cat "$tmp" | less
82 ;;
83 1)
84 CHOICE=start
85 while [ "$CHOICE" != "" ]; do
86 cat_menu "$tmp" | less
87 read -p "[$SELECTOR]: " CHOICE
88 index="`expr 1 \* "$CHOICE" 2>/dev/null`"
89 if [ "$index" != "" ]; then
90 goto_server="`getsel "$tmp" $index 3`"
91 goto_sel="`getsel "$tmp" $index 2`"
92 goto_port="`getsel "$tmp" $index 4`"
93 goto_mode="`getsel "$tmp" $index 1 | cut -c1`"
94 sh "$0" "$goto_server" "$goto_sel" "$goto_port" "$goto_mode"
95 fi
96 done
97 ;;
98 7)
99 read -p "Query: " SEARCH
100 selQuery="$SELECTOR $SEARCH"
101
102 exec sh "$0" "$SERVER" "$selQuery" "$PORT" 1
103 ;;
104 8)
105 telnet -l "$SELECTOR" "$SERVER" "$PORT"
106 read DUMMY
107 ;;
108 9)
109 echo "<BINARY FILE>" | less
110 ;;
111 *)
112 echo "unknwon selector mode: <$MODE>" | less
113 exit 3
114 ;;
115 esac