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>