09-01-2003: VERSION 0.7.2 => 0.7.3
	* Se implement el soporte de i18n por medio de gettext: ingls (predeterminado)
	y castellano (si LANG=es_*).
	* Introduccin de la variable global jerarquia para mejorar el comoportamiento
	de funciones tales como salir().
	* Inversin del orden en que se llama a matarSubprocesos() y cerrar_sockets()
	para evitar SIGPIPEs en los hijos.
	* Introduccin de algunos comentarios en el cdigo.

07-01-2003:
	* Se implement el envio de un mensaje nulo al frontend antes de que salga
	el padre.

05-01-2003:
	* Arreglo de un bug que causaba el bloqueo del proceso padre en wait() cuando 
	un hijo	recibia una seal de detencion. Se reemplaz wait() por waitpid().

03-01-2003:
	* Se implement la verificacion de la cantidad de bytes transmitidos en send() y 
	recibidos en recv() para evitar desfasajes producidos por la interrupcion de alguna
	seal.

02-01-2003:
	* Se agrego la posibilidad de que la cantidad de procesos de fuerza bruta sea 0 (cero)
	para poder procesar el diccionario solamente.

30-12-2002: VERSION 0.7.1 => 0.7.2
	* Migracion del proyecto a Anjuta.
	* El archivo "cisilia-x.x.x.c" fue renombrado como "main.c".
	* main.c: Inclusion de config.h.
	* Limpieza general de funciones obsoletas y de codigo comentado.
	* Se implement el procesamiento asincronico del diccionario: el diccionario se 
	procesa al mismo tiempo que el cracking por fuerza bruta. Esto deja obsoleto al
	proceso generador de la palabra nula.
	* Se implement el manejo de las seniales SIGSTOP y SIGCONT para para permitir
	la suspension y continuacion de los procesos.
	* Se implement la funcion cicloPrincipal() la cual debe ser ejecutada 
	continuamente por el proceso padre para manejar la suspension y la continuacion.
	* Se implement el manejo de interrupciones en las llamadas a select() y send().
	* Se modifico el formato de impresion de las claves crackeadas para su mejor 
	analisis y parseo posterior.

19-12-2002: VERSION 0.7.0 => 0.7.1
	* Se implement el pasaje a mayusculas de todas las palabras leidas del diccionario.
	* Se arreglo un bug que consistia en contar la palabra nula dos veces, ya que es
	generada por el proceso nulo y tambien por el primer hijo de fuerza bruta.
	* Se implement la opcion de la linea de comandos -x o --frontend para que el backend 
	sea el que se conecta con el frontend.

15-12-2002:
	* Se desplazo la lectura del socket UDP fuera del #if CONEXION_PERMANENTE != 0 en
	escuchar ya que en caso de conexiones TCP intermitentes, esta no se realizaba.

14-12-2002:
	* Se reemplazaron las llamadas a exit() en los subprocesos por _exit(), para evitar 
	salidas	indeseadas del padre.
	* Se reemplazaron todas las referencias hardcodeadas a la posicion del caracter nulo 
	en crackear_passwords_4() y crackear_passwords_5() por POS_BARRA_0.

11-12-2002: VERSION 0.6.3 => 0.7.0
        * Se implement el nuevo algoritmo de generacion de palabras de la "matriz
	transpuesta" crackear_passwords_5() que hace obsoleta la division de rangos
	y distribuye equitativamente las probabilidades de aparicion de los simbolos 
	del alfabeto.
        * Se incluyo el pid del padre a la estructura estadisticas para que el front-end
	pueda verificar la procedencia de los mensajes que recibe evitando los de
	otros posibles back-ends en ejecucion.
        * Se incluyo el campo rx (cantidad de bytes recibidos) en la estructura 
	estadisticas del padre.
        * Se elimino el algoritmo de generacion de palabras crackear_passwords_3().
	
09-12-2002:
        * Se modifico el protocolo de comunicacion entre el front-end y el back-end:
	ahora el back-end envia su puerto en formato int en vez de char[6] (esto era
	asi por compatibilidad con python, pero ya no es necesario).
        * Se implement la recepcion de mensajes de tipos y longitud variables de los 
	hijos en escuchar() mediante la union msgHijo, lo que garantiza la 
	disponibilidad de memoria, en vez de un buffer char de longitud fija casteado 
	segun el tamanio del mensaje recibido.

07-12-2002: VERSION 0.6.2 => 0.6.3
        * Se eliminaron todas las referencias a la cantidad de palabras invalidas pues
	ya no se generan.
        * Se agruparon todos los datos estadisticos del padre en una estructura 
	de tipo estadisticas para facilitar su envio al front-end.
        * Se agruparon todos los datos estadisticos de los subprocesos en una estructura
	de tipo datos_hijo para facilitar su envio al padre.
        * Se implement el envio de las claves descifradas desde el padre al front-end 
	dentro de la funcion chequear_passwd_ok().

06-12-2002:
        * Se implement el vuelco de las claves descifradas al archivo log (parametro
	-l de la linea de comandos), mediante la funcion logear().
        * Se cambio el comportamiento de advertencia() para que imprima siempre sin
	tener en cuenta el parametro -v.
        * Se modifico subdividio el mensaje de ayuda del parametro -h en varios printf
	para evitar las advertencias del gcc 3.2.

02-12-2002:
        * Se agrego un control de la cantidad de usuarios leidos del archivo SAM al
	final de archivo_a_memoria(), saliendo si es cero.
        * Se agrego un control de la cantidad de subprocesos conectados en salir():
	si es cero, no se llama a matar_subprocesos() (para evitar matar a otro 
	proceso si fue invocado por el front-end).

15-11-2002: VERSION 0.6.1 => 0.6.2
        * Se definio la estructura "estadisticas" para el envio de datos estadisticos
	del padre al front-end.
        * Se definio la estructura "datos_hijo" para el envio de datos estadisticos
	de los hijos al padre.
        * Se implement en el padre el vector datos_hijo         * vhijos, para guardar los datos 
	estadisticos de los hijos (palabras generadas por cada uno).
        * Se implement la funcion enviar_datos_hijo() para el envio de datos estadisticos
	de los hijos al padre en forma periodica usando la alarma del sistema.
        * Por prolijidad, comodidad y centralizacion se movio la llamada a conectarTCP()
	en cada subproceso a inicioSubproc().
        * Se generalizo e implement la funcion salir() tanto para los hijos como para 
	el padre.

13-11-2002:
        * Se implement la funcion advertencia() para imprimir los mensajes de error
	del sistema operativo.
        * Se creo el archivo cisilia.h para poder compartir la declaracion de la
	estructura de mensajes de estadisticas con el front-end escrito en C.
        * Se creo el archivo cisilia-data.h para poder compartir la declaracion de
	la estructura de mensajes de estadisticas con el front-end escrito en C.

12-11-2002: VERSION 0.6.0 => 0.6.1
        * Se implement la funcion matarSubprocesos() que envia la senial SIGUSR1 
	desde el padre a todos los procesos con el PGID (Process Group ID) del padre.
        * Por prolijidad, comodidad y centralizacion de tareas se implement la 
	funcion capturar_senial() que procesa todas las seniales y reemplaza a 
	todas las distintas funciones capturadoras de seniales anteriores.
        * Se definio la funcion capturar_senial para manejar SIG_CHLD, en vez de 
	SIG_IGN (ver OBSERVACIONES de `man signal`).
        * Se cambio el ciclo principal de while() a do...while() para evitar algunas
	ocasionales salidas inesperadas al principio de la ejecucion.
        * Se definio la funcion enviar_estadisticas() (al front-end) que es llamada
	por capturar_senial() ante SIGALRM.
        * Se redefinio TIEMPO_ALARMA como TIEMPO_ESTADISTICAS para evitar confusiones.
        * Faltaba iniciar el valor de la longitud que recibe recvfrom() en escuchar(),
	lo que a veces producia la perdida de la direccion y puerto de origen.
        * Se implement la opcion -V ("verbose") de la linea de comandos .
        * Se reemplazaron todas las llamadas a fprintf(stder,...) por la nueva 
	funcion mensaje(...) y se eliminaron varios fflush(stderr).

11-11-2002: VERSION 0.5.4 => 0.6.0
        * PROBLEMA:
	    *  error - 1 en select (): "Interrupted system call".
	* CAUSA:
	    *  Probablemente la muerte del proceso generador de la palabra 
		nula produce la seal SIG_CHLD lo que interrumpe la llamada 
		a select () (problema de race-condition en P4@1.6GHz).
	* SOLUCION:
	    *  Ignorar la seal SIG_CHLD -> signal(SIG_CHLD,SIG_IGN)
		en el padre [InicioPrincipal()].
	    *  Verificar el valor devuelto por select() [escuchar()].
    	* Se agrego la linea close(sockudp) [InicioSubproc()].
