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

1.1       rico        1: /********************************************************************/
                      2: /*  GUI.c                                                           */
                      3: /*                                                                  */
1.2       rico        4: /*                                                                  */
1.1       rico        5: /*  Copyright (c) 1997-2006 Rafael Rico      (rafael.rico@uah.es)   */
                      6: /*                                                                  */
1.2       rico        7: /*  Este fichero forma parte de ADD                                 */
                      8: /*  (Analizador de Dependencias de Datos)                           */
                      9: /*  Version 5.10.                                                   */
                     10: /*                                                                  */
1.1       rico       11: /*                                                                  */
1.2       rico       12: /*  ADD es software libre. Puede redistribuirlo y/o modificarlo     */
                     13: /*  bajo los términos de la Licencia Pública General de GNU         */
                     14: /*  según es publicada por la Free Software Foundation, bien bajo   */
                     15: /*  la versión 2 de dicha Licencia o bien (según su elección)       */
                     16: /*  bajo cualquier versión posterior.                               */
1.1       rico       17: /*                                                                  */
1.2       rico       18: /*  ADD se distribuye con la esperanza de que sea útil,             */
                     19: /*  pero SIN NINGUNA GARANTÍA, incluso sin la garantía MERCANTIL    */
                     20: /*  implícita y sin garantizar la CONVENIENCIA PARA UN PROPÓSITO    */
                     21: /*  PARTICULAR. Véase la Licencia Pública General de GNU para       */
                     22: /*  más detalles.                                                   */
1.1       rico       23: /*                                                                  */
1.2       rico       24: /*  Debería haber recibido una copia de la Licencia Pública General */
                     25: /*  junto con ADD. Si no ha sido así, escriba a la Free Software    */
                     26: /*  Foundation, Inc., 51 Franklin St, Fifth Floor,                  */
                     27: /*  Boston, MA  02110-1301  EEUU.                                   */
1.1       rico       28: /*                                                                  */
1.2       rico       29: /*  -------------------------- Historia --------------------------- */
1.1       rico       30: /*                                                                  */
1.3     ! rico       31: /*  $Id: GUI.c,v 1.2 2006/02/28 14:54:21 rico Exp $ */
1.1       rico       32: /*                                                                  */
1.2       rico       33: /*  Revisión 1.2. 01/2006                                           */
                     34: /*  Se añade la licencia GPL y documentación en estilo Javadoc      */
1.1       rico       35: /*                                                                  */
1.2       rico       36: /*  Revisión 1.1. 09/2005                                           */
                     37: /*  Versión inicial                                                 */
1.1       rico       38: /*                                                                  */
                     39: /********************************************************************/
                     40: 
                     41: /******************************************************************************/
                     42: /* MÓDULO: GUI.c                                                              */
                     43: /*                                                                            */
                     44: /* Este módulo contiene las funciones de presentación visual.                 */
                     45: /******************************************************************************/
                     46: /* Fecha: 16 de septiembre de 2005                                            */
                     47: /******************************************************************************/
                     48: 
                     49: #include <stdio.h>
                     50: #include <string.h>
                     51: #include <time.h>
                     52: 
                     53: #include "defines.h"
                     54: #include "tipos.h"
                     55: #include "gui.h"
                     56: 
                     57: 
                     58: /* configuración */
                     59: extern struct argumentos configuracion;
                     60: 
                     61: /* contadores de instrucciones y ventanas */
                     62: extern unsigned long instruccion, ventana;
                     63: 
1.3     ! rico       64: /* esta función presenta en la pantalla el anuncio de software libre GPL en castellano */
        !            65: void PresentarAnuncioGPL_Castellano()
        !            66: {
        !            67:     printf("   O   DDD  DDD  \n");
        !            68:     printf("  / \\  D  D D  D \n");
        !            69:     printf(" O---O D  D D  D \n");
        !            70:     printf(" |   | DDD  DDD  \n");
        !            71:     printf(" ___________________________________\n");
        !            72:     printf(" Analizador de Dependencias de Datos\n");
        !            73:     printf(" Versión 5.10\n\n");
        !            74:     printf(" Copyright (C) 1997-2006 Rafael Rico\n\n"); 
        !            75:     printf(" ADD es software libre, publicado bajo\n");
        !            76:     printf(" la Licencia Pública General GNU\n\n\n");
        !            77: }
        !            78: 
        !            79: /* esta función presenta en la pantalla el anuncio de software libre GPL en inglés */
        !            80: void PresentarAnuncioGPL_Ingles()
        !            81: {
        !            82:     printf("   O   DDD  DDD  \n");
        !            83:     printf("  / \\  D  D D  D \n");
        !            84:     printf(" O---O D  D D  D \n");
        !            85:     printf(" |   | DDD  DDD  \n");
        !            86:     printf(" _________________________\n");
        !            87:     printf(" Data Dependences Analyzer\n");
        !            88:     printf(" Version 5.10\n\n");
        !            89:     printf(" Copyright (C) 1997-2006 Rafael Rico\n\n"); 
        !            90:     printf(" ADD is free software, realesed under\n");
        !            91:     printf(" the GNU General Public License\n\n\n");
        !            92: }
1.1       rico       93: 
                     94: /* esta función presenta en la pantalla información acerca del análisis en curso */
                     95: void PresentarConfiguracionPantalla()
                     96: {
1.2       rico       97:     /* información sobre origen de datos */
1.3     ! rico       98:     printf(" Procesando %s en '%s'\n\n", 
1.1       rico       99:             configuracion.origen==TRAZA ? "traza":"secuencia", 
1.2       rico      100:             configuracion.ficherodatos); 
                    101: 
                    102:     /* información sobre rango a procesar */
1.3     ! rico      103:     printf(" Rango %2.2f%% desde %2.2f%%\n\n", 
1.1       rico      104:             configuracion.rango,
                    105:             configuracion.comienzo);
                    106: 
                    107:     /* información sobre el tamaño de la ventana de instrucciones */
1.3     ! rico      108:     printf(" Tamaño de ventana = %d instrucciones\n\n", configuracion.ventana);
1.1       rico      109:     
                    110:     /* información sobre las contribuciones a tener en cuenta en */ 
                    111:     /* la composición de dependencias de datos */
1.3     ! rico      112:     printf(" Mapa de composición de dependencias:\n");
        !           113:     printf(" (T A O) (E I) (D A S C)\n");
1.1       rico      114: 
1.3     ! rico      115:     printf(" (%c %c %c) (%c %c) (%c %c %c %c)", 
1.1       rico      116:         configuracion.verdaderas==SI ? 'x':'o',
                    117:         configuracion.antidependencias==SI ? 'x':'o',
                    118:         configuracion.salida==SI ? 'x':'o',
                    119:         configuracion.explicitos==SI ? 'x':'o',
                    120:         configuracion.implicitos==SI ? 'x':'o',
                    121:         configuracion.datos==SI ? 'x':'o',
                    122:         configuracion.direcciones==SI ? 'x':'o',
                    123:         configuracion.pila==SI ? 'x':'o',
                    124:         configuracion.cc==SI ? 'x':'o');
                    125: 
                    126:     printf("\n\n");
                    127: }
                    128: 
                    129: 
                    130: /* esta función muestra información acerca del procesamiento en curso */
                    131: 
                    132: void MostrarCabecera()
                    133: {
                    134:     if(configuracion.origen != CADENAHEX)
                    135:     {
1.3     ! rico      136:         /*
1.1       rico      137:         printf("ADD 5.10 --Analizador de Dependencias de Datos--\n\n");
1.3     ! rico      138:         */
        !           139: 
        !           140:         PresentarAnuncioGPL_Castellano();
        !           141: 
        !           142:         /*
        !           143:         PresentarAnuncioGPL_Ingles();
        !           144:         */
1.1       rico      145:         
                    146:         /*
                    147:         printf("Procesando %s en '%s' (rango %2.2f%%)\n\n", 
                    148:             configuracion.origen==TRAZA ? "traza":"secuencia", 
                    149:             configuracion.ficherodatos, 
                    150:             configuracion.rango);
                    151:         */
                    152: 
                    153:         PresentarConfiguracionPantalla();
                    154:     }
                    155: }
                    156: 
                    157: 
                    158: /* esta función muestra el estado de procesamiento */
                    159: 
                    160: void PresentarEstadoProcesamiento(unsigned long total, unsigned long encurso)
                    161: {
                    162:     time_t tiempo;
                    163:     struct tm *ptr_tm;
                    164:     char fechahora[40];
                    165: 
                    166:     static char paso25;   /* flags para indicar estado de procesamiento */
                    167:     static char paso50;
                    168:     static char paso75;
                    169: 
1.2       rico      170:     /* inicializo los flags la primera vez y escribo la hora de comienzo */
                    171:     if(encurso == 1)
                    172:     {
                    173:         paso25=SI; paso50=SI; paso75=SI;
                    174:         /* fecha y hora */
                    175:         tiempo = time(NULL);
                    176:         ptr_tm = localtime(&tiempo);
                    177:         strftime(fechahora, MAX_LINE, "%d/%m/%y %H:%M", ptr_tm);
1.3     ! rico      178:         printf(" Hora de comienzo   [%s]\n", fechahora);
1.2       rico      179:     }
1.1       rico      180:     
                    181:     if(paso75==SI)
                    182:     {
                    183:         if(paso50==SI)
                    184:         {
                    185:             if(paso25==SI)
                    186:             {
                    187:                 if(((double)encurso/total) > 0.25) 
                    188:                 {
                    189:                     /* fecha y hora */
                    190:                     tiempo = time(NULL);
                    191:                     ptr_tm = localtime(&tiempo);
                    192:                     strftime(fechahora, MAX_LINE, "%d/%m/%y %H:%M", ptr_tm);
1.3     ! rico      193:                     printf(" Completado el 25%%  [%s]\n", fechahora);
1.1       rico      194:                     paso25=NO;
                    195:                 }
                    196:             }
                    197:             else
                    198:             {
                    199:                 if(((double)encurso/total) > 0.50) 
                    200:                 {
                    201:                     /* fecha y hora */
                    202:                     tiempo = time(NULL);
                    203:                     ptr_tm = localtime(&tiempo);
                    204:                     strftime(fechahora, MAX_LINE, "%d/%m/%y %H:%M", ptr_tm);
1.3     ! rico      205:                     printf(" Completado el 50%%  [%s]\n", fechahora);
1.1       rico      206:                     paso50=NO;
                    207:                 }
                    208:             }
                    209:         }
                    210:         else
                    211:         {
                    212:             if(((double)encurso/total) > 0.75) 
                    213:             {
                    214:                 /* fecha y hora */
                    215:                 tiempo = time(NULL);
                    216:                 ptr_tm = localtime(&tiempo);
                    217:                 strftime(fechahora, MAX_LINE, "%d/%m/%y %H:%M", ptr_tm);
1.3     ! rico      218:                 printf(" Completado el 75%%  [%s]\n", fechahora);
1.1       rico      219:                 paso75=NO;
                    220:             }
                    221:         }
                    222:     }
                    223: }
                    224: 
                    225: 
                    226: /* esta función muestra en la pantalla la información de la tarjeta de operandos */
                    227: 
                    228: void MostrarTarjeta(fichainstruccion *tarjetaoperandos)
                    229: {
                    230:     /* imprimo la tarjeta de la instrucción para ver si funciona bien */
                    231:     
                    232:     int i;
                    233:     unsigned long total;
                    234:     char cadena[MAX_LINE];
                    235: 
                    236:     /* todo esto no funciona aquí */
                    237:     /* printf("\x01B[2J"); */   /* código de escape ANSI para borrar la pantalla */
                    238:     /* printf("\027[2J");  */   /* código de escape ANSI para borrar la pantalla */
                    239:     /* printf("%c[2J", 27);*/   /* código de escape ANSI para borrar la pantalla */
                    240:     /* printf("\033[2J");  */ 
                    241: 
                    242:     printf("\n");
                    243:     total = configuracion.ultima - configuracion.primera + 1;
                    244:     i = printf("-| instruccion %lu de %lu (%.2f%%) |", instruccion, total, 100.00*instruccion/total);
                    245:     /* parece que '.2' redondea algo hacia arriba (llegamos al 100% cuando estamos en 99.99%) */
                    246:     i += printf("-| ventana %lu de %lu (%d ins/ven) |", ventana, total/configuracion.ventana, configuracion.ventana);
                    247:     for(i; i<80; i++) printf("-");
                    248: 
                    249:     printf("%-14s  ", tarjetaoperandos->hexadecimal);
                    250: 
                    251:     /* formato de instrucción (notación de INTEL) */
                    252:     /*
                    253:     printf("%s%s", tarjetaoperandos->prefijo, tarjetaoperandos->prefijo[0]!='\0' ? " ":"");
                    254: 
                    255:     printf("%s", tarjetaoperandos->nemonico);
                    256:     printf("%s%s", tarjetaoperandos->op1[0]!='\0' ? " ":"", tarjetaoperandos->op1);
                    257:     printf("%s%s%s", (tarjetaoperandos->op1[0]!='\0' && tarjetaoperandos->op2[0]!='\0') ? ",":"", tarjetaoperandos->op2[0]!='\0' ? " ":"", tarjetaoperandos->op2);
                    258:     */
                    259:     /* igual con la función del módulo 'Auxiliares.c' */
                    260:     CadenaEnsamblador(tarjetaoperandos->prefijo, tarjetaoperandos->nemonico, tarjetaoperandos->op1, tarjetaoperandos->op2, INTEL, cadena);
                    261:     printf("%s", cadena);
                    262: 
                    263:     printf("   ");
                    264:     
                    265:     printf("(long:%d", tarjetaoperandos->longitud);
                    266:     switch(tarjetaoperandos->salto)
                    267:     {
                    268:         case INCONDICIONAL:
                    269:         printf(" salto:INCONDICIONAL");
                    270:         break;
                    271: 
                    272:         case NO_SALTO:
                    273:         printf(" salto:NO SALTO");
                    274:         break;
                    275: 
                    276:         case TOMADO:
                    277:         printf(" salto:TOMADO");
                    278:         break;
                    279: 
                    280:         case NOTOMADO:
                    281:         printf(" salto:NO TOMADO");
                    282:         break;
                    283:     }
                    284: 
                    285:     printf(" ALU=%d", tarjetaoperandos->ciclosALU);
                    286:     printf(" BIU=%d)\n", tarjetaoperandos->ciclosBIU);
                    287: 
                    288:     printf("\nExpl leido datos:    %s", tarjetaoperandos->leidoexpldatos);
                    289:     printf("\nExpl leido dir:      %s", tarjetaoperandos->leidoexpldir);
                    290:     printf("\nExpl leido pila:     %s", tarjetaoperandos->leidoexplpila);
                    291:     printf("\nExpl leido estado:   %s", tarjetaoperandos->leidoexplestado);
                    292:     printf("\nExpl escrito datos:  %s", tarjetaoperandos->escritoexpldatos);
                    293:     printf("\nExpl escrito dir:    %s", tarjetaoperandos->escritoexpldir);
                    294:     printf("\nExpl escrito pila:   %s", tarjetaoperandos->escritoexplpila);
                    295:     printf("\nExpl escrito estado: %s", tarjetaoperandos->escritoexplestado);
                    296:     printf("\nImpl leido datos:    %s", tarjetaoperandos->leidoimpldatos);
                    297:     printf("\nImpl leido dir:      %s", tarjetaoperandos->leidoimpldir);
                    298:     printf("\nImpl leido pila:     %s", tarjetaoperandos->leidoimplpila);
                    299:     printf("\nImpl leido estado:   %s", tarjetaoperandos->leidoimplestado);
                    300:     printf("\nImpl escrito datos:  %s", tarjetaoperandos->escritoimpldatos);
                    301:     printf("\nImpl escrito dir:    %s", tarjetaoperandos->escritoimpldir);
                    302:     printf("\nImpl escrito pila:   %s", tarjetaoperandos->escritoimplpila);
                    303:     printf("\nImpl escrito estado: %s", tarjetaoperandos->escritoimplestado);
                    304: 
                    305:     printf("\n");
                    306: 
                    307:     getchar();
                    308: }
                    309: 
                    310: 
                    311: 
                    312: /* esta función muestra en la pantalla la información relativa a la ventana en curso */
                    313: 
                    314: void MostrarVentana()
                    315: {
                    316:     printf("\nEsta función no ha sido implementada\n");
                    317: }
                    318: 
                    319: 

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