Annotation of ADD_ver_10/GUI.c, revision 1.2

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: /*                                                                  */
1.2     ! rico       25: /*  Revision 1.3. 02/2006                                           */
        !            26: /*  Improve interactive presentation in screen                      */
        !            27: /*                                                                  */
1.1       rico       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>
1.2     ! rico       46: #include <time.h>
1.1       rico       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: 
1.2     ! rico       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: 
1.1       rico      173: /* esta función muestra en la pantalla la información de la tarjeta de operandos */
                    174: 
                    175: void MostrarTarjeta(fichainstruccion *tarjetaoperandos)
                    176: {
1.2     ! rico      177:     /* imprimo la tarjeta de la instrucción para ver si funciona bien */
1.1       rico      178:     
1.2     ! rico      179:     int i;
        !           180:     unsigned long total;
        !           181:     char cadena[MAX_LINE];
1.1       rico      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");
1.2     ! rico      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);
1.1       rico      194:     for(i; i<80; i++) printf("-");
                    195: 
                    196:     printf("%-14s  ", tarjetaoperandos->hexadecimal);
                    197: 
                    198:     /* formato de instrucción (notación de INTEL) */
                    199:     /*
1.2     ! rico      200:     printf("%s%s", tarjetaoperandos->prefijo, tarjetaoperandos->prefijo[0]!='\0' ? " ":"");
1.1       rico      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);
1.2     ! rico      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);
1.1       rico      209: 
                    210:     printf("   ");
                    211:     
                    212:     printf("(long:%d", tarjetaoperandos->longitud);
1.2     ! rico      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:     }
1.1       rico      231: 
1.2     ! rico      232:     printf(" ALU=%d", tarjetaoperandos->ciclosALU);
1.1       rico      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: 
1.2     ! rico      254:     getchar();
1.1       rico      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: {
1.2     ! rico      263:     printf("\nEsta función no ha sido implementada\n");
1.1       rico      264: }
                    265: 
                    266: 

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