View difference between Paste ID: iUp4xjJT and 4mha6G26
SHOW: | | - or go back to the newest paste.
1
#!/bin/sh
2
3
# The ramdisk /bin/sh uses "\c" at end of line to suppress newlines.
4-
#
4+
# Oher shells use -ne and -e.  So define c or the other two.
5
c=\\c
6-
K="\033[1;30m"
6+
#ne=-ne; e=-e
7-
R="\033[1;31m"
7+
8-
G="\033[1;32m"
8+
E=$(printf "\033")
9-
Y="\033[1;33m"
9+
ESC=$(printf "\033")
10-
B="\033[1;34m"
10+
C_D=$(printf "\004")
11-
M="\033[1;35m"
11+
C_H=$(printf "\010")
12-
C="\033[1;36m"
12+
TAB=$(printf "\011")
13-
W="\033[1;37m"
13+
BS=$(printf "\177")
14-
N="\033[0m"
14+
15-
BOLD="\033[1m"
15+
16-
REV="\033[7m"
16+
17-
ITAL="\033[3m"
17+
18-
UNDR="\033[4m"
18+
K="${E}[1;30m"
19-
BLNK="\033[5m"
19+
R="${E}[1;31m"
20
G="${E}[1;32m"
21-
WB="\033[44;37m"
21+
Y="${E}[1;33m"
22-
BW="\033[47;34m"
22+
B="${E}[1;34m"
23
M="${E}[1;35m"
24-
DRAW="\033(0"
24+
C="${E}[1;36m"
25-
TEXT="\033(B"
25+
W="${E}[1;37m"
26
N="${E}[0m"
27-
#ESC=$(printf "\033")
27+
BOLD="${E}[1m"
28-
ESC=`echo "\033"`
28+
REV="${E}[7m"
29-
TAB=`echo "\011"`
29+
ITAL="${E}[3m"
30
UNDR="${E}[4m"
31
BLNK="${E}[5m"
32-
EMPTY="                    "
32+
33-
EMPTYLINE="${EMPTY}${EMPTY}${EMPTY}${EMPTY}${EMPTY}${EMPTY}${EMPTY}${EMPTY}"
33+
WB="${E}[1;44;37m"
34
BW="${E}[0;47;34m"
35
36-
SERV="irc.freenode.net"
36+
DRAW="${E}(0"
37
TEXT="${E}(B"
38
39
#NICK="zippy"
40
DSRV="irc.freenode.net"
41-
    printf "${ESC}[%d;%dH" ${1:-1} ${2:-1}
41+
SERV=$DSRV
42-
    [ $# -gt 2 ] && {
42+
43-
        shift 2
43+
44-
        printf "%s" "$*"
44+
45-
    }
45+
46
  printf "${ESC}[%d;%dH" ${1:-1} ${2:-1}
47
  [ $# -gt 2 ] && {
48-
spaceat()
48+
    shift 2
49
    printf "%s" "$*"
50-
    blanks=`echo $EMPTYLINE | head -c $3`
50+
  }
51-
    printf "${ESC}[%d;%dH${blanks}" ${1:-1} ${2:-1}
51+
52
53
sreplace()
54
{
55
  S1=$(expr substr "$STR" 1 $1)
56-
    case $1 in
56+
  [ $# -lt 2 ] && S1=$(expr substr $STR 1 $(($1 - 1)))
57-
        0) printf "${ESC}[?25l" ;;
57+
  S2=$(expr substr "$STR" $(($1 + 1)) ${#STR})
58-
        *) printf "${ESC}[?12l${ESC}[?25h" ;;
58+
  STR="${S1}${2}${S2}"
59
}
60
61
cursor()
62
{
63
  case $1 in
64-
    case $1 in
64+
    0) printf "${ESC}[?25l" ;;
65-
        0) printf "${ESC}[22m" ;;
65+
    *) printf "${ESC}[?12l${ESC}[?25h" ;;
66-
        *) printf "${ESC}[1m" ;;
66+
67
}
68
69
bold()
70
{
71
  case $1 in
72-
    if [ -t 0 ]
72+
    0) printf "${ESC}[22m" ;;
73
    *) printf "${ESC}[1m" ;;
74-
      if [ -z "$_STTY" ]
74+
75-
      then
75+
76-
        _STTY=$(stty -g)
76+
77-
        stty -echo -icanon time ${GET_TMOUT:-0} min ${GET_MIN:-0}
77+
78-
      elif [ -n "$GET_TMOUT$GET_MIN" ]
78+
79-
      then
79+
  if [ -t 0 ]
80-
        stty -echo -icanon time ${GET_TMOUT:-0} min ${GET_MIN:-0}
80+
  then
81-
      fi
81+
    if [ -z "$_STTY" ]
82
    then
83-
#    _KEY=$(dd bs=1 count=1  2>/dev/null; printf '.')
83+
      _STTY=$(stty -g)
84-
    _KEY=$(dd bs=1 count=1  2>/dev/null; echo '.')
84+
      stty -echo -icanon time ${GET_TMOUT:-0} min ${GET_MIN:-0}
85-
    _KEY=${_KEY%.}
85+
    elif [ -n "$GET_TMOUT$GET_MIN" ]
86-
    [ -n "$_KEY" ]
86+
87
      stty -echo -icanon time ${GET_TMOUT:-0} min ${GET_MIN:-0}
88
    fi
89
  fi
90
#  _KEY=$(dd bs=1 count=1  2>/dev/null; printf '.')
91-
    while :
91+
  _KEY=$(dd bs=1 count=1  2>/dev/null; echo '.')
92-
    do
92+
  _KEY=${_KEY%.}
93-
      GET_TMOUT=5 get && break ## Half second timeout on each loop
93+
  [ -n "$_KEY" ]
94-
    done
94+
95
96-
    case $_KEY in
96+
97-
    "${ESC}")
97+
98-
      stty -echo -icanon time 0 min 0
98+
  while :
99-
      read _KEY
99+
  do
100-
      if [ -z "$_KEY" ] 
100+
    GET_TMOUT=5 get && break ## Half second timeout on each loop
101-
      then
101+
  done
102-
#        _KEY='?'
102+
103-
        _KEY="${ESC}"
103+
  case $_KEY in
104-
      fi
104+
  "${ESC}")
105-
    ;;
105+
    stty -echo -icanon time 0 min 0
106
    read _KEY
107
    if [ -z "$_KEY" ] 
108
    then
109
#      _KEY='?'
110
      _KEY="${ESC}"
111
    fi
112-
# Now draw the GUI
112+
  ;;
113-
echo "\033[2J\033[1;1H"
113+
114
}
115
116
117-
echo $WB$DRAW"\c"
117+
# Define GUI Widgets (StrName, FieldLength, AtLoc, EmptyStr, Type)
118-
echo "\033[1;1Hlqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk"
118+
WS1="NICK";  WL1=39;  WA1="${E}[2;13H";   WE1="${WA1}$(printf "%-39s")"
119-
echo          "x NICK                                              x"
119+
WS2="ID";    WL2=39;  WA2="${E}[3;13H";   WE2="${WA2}$(printf "%-39s")"
120-
echo          "x IDENTIFY                                          x"
120+
WS3="IPAS";  WL3=39;  WA3="${E}[4;13H";   WE3="${WA3}$(printf "%-39s")"
121-
echo          "x PASSWORD                                          x"
121+
WS4="SERV";  WL4=39;  WA4="${E}[6;13H";   WE4="${WA4}$(printf "%-39s")"
122-
echo          "tqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqu"
122+
WS5="PORT";  WL5=39;  WA5="${E}[7;13H";   WE5="${WA5}$(printf "%-39s")"
123-
echo          "x SERVER                                            x"
123+
WS6="NPAS";  WL6=39;  WA6="${E}[8;13H";   WE6="${WA6}$(printf "%-39s")"
124-
echo          "x PORT                                              x"
124+
WS7="PASS";  WL7=39;  WA7="${E}[9;13H";   WE7="${WA7}$(printf "%-39s")"
125-
echo          "x NEEDPASS                                          x"
125+
WS8="CH1";   WL8=24;  WA8="${E}[11;3H";   WE8="${WA8}$(printf "%-24s")"
126-
echo          "x PASSWORD                                          x"
126+
WS9="CH2";   WL9=24;  WA9="${E}[12;3H";   WE9="${WA9}$(printf "%-24s")"
127-
echo          "t CHANNELS  qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqu"
127+
WS10="CH3";  WL10=24; WA10="${E}[13;3H";  WE10="${WA10}$(printf "%-24s")"
128-
echo          "x                          KEY                      x"
128+
WS11="CH4";  WL11=24; WA11="${E}[14;3H";  WE11="${WA11}$(printf "%-24s")"
129-
echo          "x                          KEY                      x"
129+
WS12="NK1";  WL12=3;  WA12="${E}[11;32H"; WE12="${WA12}$(printf "%-3s")"
130-
echo          "x                          KEY                      x"
130+
WS13="NK2";  WL13=3;  WA13="${E}[12;32H"; WE13="${WA13}$(printf "%-3s")"
131-
echo          "x                          KEY                      x"
131+
WS14="NK3";  WL14=3;  WA14="${E}[13;32H"; WE14="${WA14}$(printf "%-3s")"
132-
echo          "mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj"
132+
WS15="NK4";  WL15=3;  WA15="${E}[14;32H"; WE15="${WA15}$(printf "%-3s")"
133-
echo $TEXT$BW"\c"
133+
WS16="KEY1"; WL16=15; WA16="${E}[11;37H"; WE16="${WA16}$(printf "%-15s")"
134-
echo      "\033[14A\033[13G                                       "
134+
WS17="KEY2"; WL17=15; WA17="${E}[12;37H"; WE17="${WA17}$(printf "%-15s")"
135-
echo             "\033[13G                                       "
135+
WS18="KEY3"; WL18=15; WA18="${E}[13;37H"; WE18="${WA18}$(printf "%-15s")"
136-
echo             "\033[13G                                       "
136+
WS19="KEY4"; WL19=15; WA19="${E}[14;37H"; WE19="${WA19}$(printf "%-15s")"
137-
echo      "\033[1B\033[13G                                       "
137+
138-
echo             "\033[13G                                       "
138+
###################
139-
echo             "\033[13G                                       "
139+
140-
echo             "\033[13G                                       "
140+
141-
echo "\033[1B\033[3G                        \033[32G   \033[37G               "
141+
printf "${ESC}[2J"
142-
echo        "\033[3G                        \033[32G   \033[37G               "
142+
143-
echo        "\033[3G                        \033[32G   \033[37G               "
143+
144-
echo        "\033[3G                        \033[32G   \033[37G               "
144+
145-
echo "\033[13A\033[13G${NICK}"
145+
printat 1 1  "$WB$DRAW"
146-
echo        "\033[13G${ID}"
146+
echo "lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk"
147-
echo        "\033[13G${IPAS}"
147+
echo "x NICK                                              x"
148-
echo "\033[1B\033[13G${SERV}"
148+
echo "x IDENTIFY                                          x"
149-
echo        "\033[13G${PORT}"
149+
echo "x PASSWORD                                          x"
150-
echo        "\033[13G${NPAS}"
150+
echo "tqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqu"
151-
echo        "\033[13G${PASS}"
151+
echo "x SERVER                                            x"
152-
echo "\033[1B\033[3G${CH1}\033[32G${NK1}\033[37G$KEY1"
152+
echo "x PORT                                              x"
153-
echo        "\033[3G${CH2}\033[32G${NK2}\033[37G$KEY2"
153+
echo "x NEEDPASS                                          x"
154-
echo        "\033[3G${CH3}\033[32G${NK3}\033[37G$KEY3"
154+
echo "x PASSWORD                                          x"
155-
echo        "\033[3G${CH4}\033[32G${NK4}\033[37G$KEY4"
155+
echo "t CHANNELS  qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqu"
156-
echo $N
156+
echo "x                          KEY                      x"
157
echo "x                          KEY                      x"
158
echo "x                          KEY                      x"
159
echo "x                          KEY                      x"
160
echo "mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj"
161
printf "$TEXT$BW"
162
# 
163
echo "${WE1}${WA1}${NICK}"
164
echo "${WE2}${WA2}${ID}"
165
echo "${WE3}${WA3}${IPAS}"
166
echo "${WE4}${WA4}${SERV}"
167
echo "${WE5}${WA5}${PORT}"
168
echo "${WE6}${WA6}${NPAS}"
169
echo "${WE7}${WA7}${PASS}"
170
echo "${WE8}${WA8}${CH1}${WE12}${WA12}${NK1}${WE16}${WA16}${KEY1}"
171
echo "${WE9}${WA9}${CH2}${WE13}${WA13}${NK2}${WE17}${WA17}${KEY2}"
172
echo "${WE10}${WA10}${CH3}${WE14}${WA14}${NK3}${WE18}${WA18}${KEY3}"
173
echo "${WE11}${WA11}${CH4}${WE15}${WA15}${NK4}${WE19}${WA19}${KEY4}"
174
#echo $N
175
}
176
177
# Open the tinyirc wrapper script and read lines until one starts with tinyirc.
178
IRC=/usr/local/bin/irc
179
if [ -r $IRC ] ; then
180
exec 3<$IRC
181
# Find SERV NICK PORT
182
while read line <&3
183
do
184
  if [ "${line%% *}" = "tinyirc" ] ; then
185
    # Tries to remove the first word
186
    CFG="${line#tinyirc }"
187
    # Check if we removed anything
188
    if [ "$CFG" != "$line" ] ; then
189
      for ARG in $CFG
190
      do 
191
	case $ARG in 
192-
CHAN=${SERV#*/}
192+
193
	  -i) ID="yes" ;; 
194
	  -*) ARGS="$ARGS $ARG" ;; 
195
	  ''|*[!0-9]*) NICK="$ARG" ;; 
196
	  *) PORT="$ARG" ;;
197
	esac 
198
      done
199
    fi
200-
#for J in 1 2 3 4 
200+
201
done
202-
while [ $J -lt 5 ]
202+
203
fi
204
205
# Remove irc:// from SERV
206
case $SERV in 
207
  *://*) SERV=${SERV#*://} ;;
208
esac 
209
# Split SERV at first / 
210
case $SERV in 
211
  */*) CHAN=${SERV#*/} ;;
212
  *) CHAN="" ;;  
213
esac 
214
SERV=${SERV%%/*}
215
# Split SERV at first :
216
case $SERV in 
217
  *:*) PORT=${SERV#*:} ; SERV=${SERV%%:*} ;;
218
esac 
219
220
# Get the channels
221
J=1; while [ $J -lt 5 ]
222
do
223-
  else
223+
224-
    # We got some server opts (no channel)
224+
225
    */*) CHAN=${CHAN#*/} ;;
226
    *) CHAN="" ;;
227
  esac 
228
  case $CH in 
229
    *[\?\&,]*) OPTS=${CH#*[[\?\&,]} ; CH=${CH%%[\?\&,]*} ;;
230
    *) OPTS="" ;;
231
  esac
232
  echo "$J CH=<$CH> OPTS=<$OPTS>"
233
  if [ -n "$CH" ] ; then
234
    eval CH$J=$CH ; eval OPTS$J=$OPTS ; 
235
    case $OPTS in 
236
      *key=*) CK=${OPTS#key=} ; CK=${CK#*[[\?\&,]} ; eval KEY$J=$CK ;;
237
      *needkey*) eval NK$J="yes" ;;
238
    esac
239
    J=`expr $J + 1` ;
240
  elif [ -z "$OPTS" ] ; then
241
    J=`expr $J + 1` ;
242
  else # We got some server opts (no channel)
243
    SOPT="$SOPT,$OPTS"
244
  fi
245
  case $OPTS in 
246
    *identify=*) IPAS=${OPTS#identify=} ; IPAS=${IPAS#*[[\?\&,]} ;;
247
  esac
248
  case $OPTS in 
249
    *pass=*) PASS=${OPTS#pass=} ; PASS=${PASS#*[[\?\&,]} ;;
250
    *needpass*) NPAS="yes" ;;
251
  esac
252
done
253
254
# Check if various passwords are needed
255
if [ -n "$ID" ] ; then ID="yes" ; 
256
elif [ -n "$IPAS" ] ; then ID="yes" ; 
257
else ID="no" ; 
258
fi
259
if [ -n "$NPAS" ] ; then NPAS="yes" ; 
260
elif [ -n "$PASS" ] ; then NPAS="yes" ; 
261
else NPAS="no" ; 
262
fi
263-
#echo "IDENT=<$IPAS>"
263+
264-
#echo "PASS=<$PASS>"
264+
265-
#echo "NPAS=<$NPAS>"
265+
266-
#
266+
267-
#echo "CH1=<$CH1> <$OPTS1>"
267+
268-
#echo "CH2=<$CH2> <$OPTS2>"
268+
269-
#echo "CH3=<$CH3> <$OPTS3>"
269+
270-
#echo "CH4=<$CH4> <$OPTS4>"
270+
271-
#echo "CHAN=<$CHAN> <$SOPT>"
271+
272-
#
272+
273-
#case "" in
273+
274-
#X)
274+
275
fi
276-
#;;
276+
277-
#esac
277+
278
else NK4="no" ; 
279
fi
280-
#echo "Edit TinyIRC Configuration? [y/"$B"n"$N"] \c"
280+
281-
#read -s -n1 EDIT
281+
282-
#echo "$EDIT"
282+
################## Now draw and run the GUI.
283
ShowGUI
284
285
#cursor 0
286-
pick=1
286+
287
y=2
288
x=13
289
xo=13
290-
# Run main dialog box until q.
290+
STR=$NICK
291
292
# Run main dialog box until ESC
293-
printat $y $x ""
293+
294
do
295
printat $y $x
296
get_key
297
MV=0 # Handle widget traversal (UP,DN,TAB).
298
case $_KEY in
299-
        _KEY=$pick
299+
300
        #_KEY=$J
301
	eval SP=\$WS$J
302-
        [ "$pick" -gt 11 ] && pick=$(( $pick - 4 ))
302+
	eval $SP=$STR
303
	x=$xo
304-
        [ "$pick" -gt 7 ] && [ "$pick" -lt 16 ] && pick=$(( $pick + 4 ))
304+
305-
;; '[A')printat 1 24 "key=[UP]"
305+
;; '[A')printat 1 24 "key=[UP]" ; MV=$J
306-
        [ "$pick" -eq 12 ] && pick=8
306+
        [ "$J" -eq 12 ] && J=8
307-
        [ "$pick" -eq 16 ] && pick=8
307+
        [ "$J" -eq 16 ] && J=8
308-
        pick=$(( $pick - 1 ))
308+
        J=$(($J - 1))
309-
;; '[B')printat 1 24 "key=[DN]"
309+
;; '[B')printat 1 24 "key=[DN]" ; MV=$J
310-
        [ "$pick" -ne 11 ] && [ "$pick" -ne 15 ] && pick=$(( $pick + 1 ))
310+
        [ "$J" -ne 11 ] && [ "$J" -ne 15 ] && J=$(($J + 1))
311-
;; "${TAB}")printat 1 24 "key=[TB]"
311+
;; "${TAB}")printat 1 24 "key=[TB]" ; MV=$J
312-
        [ "$pick" -eq 19 ] && pick=0
312+
        [ "$J" -eq 19 ] && J=0
313-
        pick=$(( $pick + 1 ))
313+
        [ "$J" -gt 7 ] && J=$(($J + 4))
314
        [ "$J" -gt 19 ] && J=$(($J - 11))
315
        [ "$J" -le 7 ] && J=$(($J + 1))
316
;; '[D')printat 1 24 "key=[<<]"
317
        [ $x -gt $xo ] && x=$(($x - 1))
318-
;; *)printat 1 24 "key=[${_KEY}]"
318+
319
        [ $x -lt $((${#STR} + $xo)) ] && x=$(($x + 1))
320
;; '[5~')printat 1 24 "key=[V+]"
321
;; '[6~')printat 1 24 "key=[V-]"
322-
if [ "$pick" -lt 1 ] ; then pick=1
322+
323-
elif [ "$pick" -gt 19 ] ; then pick=19
323+
324
;; "${C_D}")printat 1 24 "key=[^D]"
325-
if   [ "$pick" -lt 4 ] ; then y=$(( $pick + 1 )) ; x=13
325+
;; "${C_H}")printat 1 24 "key=[^H]"
326-
elif [ "$pick" -lt 8 ] ; then y=$(( $pick + 2 )) ; x=13
326+
;; "${BS}")printat 1 24 "key=[BS]"
327-
elif [ "$pick" -lt 12 ] ; then y=$(( $pick + 3 )) ; x=3
327+
	[ $x -gt $xo ] && {
328-
elif [ "$pick" -lt 16 ] ; then y=$(( $pick - 1 )) ; x=32
328+
          sreplace $(($x - $xo))
329-
elif [ "$pick" -lt 20 ] ; then y=$(( $pick - 5 )) ; x=37
329+
	  x=$(($x - 1))
330
          printat $y $xo "$STR "
331
          printat $y $x
332
        }
333-
# Goto top left corner (1,1) and set normal text, fix tty, turn on the cursor.
333+
;; [[:cntrl:]]) printat 1 24 "key=[CTL]"
334-
printat 1 1 "${ESC}[0m"
334+
;; [[:graph:]]) printat 1 24 "key=[${_KEY}]"
335
	sreplace $(($x - $xo)) "${_KEY}"
336
        printat $y $xo $STR 
337-
cursor 1
337+
	x=$(($x + 1))
338
        printat $y $x
339
;; *)printat 1 24 "key=[HUH]"
340
;;
341
esac
342
343
# Set x and y if traversing between widgets
344
if [ $MV -ne 0 ] ; then
345
  eval WL=\$WL$MV
346
  printat $y $xo; printf "%-${WL}s"
347
  eval SP=\$WS$MV
348
  eval STR=\$"$SP"
349
  eval printat $y $xo $STR
350
  # Should erase from xo+$(#STR) to widgetlength.
351
  if [ "$J" -lt 1 ] ; then J=1
352
  elif [ "$J" -gt 19 ] ; then J=19
353
  fi
354
  if   [ "$J" -lt 4 ] ; then y=$(($J + 1)) ; x=13
355
  elif [ "$J" -lt 8 ] ; then y=$(($J + 2)) ; x=13
356
  elif [ "$J" -lt 12 ] ; then y=$(($J + 3)) ; x=3
357
  elif [ "$J" -lt 16 ] ; then y=$(($J - 1)) ; x=32
358
  elif [ "$J" -lt 20 ] ; then y=$(($J - 5)) ; x=37
359
  fi
360
  xo=$x
361
  eval SP=\$WS$J
362
  eval STR=\$"$SP"
363
  eval printat $y $xo $STR
364
fi
365
done
366
367
# Goto top left corner (1,1), set normal text, fix tty, turn on the cursor.
368
printat 1 1 $N
369
stty sane
370
clear
371
cursor 1
372
373
### Construct a tinyirc command line to save.
374
CMD="tinyirc $NICK $PORT ${SERV:-$DSRV}"
375
376
OPS=""
377
OP=\?
378
case "$ID" in y*|Y*) OPS="${OP}identify=$IPAS"; OP=\& ;; esac 
379
if [ -n "$PASS" ] ; then
380
  OPS="${OPS}${OP}pass=${PASS}";
381
else case "$NPAS" in 
382
  y*|Y*) OPS="${OPS}${OP}needpass" ;; esac
383
fi 
384
[ -n "$OPS" ] && CMD="${CMD}/$OPS"
385
386
for J in 1 2 3 4
387
do
388
eval CH="\$CH$J"; eval NK="\$NK$J"; eval KEY="\$KEY$J"
389
[ -n "$CH" ] && {
390
  CMD="${CMD}/$CH"
391
  if [ -n "$KEY" ] ; then
392
    CMD="${CMD},key=${KEY}"
393
  else case "$NK" in 
394
    y*|Y*) CMD="${CMD},needkey" ;; esac
395
  fi 
396
}
397
done
398
399
echo $CMD