File:  [Repository ATC2] / ADD_ver_10 / Source Code / Source Files / GUI.c
Revision 1.3: download - view: text, annotated - select for diffs
Mon Jul 17 18:26:27 2006 UTC (18 years, 2 months ago) by rico
Branches: MAIN
CVS tags: HEAD
*** empty log message ***

/********************************************************************/
/*  GUI.c                                                           */
/*                                                                  */
/*                                                                  */
/*  Copyright (c) 1997-2006 Rafael Rico      (rafael.rico@uah.es)   */
/*                                                                  */
/*  Este fichero forma parte de ADD                                 */
/*  (Analizador de Dependencias de Datos)                           */
/*  Version 5.10.                                                   */
/*                                                                  */
/*                                                                  */
/*  ADD es software libre. Puede redistribuirlo y/o modificarlo     */
/*  bajo los términos de la Licencia Pública General de GNU         */
/*  según es publicada por la Free Software Foundation, bien bajo   */
/*  la versión 2 de dicha Licencia o bien (según su elección)       */
/*  bajo cualquier versión posterior.                               */
/*                                                                  */
/*  ADD se distribuye con la esperanza de que sea útil,             */
/*  pero SIN NINGUNA GARANTÍA, incluso sin la garantía MERCANTIL    */
/*  implícita y sin garantizar la CONVENIENCIA PARA UN PROPÓSITO    */
/*  PARTICULAR. Véase la Licencia Pública General de GNU para       */
/*  más detalles.                                                   */
/*                                                                  */
/*  Debería haber recibido una copia de la Licencia Pública General */
/*  junto con ADD. Si no ha sido así, escriba a la Free Software    */
/*  Foundation, Inc., 51 Franklin St, Fifth Floor,                  */
/*  Boston, MA  02110-1301  EEUU.                                   */
/*                                                                  */
/*  -------------------------- Historia --------------------------- */
/*                                                                  */
/*  $Id: GUI.c,v 1.3 2006/07/17 18:26:27 rico Exp $ */
/*                                                                  */
/*  Revisión 1.2. 01/2006                                           */
/*  Se añade la licencia GPL y documentación en estilo Javadoc      */
/*                                                                  */
/*  Revisión 1.1. 09/2005                                           */
/*  Versión inicial                                                 */
/*                                                                  */
/********************************************************************/

/******************************************************************************/
/* MÓDULO: GUI.c                                                              */
/*                                                                            */
/* Este módulo contiene las funciones de presentación visual.                 */
/******************************************************************************/
/* Fecha: 16 de septiembre de 2005                                            */
/******************************************************************************/

#include <stdio.h>
#include <string.h>
#include <time.h>

#include "defines.h"
#include "tipos.h"
#include "gui.h"


/* configuración */
extern struct argumentos configuracion;

/* contadores de instrucciones y ventanas */
extern unsigned long instruccion, ventana;

/* esta función presenta en la pantalla el anuncio de software libre GPL en castellano */
void PresentarAnuncioGPL_Castellano()
{
    printf("   O   DDD  DDD  \n");
    printf("  / \\  D  D D  D \n");
    printf(" O---O D  D D  D \n");
    printf(" |   | DDD  DDD  \n");
    printf(" ___________________________________\n");
    printf(" Analizador de Dependencias de Datos\n");
    printf(" Versión 5.10\n\n");
    printf(" Copyright (C) 1997-2006 Rafael Rico\n\n"); 
    printf(" ADD es software libre, publicado bajo\n");
    printf(" la Licencia Pública General GNU\n\n\n");
}

/* esta función presenta en la pantalla el anuncio de software libre GPL en inglés */
void PresentarAnuncioGPL_Ingles()
{
    printf("   O   DDD  DDD  \n");
    printf("  / \\  D  D D  D \n");
    printf(" O---O D  D D  D \n");
    printf(" |   | DDD  DDD  \n");
    printf(" _________________________\n");
    printf(" Data Dependences Analyzer\n");
    printf(" Version 5.10\n\n");
    printf(" Copyright (C) 1997-2006 Rafael Rico\n\n"); 
    printf(" ADD is free software, realesed under\n");
    printf(" the GNU General Public License\n\n\n");
}

/* esta función presenta en la pantalla información acerca del análisis en curso */
void PresentarConfiguracionPantalla()
{
    /* información sobre origen de datos */
    printf(" Procesando %s en '%s'\n\n", 
            configuracion.origen==TRAZA ? "traza":"secuencia", 
            configuracion.ficherodatos); 

    /* información sobre rango a procesar */
    printf(" Rango %2.2f%% desde %2.2f%%\n\n", 
            configuracion.rango,
            configuracion.comienzo);

    /* información sobre el tamaño de la ventana de instrucciones */
    printf(" Tamaño de ventana = %d instrucciones\n\n", configuracion.ventana);
    
    /* información sobre las contribuciones a tener en cuenta en */ 
    /* la composición de dependencias de datos */
    printf(" Mapa de composición de dependencias:\n");
    printf(" (T A O) (E I) (D A S C)\n");

    printf(" (%c %c %c) (%c %c) (%c %c %c %c)", 
        configuracion.verdaderas==SI ? 'x':'o',
        configuracion.antidependencias==SI ? 'x':'o',
        configuracion.salida==SI ? 'x':'o',
        configuracion.explicitos==SI ? 'x':'o',
        configuracion.implicitos==SI ? 'x':'o',
        configuracion.datos==SI ? 'x':'o',
        configuracion.direcciones==SI ? 'x':'o',
        configuracion.pila==SI ? 'x':'o',
        configuracion.cc==SI ? 'x':'o');

    printf("\n\n");
}


/* esta función muestra información acerca del procesamiento en curso */

void MostrarCabecera()
{
    if(configuracion.origen != CADENAHEX)
    {
        /*
        printf("ADD 5.10 --Analizador de Dependencias de Datos--\n\n");
        */

        PresentarAnuncioGPL_Castellano();

        /*
        PresentarAnuncioGPL_Ingles();
        */
        
        /*
        printf("Procesando %s en '%s' (rango %2.2f%%)\n\n", 
            configuracion.origen==TRAZA ? "traza":"secuencia", 
            configuracion.ficherodatos, 
            configuracion.rango);
        */

        PresentarConfiguracionPantalla();
    }
}


/* esta función muestra el estado de procesamiento */

void PresentarEstadoProcesamiento(unsigned long total, unsigned long encurso)
{
    time_t tiempo;
    struct tm *ptr_tm;
    char fechahora[40];

    static char paso25;   /* flags para indicar estado de procesamiento */
    static char paso50;
    static char paso75;

    /* inicializo los flags la primera vez y escribo la hora de comienzo */
    if(encurso == 1)
    {
        paso25=SI; paso50=SI; paso75=SI;
        /* fecha y hora */
        tiempo = time(NULL);
        ptr_tm = localtime(&tiempo);
        strftime(fechahora, MAX_LINE, "%d/%m/%y %H:%M", ptr_tm);
        printf(" Hora de comienzo   [%s]\n", fechahora);
    }
    
    if(paso75==SI)
    {
        if(paso50==SI)
        {
            if(paso25==SI)
            {
                if(((double)encurso/total) > 0.25) 
                {
                    /* fecha y hora */
                    tiempo = time(NULL);
                    ptr_tm = localtime(&tiempo);
                    strftime(fechahora, MAX_LINE, "%d/%m/%y %H:%M", ptr_tm);
                    printf(" Completado el 25%%  [%s]\n", fechahora);
                    paso25=NO;
                }
            }
            else
            {
                if(((double)encurso/total) > 0.50) 
                {
                    /* fecha y hora */
                    tiempo = time(NULL);
                    ptr_tm = localtime(&tiempo);
                    strftime(fechahora, MAX_LINE, "%d/%m/%y %H:%M", ptr_tm);
                    printf(" Completado el 50%%  [%s]\n", fechahora);
                    paso50=NO;
                }
            }
        }
        else
        {
            if(((double)encurso/total) > 0.75) 
            {
                /* fecha y hora */
                tiempo = time(NULL);
                ptr_tm = localtime(&tiempo);
                strftime(fechahora, MAX_LINE, "%d/%m/%y %H:%M", ptr_tm);
                printf(" Completado el 75%%  [%s]\n", fechahora);
                paso75=NO;
            }
        }
    }
}


/* esta función muestra en la pantalla la información de la tarjeta de operandos */

void MostrarTarjeta(fichainstruccion *tarjetaoperandos)
{
    /* imprimo la tarjeta de la instrucción para ver si funciona bien */
    
    int i;
    unsigned long total;
    char cadena[MAX_LINE];

    /* todo esto no funciona aquí */
    /* printf("\x01B[2J"); */   /* código de escape ANSI para borrar la pantalla */
    /* printf("\027[2J");  */   /* código de escape ANSI para borrar la pantalla */
    /* printf("%c[2J", 27);*/   /* código de escape ANSI para borrar la pantalla */
    /* printf("\033[2J");  */ 

    printf("\n");
    total = configuracion.ultima - configuracion.primera + 1;
    i = printf("-| instruccion %lu de %lu (%.2f%%) |", instruccion, total, 100.00*instruccion/total);
    /* parece que '.2' redondea algo hacia arriba (llegamos al 100% cuando estamos en 99.99%) */
    i += printf("-| ventana %lu de %lu (%d ins/ven) |", ventana, total/configuracion.ventana, configuracion.ventana);
    for(i; i<80; i++) printf("-");

    printf("%-14s  ", tarjetaoperandos->hexadecimal);

    /* formato de instrucción (notación de INTEL) */
    /*
    printf("%s%s", tarjetaoperandos->prefijo, tarjetaoperandos->prefijo[0]!='\0' ? " ":"");

    printf("%s", tarjetaoperandos->nemonico);
    printf("%s%s", tarjetaoperandos->op1[0]!='\0' ? " ":"", tarjetaoperandos->op1);
    printf("%s%s%s", (tarjetaoperandos->op1[0]!='\0' && tarjetaoperandos->op2[0]!='\0') ? ",":"", tarjetaoperandos->op2[0]!='\0' ? " ":"", tarjetaoperandos->op2);
    */
    /* igual con la función del módulo 'Auxiliares.c' */
    CadenaEnsamblador(tarjetaoperandos->prefijo, tarjetaoperandos->nemonico, tarjetaoperandos->op1, tarjetaoperandos->op2, INTEL, cadena);
    printf("%s", cadena);

    printf("   ");
    
    printf("(long:%d", tarjetaoperandos->longitud);
    switch(tarjetaoperandos->salto)
    {
        case INCONDICIONAL:
        printf(" salto:INCONDICIONAL");
        break;

        case NO_SALTO:
        printf(" salto:NO SALTO");
        break;

        case TOMADO:
        printf(" salto:TOMADO");
        break;

        case NOTOMADO:
        printf(" salto:NO TOMADO");
        break;
    }

    printf(" ALU=%d", tarjetaoperandos->ciclosALU);
    printf(" BIU=%d)\n", tarjetaoperandos->ciclosBIU);

    printf("\nExpl leido datos:    %s", tarjetaoperandos->leidoexpldatos);
    printf("\nExpl leido dir:      %s", tarjetaoperandos->leidoexpldir);
    printf("\nExpl leido pila:     %s", tarjetaoperandos->leidoexplpila);
    printf("\nExpl leido estado:   %s", tarjetaoperandos->leidoexplestado);
    printf("\nExpl escrito datos:  %s", tarjetaoperandos->escritoexpldatos);
    printf("\nExpl escrito dir:    %s", tarjetaoperandos->escritoexpldir);
    printf("\nExpl escrito pila:   %s", tarjetaoperandos->escritoexplpila);
    printf("\nExpl escrito estado: %s", tarjetaoperandos->escritoexplestado);
    printf("\nImpl leido datos:    %s", tarjetaoperandos->leidoimpldatos);
    printf("\nImpl leido dir:      %s", tarjetaoperandos->leidoimpldir);
    printf("\nImpl leido pila:     %s", tarjetaoperandos->leidoimplpila);
    printf("\nImpl leido estado:   %s", tarjetaoperandos->leidoimplestado);
    printf("\nImpl escrito datos:  %s", tarjetaoperandos->escritoimpldatos);
    printf("\nImpl escrito dir:    %s", tarjetaoperandos->escritoimpldir);
    printf("\nImpl escrito pila:   %s", tarjetaoperandos->escritoimplpila);
    printf("\nImpl escrito estado: %s", tarjetaoperandos->escritoimplestado);

    printf("\n");

    getchar();
}



/* esta función muestra en la pantalla la información relativa a la ventana en curso */

void MostrarVentana()
{
    printf("\nEsta función no ha sido implementada\n");
}



FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>