#! /bin/sh

## Script acompaniante de netIRC
## Basado en el  script "irc", incluido en la distrubucion
## estandard de Netcat.
## Gracias a quien lo haya escrito, agrega habilidades
## al cliente, y simplifico mi trabajo ;)
#

## Caracteristicas:
## -Mantiene la conexion viva, evitando que el servidor nos
##  mande al carajo
## -Incluye un sistema de comandos sencillo
#

# Ignorar seniales que causen que el cliente muera.
# mantener la conexion viva (proceso secundario), hasta que el proceso
# principal (netcat) sea terminado por nosotros
if test "$1" = "tick" ; then
  trap '' 1 2 3 13 14 15 16
  echo "nick $NICK"
  echo "user razamex razamexicana.org irc.server.net :Que putas me ves" 
  while true ; do
    sleep 60
    echo "PONG !"
  done
fi

# Inicializar proceso secundario
sh $0 "tick" &
ircpp=$!
echo "[Keepalive: $ircpp]" >&2
# Evitar que nosotros mismos matemos el proceso secundario
# filtrando las seniales: hup int quit pipe alrm term urg
trap 'kill -9 $ircpp ; exit 0' 1 2 3 13 14 15 16
sleep 2

sender=''
savecmd=''

while read xx yy ; do
  case "${xx}" in
# Linea en blanco no hace nada
    "")
	continue
    ;;
# nuevo canal o usuario; ">" solo, indica modo literal
# (especificando el canal o usuario nosotros mismos)
    ">")
	if test "${yy}" ; then
	  sender="privmsg ${yy} :"
	else
	  sender=''
	fi
	continue
    ;;
# Despliega el contenido de un archivo, una linea por segundo
# Utiliza el destino default. Asi que forzosamente debe
# especificarse uno.
    "<")
	if test -f "${yy}" ; then
	  ( while read zz ; do
	    sleep 1
	    echo "${sender}${zz}"
	  done ) < "$yy"
	  echo "[done]" >&2
	else
	  echo "[File $yy not found]" >&2
	fi
	continue
    ;;
# Guardar y hacer un solo comando, para repetirlo facilmente
    "/")
	if test "${yy}" ; then
	  savecmd="${yy}"
	fi
	echo "${savecmd}"
    ;;
# Si un canal o persona no es especificada, usa la default
    *)
	echo "${sender}${xx} ${yy}"
	continue
    ;;
  esac
done

# Mensaje de salida
echo "quit :Raza-Mexicana"
kill -9 $ircpp
exit 0
