|
|
| version 1.1, 2006/01/19 17:16:29 | version 1.2, 2006/02/15 13:00:30 |
|---|---|
| Line 22 | Line 22 |
| /* */ | /* */ |
| /* --------------------------- History --------------------------- */ | /* --------------------------- History --------------------------- */ |
| /* */ | /* */ |
| /* Revision 1.3. 02/2006 */ | |
| /* Improve interactive presentation in screen */ | |
| /* */ | |
| /* Revision 1.2. 01/2006 */ | /* Revision 1.2. 01/2006 */ |
| /* Added GPL License and JavaDoc style documentation */ | /* Added GPL License and JavaDoc style documentation */ |
| /* */ | /* */ |
| Line 30 | Line 33 |
| /* */ | /* */ |
| /********************************************************************/ | /********************************************************************/ |
| /******************************************************************************/ | /******************************************************************************/ |
| /* MÓDULO: GUI.c */ | /* MÓDULO: GUI.c */ |
| /* */ | /* */ |
| Line 41 | Line 43 |
| #include <stdio.h> | #include <stdio.h> |
| #include <string.h> | #include <string.h> |
| #include <time.h> | |
| #include "defines.h" | #include "defines.h" |
| #include "tipos.h" | #include "tipos.h" |
| Line 54 extern struct argumentos configuracion; | Line 57 extern struct argumentos configuracion; |
| extern unsigned long instruccion, ventana; | extern unsigned long instruccion, ventana; |
| /* esta función presenta en la pantalla información acerca del análisis en curso */ | |
| void PresentarConfiguracionPantalla() | |
| { | |
| /* información sobre origen de datos y rango a procesar */ | |
| printf("Procesando %s en '%s' (rango %2.2f%% desde %2.2f%%)\n\n", | |
| configuracion.origen==TRAZA ? "traza":"secuencia", | |
| configuracion.ficherodatos, | |
| configuracion.rango, | |
| configuracion.comienzo); | |
| /* información sobre el tamaño de la ventana de instrucciones */ | |
| printf("Tamaño de la 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 composció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"); | |
| /* | |
| 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 */ | |
| if(encurso == 1) {paso25=SI; paso50=SI; paso75=SI;} | |
| 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 */ | /* esta función muestra en la pantalla la información de la tarjeta de operandos */ |
| void MostrarTarjeta(fichainstruccion *tarjetaoperandos) | void MostrarTarjeta(fichainstruccion *tarjetaoperandos) |
| { | { |
| /* imprimo la tarjeta de la instrucción para ver si funciona bien */ | /* imprimo la tarjeta de la instrucción para ver si funciona bien */ |
| int i; | int i; |
| unsigned long total; | unsigned long total; |
| char cadena[MAX_LINE]; | char cadena[MAX_LINE]; |
| /* todo esto no funciona aquí */ | /* todo esto no funciona aquí */ |
| /* printf("\x01B[2J"); */ /* código de escape ANSI para borrar la pantalla */ | /* printf("\x01B[2J"); */ /* código de escape ANSI para borrar la pantalla */ |
| Line 71 void MostrarTarjeta(fichainstruccion *ta | Line 187 void MostrarTarjeta(fichainstruccion *ta |
| /* printf("\033[2J"); */ | /* printf("\033[2J"); */ |
| printf("\n"); | printf("\n"); |
| total = configuracion.ultima - configuracion.primera + 1; | total = configuracion.ultima - configuracion.primera + 1; |
| i = printf("-| instruccion %lu de %lu (%.2f%%) |", instruccion, total, 100.00*instruccion/total); | 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%) */ | /* 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); | i += printf("-| ventana %lu de %lu (%d ins/ven) |", ventana, total/configuracion.ventana, configuracion.ventana); |
| for(i; i<80; i++) printf("-"); | for(i; i<80; i++) printf("-"); |
| printf("%-14s ", tarjetaoperandos->hexadecimal); | printf("%-14s ", tarjetaoperandos->hexadecimal); |
| /* formato de instrucción (notación de INTEL) */ | /* formato de instrucción (notación de INTEL) */ |
| /* | /* |
| printf("%s%s", tarjetaoperandos->prefijo, tarjetaoperandos->prefijo[0]!='\0' ? " ":""); | printf("%s%s", tarjetaoperandos->prefijo, tarjetaoperandos->prefijo[0]!='\0' ? " ":""); |
| printf("%s", tarjetaoperandos->nemonico); | printf("%s", tarjetaoperandos->nemonico); |
| printf("%s%s", tarjetaoperandos->op1[0]!='\0' ? " ":"", tarjetaoperandos->op1); | 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); | 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' */ | /* igual con la función del módulo 'Auxiliares.c' */ |
| CadenaEnsamblador(tarjetaoperandos->prefijo, tarjetaoperandos->nemonico, tarjetaoperandos->op1, tarjetaoperandos->op2, INTEL, cadena); | CadenaEnsamblador(tarjetaoperandos->prefijo, tarjetaoperandos->nemonico, tarjetaoperandos->op1, tarjetaoperandos->op2, INTEL, cadena); |
| printf("%s", cadena); | printf("%s", cadena); |
| printf(" "); | printf(" "); |
| printf("(long:%d", tarjetaoperandos->longitud); | printf("(long:%d", tarjetaoperandos->longitud); |
| switch(tarjetaoperandos->salto) | switch(tarjetaoperandos->salto) |
| { | { |
| case INCONDICIONAL: | case INCONDICIONAL: |
| printf(" salto:INCONDICIONAL"); | printf(" salto:INCONDICIONAL"); |
| break; | break; |
| case NO_SALTO: | case NO_SALTO: |
| printf(" salto:NO SALTO"); | printf(" salto:NO SALTO"); |
| break; | break; |
| case TOMADO: | case TOMADO: |
| printf(" salto:TOMADO"); | printf(" salto:TOMADO"); |
| break; | break; |
| case NOTOMADO: | case NOTOMADO: |
| printf(" salto:NO TOMADO"); | printf(" salto:NO TOMADO"); |
| break; | break; |
| } | } |
| printf(" ALU=%d", tarjetaoperandos->ciclosALU); | printf(" ALU=%d", tarjetaoperandos->ciclosALU); |
| printf(" BIU=%d)\n", tarjetaoperandos->ciclosBIU); | printf(" BIU=%d)\n", tarjetaoperandos->ciclosBIU); |
| printf("\nExpl leido datos: %s", tarjetaoperandos->leidoexpldatos); | printf("\nExpl leido datos: %s", tarjetaoperandos->leidoexpldatos); |
| Line 135 void MostrarTarjeta(fichainstruccion *ta | Line 251 void MostrarTarjeta(fichainstruccion *ta |
| printf("\n"); | printf("\n"); |
| getchar(); | getchar(); |
| } | } |
| Line 144 void MostrarTarjeta(fichainstruccion *ta | Line 260 void MostrarTarjeta(fichainstruccion *ta |
| void MostrarVentana() | void MostrarVentana() |
| { | { |
| printf("\nEsta función no ha sido implementada\n"); | printf("\nEsta función no ha sido implementada\n"); |
| } | } |