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 | # | |
| 5 | # ANSI colors (darK,Red,Green,Yellow,Blue,Magenta,Cyan,White,Normal) | |
| 6 | K="\033[1;30m" | |
| 7 | R="\033[1;31m" | |
| 8 | G="\033[1;32m" | |
| 9 | Y="\033[1;33m" | |
| 10 | B="\033[1;34m" | |
| 11 | M="\033[1;35m" | |
| 12 | C="\033[1;36m" | |
| 13 | W="\033[1;37m" | |
| 14 | N="\033[0m" | |
| 15 | BOLD="\033[1m" | |
| 16 | REV="\033[7m" | |
| 17 | ITAL="\033[3m" | |
| 18 | UNDR="\033[4m" | |
| 19 | BLNK="\033[5m" | |
| 20 | ||
| 21 | WB="\033[44;37m" | |
| 22 | BW="\033[47;34m" | |
| 23 | ||
| 24 | DRAW="\033(0" | |
| 25 | TEXT="\033(B" | |
| 26 | ||
| 27 | #ESC=$(printf "\033") | |
| 28 | ESC=`echo "\033"` | |
| 29 | TAB=`echo "\011"` | |
| 30 | NL=' | |
| 31 | ' | |
| 32 | EMPTY=" " | |
| 33 | EMPTYLINE="${EMPTY}${EMPTY}${EMPTY}${EMPTY}${EMPTY}${EMPTY}${EMPTY}${EMPTY}"
| |
| 34 | ||
| 35 | #NICK="zippy" | |
| 36 | SERV="irc.freenode.net" | |
| 37 | PORT=6667 | |
| 38 | ||
| 39 | printat() | |
| 40 | {
| |
| 41 | printf "${ESC}[%d;%dH" ${1:-1} ${2:-1}
| |
| 42 | [ $# -gt 2 ] && {
| |
| 43 | shift 2 | |
| 44 | printf "%s" "$*" | |
| 45 | } | |
| 46 | } | |
| 47 | ||
| 48 | spaceat() | |
| 49 | {
| |
| 50 | blanks=`echo $EMPTYLINE | head -c $3` | |
| 51 | printf "${ESC}[%d;%dH${blanks}" ${1:-1} ${2:-1}
| |
| 52 | } | |
| 53 | ||
| 54 | cursor() | |
| 55 | {
| |
| 56 | case $1 in | |
| 57 | 0) printf "${ESC}[?25l" ;;
| |
| 58 | *) printf "${ESC}[?12l${ESC}[?25h" ;;
| |
| 59 | esac | |
| 60 | } | |
| 61 | ||
| 62 | bold() | |
| 63 | {
| |
| 64 | case $1 in | |
| 65 | 0) printf "${ESC}[22m" ;;
| |
| 66 | *) printf "${ESC}[1m" ;;
| |
| 67 | esac | |
| 68 | } | |
| 69 | ||
| 70 | get() ## get a single keystroke from stdin without waiting | |
| 71 | {
| |
| 72 | if [ -t 0 ] | |
| 73 | then | |
| 74 | if [ -z "$_STTY" ] | |
| 75 | then | |
| 76 | _STTY=$(stty -g) | |
| 77 | stty -echo -icanon time ${GET_TMOUT:-0} min ${GET_MIN:-0}
| |
| 78 | elif [ -n "$GET_TMOUT$GET_MIN" ] | |
| 79 | then | |
| 80 | stty -echo -icanon time ${GET_TMOUT:-0} min ${GET_MIN:-0}
| |
| 81 | fi | |
| 82 | fi | |
| 83 | # _KEY=$(dd bs=1 count=1 2>/dev/null; printf '.') | |
| 84 | _KEY=$(dd bs=1 count=1 2>/dev/null; echo '.') | |
| 85 | _KEY=${_KEY%.}
| |
| 86 | [ -n "$_KEY" ] | |
| 87 | } | |
| 88 | ||
| 89 | get_key() | |
| 90 | {
| |
| 91 | while : | |
| 92 | do | |
| 93 | GET_TMOUT=5 get && break ## Half second timeout on each loop | |
| 94 | done | |
| 95 | ||
| 96 | case $_KEY in | |
| 97 | "${ESC}")
| |
| 98 | stty -echo -icanon time 0 min 0 | |
| 99 | read _KEY | |
| 100 | if [ -z "$_KEY" ] | |
| 101 | then | |
| 102 | # _KEY='?' | |
| 103 | _KEY="${ESC}"
| |
| 104 | fi | |
| 105 | ;; | |
| 106 | esac | |
| 107 | } | |
| 108 | ||
| 109 | ||
| 110 | ShowGUI() | |
| 111 | {
| |
| 112 | # Now draw the GUI | |
| 113 | echo "\033[2J\033[1;1H" | |
| 114 | ||
| 115 | # Must use UPPERCASE for words in DRAW mode. Or add labels later. | |
| 116 | # NOTE: see how the cfaj code makes variable sized boxes. | |
| 117 | echo $WB$DRAW"\c" | |
| 118 | echo "\033[1;1Hlqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk" | |
| 119 | echo "x NICK x" | |
| 120 | echo "x IDENTIFY x" | |
| 121 | echo "x PASSWORD x" | |
| 122 | echo "tqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqu" | |
| 123 | echo "x SERVER x" | |
| 124 | echo "x PORT x" | |
| 125 | echo "x NEEDPASS x" | |
| 126 | echo "x PASSWORD x" | |
| 127 | echo "t CHANNELS qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqu" | |
| 128 | echo "x KEY x" | |
| 129 | echo "x KEY x" | |
| 130 | echo "x KEY x" | |
| 131 | echo "x KEY x" | |
| 132 | echo "mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj" | |
| 133 | echo $TEXT$BW"\c" | |
| 134 | echo "\033[14A\033[13G " | |
| 135 | echo "\033[13G " | |
| 136 | echo "\033[13G " | |
| 137 | echo "\033[1B\033[13G " | |
| 138 | echo "\033[13G " | |
| 139 | echo "\033[13G " | |
| 140 | echo "\033[13G " | |
| 141 | echo "\033[1B\033[3G \033[32G \033[37G " | |
| 142 | echo "\033[3G \033[32G \033[37G " | |
| 143 | echo "\033[3G \033[32G \033[37G " | |
| 144 | echo "\033[3G \033[32G \033[37G " | |
| 145 | echo "\033[13A\033[13G${NICK}"
| |
| 146 | echo "\033[13G${ID}"
| |
| 147 | echo "\033[13G${IPAS}"
| |
| 148 | echo "\033[1B\033[13G${SERV}"
| |
| 149 | echo "\033[13G${PORT}"
| |
| 150 | echo "\033[13G${NPAS}"
| |
| 151 | echo "\033[13G${PASS}"
| |
| 152 | echo "\033[1B\033[3G${CH1}\033[32G${NK1}\033[37G$KEY1"
| |
| 153 | echo "\033[3G${CH2}\033[32G${NK2}\033[37G$KEY2"
| |
| 154 | echo "\033[3G${CH3}\033[32G${NK3}\033[37G$KEY3"
| |
| 155 | echo "\033[3G${CH4}\033[32G${NK4}\033[37G$KEY4"
| |
| 156 | echo $N | |
| 157 | } | |
| 158 | ||
| 159 | # Open the tinyirc wrapper script and read lines until one starts with tinyirc. | |
| 160 | IRC=/usr/local/bin/irc | |
| 161 | if [ -r $IRC ] ; then | |
| 162 | exec 3<$IRC | |
| 163 | # Find SERV NICK PORT | |
| 164 | while read line <&3 | |
| 165 | do | |
| 166 | if [ "${line%% *}" = "tinyirc" ] ; then
| |
| 167 | # Tries to remove the first word | |
| 168 | CFG="${line#tinyirc }"
| |
| 169 | # Check if we removed anything | |
| 170 | if [ "$CFG" != "$line" ] ; then | |
| 171 | for ARG in $CFG | |
| 172 | do | |
| 173 | case $ARG in | |
| 174 | */*|*:*|*.*) SERV="$ARG" ;; | |
| 175 | -i) ID="yes" ;; | |
| 176 | -*) ARGS="$ARGS $ARG" ;; | |
| 177 | ''|*[!0-9]*) NICK="$ARG" ;; | |
| 178 | *) PORT="$ARG" ;; | |
| 179 | esac | |
| 180 | done | |
| 181 | fi | |
| 182 | fi | |
| 183 | done | |
| 184 | exec 3</dev/null | |
| 185 | fi | |
| 186 | ||
| 187 | # Remove irc:// from SERV | |
| 188 | case $SERV in | |
| 189 | *://*) SERV=${SERV#*://} ;;
| |
| 190 | esac | |
| 191 | # Split SERV at first / | |
| 192 | CHAN=${SERV#*/}
| |
| 193 | SERV=${SERV%%/*}
| |
| 194 | # Split SERV at first : | |
| 195 | case $SERV in | |
| 196 | *:*) PORT=${SERV#*:} ; SERV=${SERV%%:*} ;;
| |
| 197 | esac | |
| 198 | ||
| 199 | # Get the channels | |
| 200 | #for J in 1 2 3 4 | |
| 201 | J=1 | |
| 202 | while [ $J -lt 5 ] | |
| 203 | do | |
| 204 | CH=${CHAN%%/*}
| |
| 205 | case $CHAN in | |
| 206 | */*) CHAN=${CHAN#*/} ;;
| |
| 207 | *) CHAN="" ;; | |
| 208 | esac | |
| 209 | case $CH in | |
| 210 | *[\?\&,]*) OPTS=${CH#*[[\?\&,]} ; CH=${CH%%[\?\&,]*} ;;
| |
| 211 | *) OPTS="" ;; | |
| 212 | esac | |
| 213 | echo "$J CH=<$CH> OPTS=<$OPTS>" | |
| 214 | if [ -n "$CH" ] ; then | |
| 215 | eval CH$J=$CH ; eval OPTS$J=$OPTS ; | |
| 216 | case $OPTS in | |
| 217 | *key=*) CK=${OPTS#key=} ; CK=${CK#*[[\?\&,]} ; eval KEY$J=$CK ;;
| |
| 218 | *needkey*) eval NK$J="yes" ;; | |
| 219 | esac | |
| 220 | J=`expr $J + 1` ; | |
| 221 | elif [ -z "$OPTS" ] ; then | |
| 222 | J=`expr $J + 1` ; | |
| 223 | else | |
| 224 | # We got some server opts (no channel) | |
| 225 | SOPT="$SOPT,$OPTS" | |
| 226 | fi | |
| 227 | case $OPTS in | |
| 228 | *identify=*) IPAS=${OPTS#identify=} ; IPAS=${IPAS#*[[\?\&,]} ;;
| |
| 229 | esac | |
| 230 | case $OPTS in | |
| 231 | *pass=*) PASS=${OPTS#pass=} ; PASS=${PASS#*[[\?\&,]} ;;
| |
| 232 | *needpass*) NPAS="yes" ;; | |
| 233 | esac | |
| 234 | done | |
| 235 | ||
| 236 | # Check if various passwords are needed | |
| 237 | if [ -n "$ID" ] ; then ID="yes" ; | |
| 238 | elif [ -n "$IPAS" ] ; then ID="yes" ; | |
| 239 | else ID="no" ; | |
| 240 | fi | |
| 241 | - | echo "Edit TinyIRC Configuration? [y/"$B"n"$N"] \c" |
| 241 | + | |
| 242 | - | read -s -n1 EDIT |
| 242 | + | |
| 243 | - | echo "$EDIT" |
| 243 | + | |
| 244 | fi | |
| 245 | ||
| 246 | if [ -n "$NK1" ] ; then NK1="yes" ; | |
| 247 | elif [ -n "$KEY1" ] ; then NK1="yes" ; | |
| 248 | else NK1="no" ; | |
| 249 | fi | |
| 250 | if [ -n "$NK2" ] ; then NK2="yes" ; | |
| 251 | elif [ -n "$KEY2" ] ; then NK2="yes" ; | |
| 252 | else NK2="no" ; | |
| 253 | fi | |
| 254 | if [ -n "$NK3" ] ; then NK3="yes" ; | |
| 255 | elif [ -n "$KEY4" ] ; then NK3="yes" ; | |
| 256 | else NK3="no" ; | |
| 257 | fi | |
| 258 | if [ -n "$NK4" ] ; then NK4="yes" ; | |
| 259 | elif [ -n "$KEY4" ] ; then NK4="yes" ; | |
| 260 | else NK4="no" ; | |
| 261 | fi | |
| 262 | ||
| 263 | #echo "IDENT=<$IPAS>" | |
| 264 | #echo "PASS=<$PASS>" | |
| 265 | #echo "NPAS=<$NPAS>" | |
| 266 | # | |
| 267 | #echo "CH1=<$CH1> <$OPTS1>" | |
| 268 | #echo "CH2=<$CH2> <$OPTS2>" | |
| 269 | #echo "CH3=<$CH3> <$OPTS3>" | |
| 270 | #echo "CH4=<$CH4> <$OPTS4>" | |
| 271 | #echo "CHAN=<$CHAN> <$SOPT>" | |
| 272 | # | |
| 273 | #case "" in | |
| 274 | #X) | |
| 275 | ShowGUI | |
| 276 | #;; | |
| 277 | #esac | |
| 278 | ||
| 279 | ||
| 280 | #echo "Edit TinyIRC Configuration? [y/"$B"n"$N"] \c" | |
| 281 | #read -s -n1 EDIT | |
| 282 | #echo "$EDIT" | |
| 283 | ||
| 284 | ||
| 285 | #cursor 0 | |
| 286 | pick=1 | |
| 287 | y=2 | |
| 288 | x=13 | |
| 289 | ||
| 290 | # Run main dialog box until q. | |
| 291 | while : | |
| 292 | do | |
| 293 | printat $y $x "" | |
| 294 | ||
| 295 | get_key | |
| 296 | ||
| 297 | case $_KEY in | |
| 298 | ${NL})printat 1 24 "key=[NL]"
| |
| 299 | _KEY=$pick | |
| 300 | ;; "${ESC}"|${NL}) break
| |
| 301 | ;; '[D')printat 1 24 "key=[<<]" | |
| 302 | [ "$pick" -gt 11 ] && pick=$(( $pick - 4 )) | |
| 303 | ;; '[C')printat 1 24 "key=[>>]" | |
| 304 | [ "$pick" -gt 7 ] && [ "$pick" -lt 16 ] && pick=$(( $pick + 4 )) | |
| 305 | ;; '[A')printat 1 24 "key=[UP]" | |
| 306 | [ "$pick" -eq 12 ] && pick=8 | |
| 307 | [ "$pick" -eq 16 ] && pick=8 | |
| 308 | pick=$(( $pick - 1 )) | |
| 309 | ;; '[B')printat 1 24 "key=[DN]" | |
| 310 | [ "$pick" -ne 11 ] && [ "$pick" -ne 15 ] && pick=$(( $pick + 1 )) | |
| 311 | ;; "${TAB}")printat 1 24 "key=[TB]"
| |
| 312 | [ "$pick" -eq 19 ] && pick=0 | |
| 313 | pick=$(( $pick + 1 )) | |
| 314 | ;; '[5~')printat 1 24 "key=[V+]" | |
| 315 | ;; '[6~')printat 1 24 "key=[V-]" | |
| 316 | ;; '[1~')printat 1 24 "key=[HM]" | |
| 317 | ;; '[4~')printat 1 24 "key=[EN]" | |
| 318 | ;; *)printat 1 24 "key=[${_KEY}]"
| |
| 319 | ;; | |
| 320 | esac | |
| 321 | ||
| 322 | if [ "$pick" -lt 1 ] ; then pick=1 | |
| 323 | elif [ "$pick" -gt 19 ] ; then pick=19 | |
| 324 | fi | |
| 325 | if [ "$pick" -lt 4 ] ; then y=$(( $pick + 1 )) ; x=13 | |
| 326 | elif [ "$pick" -lt 8 ] ; then y=$(( $pick + 2 )) ; x=13 | |
| 327 | elif [ "$pick" -lt 12 ] ; then y=$(( $pick + 3 )) ; x=3 | |
| 328 | elif [ "$pick" -lt 16 ] ; then y=$(( $pick - 1 )) ; x=32 | |
| 329 | elif [ "$pick" -lt 20 ] ; then y=$(( $pick - 5 )) ; x=37 | |
| 330 | fi | |
| 331 | done | |
| 332 | ||
| 333 | # Goto top left corner (1,1) and set normal text, fix tty, turn on the cursor. | |
| 334 | printat 1 1 "${ESC}[0m"
| |
| 335 | stty sane | |
| 336 | clear | |
| 337 | cursor 1 |