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>