+EMUFS View (interfaz gráfica)
+\layout Section
+
+Introducción
+\layout Standard
+
+La interfaz de visualización de EMUFS permite interactuar con los distintos
+ tipos de archivos para cada conjunto de datos almacenado (ya sean facturas,
+ articulos, o notas de facturas).
+\layout Section
+
+Instalación
+\layout Standard
+
+Para poder correr la interfaz gráfica necesitará previamente compilarla
+ (así como compilar los programas auxiliares), para ello necesitará cumplir
+ con los siguiente requisitos:
+\layout Enumerate
+
+Compilador gcc versión 3.3.x preferentemente.
+ No podemos garantizar la compatibilidad con otras versiones debido a cambios
+ drásticos que sufrieron las versiones anteriores.
+\layout Enumerate
+
+Parser XML libxml2 versión 2.6.x .
+ Versiones 2.5 y anteriores son incompatibles en la API y no funcionarán.
+\layout Enumerate
+
+libncurses version 5 o superior (probado con 5.4).
+\layout Enumerate
+
+GNU Make.
+\layout Subsection
+
+Compilar GUI
+\layout Standard
+
+Para compilar la GUI solo debe ejecutar el comando make dentro del directorio
+ raíz del proyecto.
+ Esto compilará primero una biblioteca estática con los manejadores de los
+ 3 tipos de archivo y luego compilará la GUI.
+\layout LyX-Code
+
+#~/emufs/> make
+\layout Subsection
+
+Preparar el banco de pruebas
+\layout Standard
+
+Antes de comenzar a utilizar la GUI deberá generar los archivo XML desde
+ donde serán leídos los datos para generar los archivos que luego se utilizará.
+ Para ello el proceso de compilación creará 2 ejecutable : generar_fact
+ y generar_art, que se ubicarán en la carpeta generar dentro de emufs_gui.
+\layout Standard
+
+Estos programas generan facturas y artículos respectivamente en forma aleatorio,
+ utilizando diccionarios de datos para llenar los campos.
+ Primero deberá ejecutar generar_art, ya que éste último crea un diccionario
+ de artículos que luego utilizará generar_fact para los items de las facturas.
+\layout Standard
+
+Ambos programas reciben 2 parámetros : el nombre de archivo de salida y
+ la cantidad de entradas a generar.
+\layout Standard
+
+El generador de facturas fue diseñado para cumplir con los porcentajes pedidos
+ por el enunciado en algunos aspectos.
+ La cantidad de facturas por dia del mes es aleatoria.
+\layout Section
+
+Línea de comandos
+\layout Standard
+
+El programa acepta varios parámetros, algunos de ellos opcionales, otros
+ obligatorios dependiendo de las elecciones realizadas.
+\layout Standard
+
+Para obtener una completa descripción de los parámetros el programa acepta
+
+\begin_inset Quotes eld
+\end_inset
+
+-h
+\begin_inset Quotes erd
+\end_inset
+
+ o
+\begin_inset Quotes eld
+\end_inset
+
+--help
+\begin_inset Quotes erd
+\end_inset
+
+ para mostrar una ayuda en línea.
+\layout Standard
+
+Si el programa es ejecutado sin parámetros tratará de recuperar los artículos
+ y las facturas desde archivo previamente creados.
+\layout Standard
+
+Para crear un archivo de artículos a partir de un archivo XML bien formado,
+ se debe ejecutar el programa con la opción
+\begin_inset Quotes eld
+\end_inset
+
+-a
+\begin_inset Quotes erd
+\end_inset
+
+.
+ Dicha opción espera que el siguiente parámetro sea el nombre del archivo
+ a leer, y que éste útimo tenga extensión xml (notar que es solo minúsculas).
+ A continuación espera encontrar el tipo de archivo que se quiere crear,
+ pudiendo ser éste último 1, 2 ó 3.
+ De ser el tipo de archivo con bloques, se le exigirá que ingrese como último
+ parámetro el tamaño del mismo.
+\layout Standard
+
+Para crear el archivo de facturas es el mismo procedimiento, solo que utilizando
+ el parámetro
+\begin_inset Quotes eld
+\end_inset
+
+-f
+\begin_inset Quotes erd
+\end_inset
+
+.
+ Luego de los parámetros de tipo y tamaño de bloque debe especificarse el
+ tipo y tamaño de bloque para el archivo de notas.
+
+\layout Standard
+
+Debe saber que estos parámetros no son mutuamente excluyentes, por lo que
+ podrá utilizarlos al mismo tiempo.
+\layout Section
+
+Características
+\layout Standard
+
+A continuación se da una lista detallada de las operaciones que son posibles
+ hacerse desde esta interfaz :
+\layout Itemize
+
+Alta, baja y modificación de Artículos.
+ Para ello se abrirá una ventana donde se podrá editar comodamente los datos.
+\layout Itemize
+
+Alta, baja y modificación
+\begin_inset Foot
+collapsed true
+
+\layout Standard
+
+En la modificación de una factura no se podrán cambiar ni la cantidad de
+ items y los datos de los mismo!.
+ La nota si podrá ser modificada.
+\end_inset
+
+ de Facturas.
+\layout Itemize
+
+Ver registros.
+ Ver fisicamente los registros de cualquiera de los archivos sin importar
+ el tipo al que pertenezcan.
+ Desde aquí podrá tambien eliminar, agregar o modificar el registro actual.
+\layout Itemize
+
+Ver Bloques.
+ Para aquellos archivos que hallan sido creados con un tipo con bloques,
+ podrá verlos fisicamente, viendo el bloque actual y los anteriores/posteriores.
+\layout Itemize
+
+Ver las estadísticas de cada archivo según su tipo, para realizar comparativas
+\layout Itemize
+
+Cambiar el formato de cualquier tipo o parametros de archivo.
+\layout Itemize
+
+Compactar los archivos.
+\layout Section
+
+Decisiones de Diseño
+\layout Standard
+
+Durante el desarrollo se han tomado ciertas decisiones en el diseño o restriccio
+nes.
+ En este punto nos centraremos en las especificas tomadas por la interfaz
+ de visualización, y no tomaremos en cuenta las que ponen los tipos de archivo
+ por si solos.
+\layout Enumerate
+
+La cantidad de items por factura es igual a 10 para archivos de registro
+ de longitud fija y bloque parametrizado (TIPO 3).
+ Esta decición fue tomada por poner un valor típico de items que puede haber
+ en una factura, evaluando un caso de un comercio chico.
+ Como el tipo de archivo permite cortar un registro y guardarlo en varios
+ bloques consecutivos, la restricción de cantidad solo es un hecho de elección,
+ y así pusieramos 100, 1000, 10000 no habría diferencia, ya que el tipo
+ de archivo lo guardaría sin problemas.
+\layout Enumerate
+
+Si el archivo es de TIPO 3 y se agregan más de 10 items estos son truncados
+ y descartados sin aviso al usuario.
+ Esta fue una desición basada en el tiempo del proyecto.
+ De tener que validar y consultar al usuario se hubiera perdido tiempo de
+ mucho valor para completar objetivos más importantes del TP.
+\layout Enumerate
+
+Los campos son delimitados por el caracter nulo (en caso de los strings)
+ y por la longitud del tipo de dato en caso de los campos numéricos.
+ De esta forma se aprovechan las características de manejo de string en
+ C.
+\layout Section
+
+Vista de Registros
+\layout Standard
+
+Un ejemplo de vista de registros es la que se observa a continuación :
+\layout Standard
+
+
+\begin_inset Graphics
+ filename gui_ver_registros.eps
+ width 14cm
+ keepAspectRatio
+
+\end_inset
+
+
+\layout Standard
+
+Como puede verse el registro actual se ve resaltado respecto de los demás.
+ También se puede observar que en este caso (el bloque es de 2000 bytes)
+ no entra toda la información en pantalla, pero es posible desplazar utilizando
+ las teclas A y Z.
+\layout Standard
+
+Los datos binarios son convertidos a texto para ser mostrados, siendo la
+ representación elegida :
+\layout Itemize
+
+(XXX) : Representa un ID.
+ En el caso de las facturas también aparece en los datos el número de índice
+ de la nota asociada con esta representación.
+\layout Itemize
+
+{XXX} : Representa el tamaño de los datos.
+ Esto siempre y cuando el registro sea de longitud variable (TIPO1 y TIPO2).
+\layout Standard
+
+También es posible ejecutar acciones de edición sobre el registro seleccioado,
+ así como buscar por ID de registro.
+\layout Standard
+
+Cuando se procesa la información en crudo (es decir, el area de datos) algunos
+ bytes son modificados para evitar errores visuales.
+ Un caso es cuando el bytes es compuesto por 8 bits de valor 0 (caracter
+
+\backslash
+0).
+ Lo que se hace es cambiarlo por un caracter que tenga representacion visual
+ (en este caso un *).
+ Lo mismo suscede para los caracteres de control (
+\backslash
+b
+\backslash
+n
+\backslash
+r por ejemplo) y los espacion.
+ Esta política fue tomada ya que estos caracteres modifican la salida en
+ pantalla, y de no evitar su envío a la pantalla, producirían resultados
+ inesperados en la visualización.
+\layout Section
+
+Bugs conocidos
+\layout Standard
+
+A continuación se enumera los errores que sabemos que existen, que no hemos
+ tenido tiempo de corregir, pero que no hacen al TP en sí :
+\layout Enumerate
+
+Si la consola o terminal cambia de tamaño la GUI no sigue el nuevo tamaño,
+ pudiendose producir defectos visuales.
+ Esto es debido a que se debe capturar una señal que envia el SO, pero no
+ pudimos hacer que funciones con todas las terminales bajo X, por lo que
+ se decidio dejarlo para cuando tengamos tiempo.
+\layout Enumerate
+
+Si la GUI fue compilada con -DDEBUG y no se utiliza un PIPE para redirigir
+ la salida de error estandar, es posible que algun componente del programa
+ emita un mensaje de debug o warning y esta cause defectos de visualización
+ o el programa deje directamente de funcionar.
+ Esto es un defecto de la biblioteca NCurses.
+\layout Enumerate
+
+Cuando se cargan datos desde el XML y este contiene caracteres extendidos,
+ estos son mostrados en UTF8 en la pantalla.
+ Si no posee una consola configurada en UTF8 verá los caracteres extendidos
+ en su representación ASCII (2 caracteres por cada caracter extendido).
+ Esto se da a causa de que la LibXml maneja de forma interna todo en UTF8
+ sin importar el encoding declarado en el XML.
+ El encoding solo lo tienen en cuenta para guado se guarde.
+ No nos hemos tomado el trabajo de hacer la conversión solo por cuestiones
+ de tiempo.
+\layout Chapter
+