Annotation of ADD_ver_10/Source Code/Source Files/GUI.c, revision 1.1

1.1     ! rico        1: /********************************************************************/
        !             2: /*  GUI.c                                                           */
        !             3: /*                                                                  */
        !             4: /*  Copyright (c) 1997-2006 Rafael Rico      (rafael.rico@uah.es)   */
        !             5: /*                                                                  */
        !             6: /*  This file is part of ADD version 5.10.                          */
        !             7: /*                                                                  */
        !             8: /*  ADD is free software; you can redistribute it and/or modify     */
        !             9: /*  it under the terms of the GNU General Public License as         */
        !            10: /*  published by the Free Software Foundation; either version 2 of  */
        !            11: /*  the License, or (at your option) any later version.             */
        !            12: /*                                                                  */
        !            13: /*  ADD is distributed in the hope that it will be useful,          */
        !            14: /*  but WITHOUT ANY WARRANTY; without even the implied warranty of  */
        !            15: /*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   */
        !            16: /*  GNU General Public License for more details.                    */
        !            17: /*                                                                  */
        !            18: /*  You should have received a copy of the GNU General Public       */
        !            19: /*  License along with ADD; if not, write to the Free Software      */
        !            20: /*  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA        */
        !            21: /*  02111-1307  USA                                                 */
        !            22: /*                                                                  */
        !            23: /*  --------------------------- History --------------------------- */
        !            24: /*                                                                  */
        !            25: /*  Revision 1.3. 02/2006                                           */
        !            26: /*  Improve interactive presentation in screen                      */
        !            27: /*                                                                  */
        !            28: /*  Revision 1.2. 01/2006                                           */
        !            29: /*  Added GPL License and JavaDoc style documentation               */
        !            30: /*                                                                  */
        !            31: /*  Revision 1.1. 09/2005                                           */
        !            32: /*  Initial Revision                                                */
        !            33: /*                                                                  */
        !            34: /********************************************************************/
        !            35: 
        !            36: /******************************************************************************/
        !            37: /* MÓDULO: GUI.c                                                              */
        !            38: /*                                                                            */
        !            39: /* Este módulo contiene las funciones de presentación visual.                 */
        !            40: /******************************************************************************/
        !            41: /* Fecha: 16 de septiembre de 2005                                            */
        !            42: /******************************************************************************/
        !            43: 
        !            44: #include <stdio.h>
        !            45: #include <string.h>
        !            46: #include <time.h>
        !            47: 
        !            48: #include "defines.h"
        !            49: #include "tipos.h"
        !            50: #include "gui.h"
        !            51: 
        !            52: 
        !            53: /* configuración */
        !            54: extern struct argumentos configuracion;
        !            55: 
        !            56: /* contadores de instrucciones y ventanas */
        !            57: extern unsigned long instruccion, ventana;
        !            58: 
        !            59: 
        !            60: /* esta función presenta en la pantalla información acerca del análisis en curso */
        !            61: void PresentarConfiguracionPantalla()
        !            62: {
        !            63:     /* información sobre origen de datos y rango a procesar */
        !            64:     printf("Procesando %s en '%s' (rango %2.2f%% desde %2.2f%%)\n\n", 
        !            65:             configuracion.origen==TRAZA ? "traza":"secuencia", 
        !            66:             configuracion.ficherodatos, 
        !            67:             configuracion.rango,
        !            68:             configuracion.comienzo);
        !            69: 
        !            70:     /* información sobre el tamaño de la ventana de instrucciones */
        !            71:     printf("Tamaño de la ventana = %d instrucciones\n\n", configuracion.ventana);
        !            72:     
        !            73:     /* información sobre las contribuciones a tener en cuenta en */ 
        !            74:     /* la composición de dependencias de datos */
        !            75:     printf("Mapa de composción de dependencias:\n");
        !            76:     printf("(T A O) (E I) (D A S C)\n");
        !            77: 
        !            78:     printf("(%c %c %c) (%c %c) (%c %c %c %c)", 
        !            79:         configuracion.verdaderas==SI ? 'x':'o',
        !            80:         configuracion.antidependencias==SI ? 'x':'o',
        !            81:         configuracion.salida==SI ? 'x':'o',
        !            82:         configuracion.explicitos==SI ? 'x':'o',
        !            83:         configuracion.implicitos==SI ? 'x':'o',
        !            84:         configuracion.datos==SI ? 'x':'o',
        !            85:         configuracion.direcciones==SI ? 'x':'o',
        !            86:         configuracion.pila==SI ? 'x':'o',
        !            87:         configuracion.cc==SI ? 'x':'o');
        !            88: 
        !            89:     printf("\n\n");
        !            90: }
        !            91: 
        !            92: 
        !            93: /* esta función muestra información acerca del procesamiento en curso */
        !            94: 
        !            95: void MostrarCabecera()
        !            96: {
        !            97:     if(configuracion.origen != CADENAHEX)
        !            98:     {
        !            99:         printf("ADD 5.10 --Analizador de Dependencias de Datos--\n\n");
        !           100:         
        !           101:         /*
        !           102:         printf("Procesando %s en '%s' (rango %2.2f%%)\n\n", 
        !           103:             configuracion.origen==TRAZA ? "traza":"secuencia", 
        !           104:             configuracion.ficherodatos, 
        !           105:             configuracion.rango);
        !           106:         */
        !           107: 
        !           108:         PresentarConfiguracionPantalla();
        !           109:     }
        !           110: }
        !           111: 
        !           112: 
        !           113: /* esta función muestra el estado de procesamiento */
        !           114: 
        !           115: void PresentarEstadoProcesamiento(unsigned long total, unsigned long encurso)
        !           116: {
        !           117:     time_t tiempo;
        !           118:     struct tm *ptr_tm;
        !           119:     char fechahora[40];
        !           120: 
        !           121:     static char paso25;   /* flags para indicar estado de procesamiento */
        !           122:     static char paso50;
        !           123:     static char paso75;
        !           124: 
        !           125:     /* inicializo los flags la primera vez */
        !           126:     if(encurso == 1) {paso25=SI; paso50=SI; paso75=SI;}
        !           127:     
        !           128:     if(paso75==SI)
        !           129:     {
        !           130:         if(paso50==SI)
        !           131:         {
        !           132:             if(paso25==SI)
        !           133:             {
        !           134:                 if(((double)encurso/total) > 0.25) 
        !           135:                 {
        !           136:                     /* fecha y hora */
        !           137:                     tiempo = time(NULL);
        !           138:                     ptr_tm = localtime(&tiempo);
        !           139:                     strftime(fechahora, MAX_LINE, "%d/%m/%y %H:%M", ptr_tm);
        !           140:                     printf("Completado el 25%%  [%s]\n", fechahora);
        !           141:                     paso25=NO;
        !           142:                 }
        !           143:             }
        !           144:             else
        !           145:             {
        !           146:                 if(((double)encurso/total) > 0.50) 
        !           147:                 {
        !           148:                     /* fecha y hora */
        !           149:                     tiempo = time(NULL);
        !           150:                     ptr_tm = localtime(&tiempo);
        !           151:                     strftime(fechahora, MAX_LINE, "%d/%m/%y %H:%M", ptr_tm);
        !           152:                     printf("Completado el 50%%  [%s]\n", fechahora);
        !           153:                     paso50=NO;
        !           154:                 }
        !           155:             }
        !           156:         }
        !           157:         else
        !           158:         {
        !           159:             if(((double)encurso/total) > 0.75) 
        !           160:             {
        !           161:                 /* fecha y hora */
        !           162:                 tiempo = time(NULL);
        !           163:                 ptr_tm = localtime(&tiempo);
        !           164:                 strftime(fechahora, MAX_LINE, "%d/%m/%y %H:%M", ptr_tm);
        !           165:                 printf("Completado el 75%%  [%s]\n", fechahora);
        !           166:                 paso75=NO;
        !           167:             }
        !           168:         }
        !           169:     }
        !           170: }
        !           171: 
        !           172: 
        !           173: /* esta función muestra en la pantalla la información de la tarjeta de operandos */
        !           174: 
        !           175: void MostrarTarjeta(fichainstruccion *tarjetaoperandos)
        !           176: {
        !           177:     /* imprimo la tarjeta de la instrucción para ver si funciona bien */
        !           178:     
        !           179:     int i;
        !           180:     unsigned long total;
        !           181:     char cadena[MAX_LINE];
        !           182: 
        !           183:     /* todo esto no funciona aquí */
        !           184:     /* printf("\x01B[2J"); */   /* código de escape ANSI para borrar la pantalla */
        !           185:     /* printf("\027[2J");  */   /* código de escape ANSI para borrar la pantalla */
        !           186:     /* printf("%c[2J", 27);*/   /* código de escape ANSI para borrar la pantalla */
        !           187:     /* printf("\033[2J");  */ 
        !           188: 
        !           189:     printf("\n");
        !           190:     total = configuracion.ultima - configuracion.primera + 1;
        !           191:     i = printf("-| instruccion %lu de %lu (%.2f%%) |", instruccion, total, 100.00*instruccion/total);
        !           192:     /* parece que '.2' redondea algo hacia arriba (llegamos al 100% cuando estamos en 99.99%) */
        !           193:     i += printf("-| ventana %lu de %lu (%d ins/ven) |", ventana, total/configuracion.ventana, configuracion.ventana);
        !           194:     for(i; i<80; i++) printf("-");
        !           195: 
        !           196:     printf("%-14s  ", tarjetaoperandos->hexadecimal);
        !           197: 
        !           198:     /* formato de instrucción (notación de INTEL) */
        !           199:     /*
        !           200:     printf("%s%s", tarjetaoperandos->prefijo, tarjetaoperandos->prefijo[0]!='\0' ? " ":"");
        !           201: 
        !           202:     printf("%s", tarjetaoperandos->nemonico);
        !           203:     printf("%s%s", tarjetaoperandos->op1[0]!='\0' ? " ":"", tarjetaoperandos->op1);
        !           204:     printf("%s%s%s", (tarjetaoperandos->op1[0]!='\0' && tarjetaoperandos->op2[0]!='\0') ? ",":"", tarjetaoperandos->op2[0]!='\0' ? " ":"", tarjetaoperandos->op2);
        !           205:     */
        !           206:     /* igual con la función del módulo 'Auxiliares.c' */
        !           207:     CadenaEnsamblador(tarjetaoperandos->prefijo, tarjetaoperandos->nemonico, tarjetaoperandos->op1, tarjetaoperandos->op2, INTEL, cadena);
        !           208:     printf("%s", cadena);
        !           209: 
        !           210:     printf("   ");
        !           211:     
        !           212:     printf("(long:%d", tarjetaoperandos->longitud);
        !           213:     switch(tarjetaoperandos->salto)
        !           214:     {
        !           215:         case INCONDICIONAL:
        !           216:         printf(" salto:INCONDICIONAL");
        !           217:         break;
        !           218: 
        !           219:         case NO_SALTO:
        !           220:         printf(" salto:NO SALTO");
        !           221:         break;
        !           222: 
        !           223:         case TOMADO:
        !           224:         printf(" salto:TOMADO");
        !           225:         break;
        !           226: 
        !           227:         case NOTOMADO:
        !           228:         printf(" salto:NO TOMADO");
        !           229:         break;
        !           230:     }
        !           231: 
        !           232:     printf(" ALU=%d", tarjetaoperandos->ciclosALU);
        !           233:     printf(" BIU=%d)\n", tarjetaoperandos->ciclosBIU);
        !           234: 
        !           235:     printf("\nExpl leido datos:    %s", tarjetaoperandos->leidoexpldatos);
        !           236:     printf("\nExpl leido dir:      %s", tarjetaoperandos->leidoexpldir);
        !           237:     printf("\nExpl leido pila:     %s", tarjetaoperandos->leidoexplpila);
        !           238:     printf("\nExpl leido estado:   %s", tarjetaoperandos->leidoexplestado);
        !           239:     printf("\nExpl escrito datos:  %s", tarjetaoperandos->escritoexpldatos);
        !           240:     printf("\nExpl escrito dir:    %s", tarjetaoperandos->escritoexpldir);
        !           241:     printf("\nExpl escrito pila:   %s", tarjetaoperandos->escritoexplpila);
        !           242:     printf("\nExpl escrito estado: %s", tarjetaoperandos->escritoexplestado);
        !           243:     printf("\nImpl leido datos:    %s", tarjetaoperandos->leidoimpldatos);
        !           244:     printf("\nImpl leido dir:      %s", tarjetaoperandos->leidoimpldir);
        !           245:     printf("\nImpl leido pila:     %s", tarjetaoperandos->leidoimplpila);
        !           246:     printf("\nImpl leido estado:   %s", tarjetaoperandos->leidoimplestado);
        !           247:     printf("\nImpl escrito datos:  %s", tarjetaoperandos->escritoimpldatos);
        !           248:     printf("\nImpl escrito dir:    %s", tarjetaoperandos->escritoimpldir);
        !           249:     printf("\nImpl escrito pila:   %s", tarjetaoperandos->escritoimplpila);
        !           250:     printf("\nImpl escrito estado: %s", tarjetaoperandos->escritoimplestado);
        !           251: 
        !           252:     printf("\n");
        !           253: 
        !           254:     getchar();
        !           255: }
        !           256: 
        !           257: 
        !           258: 
        !           259: /* esta función muestra en la pantalla la información relativa a la ventana en curso */
        !           260: 
        !           261: void MostrarVentana()
        !           262: {
        !           263:     printf("\nEsta función no ha sido implementada\n");
        !           264: }
        !           265: 
        !           266: 

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