Annotation of ADD_ver_10/Ficheros.c, revision 1.1
1.1 ! rico 1: /********************************************************************/
! 2: /* Fihceros.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.2. 01/2006 */
! 26: /* Added GPL License and JavaDoc style documentation */
! 27: /* */
! 28: /* Revision 1.1. 09/2005 */
! 29: /* Initial Revision */
! 30: /* */
! 31: /********************************************************************/
! 32:
! 33:
! 34: /******************************************************************************/
! 35: /* MÓDULO: Ficheros.c */
! 36: /* */
! 37: /* Este módulo contiene las funciones relacionadas con el almacenamiento de */
! 38: /* información en ficheros. */
! 39: /******************************************************************************/
! 40: /* Fecha: 23 de septiembre de 2005 */
! 41: /******************************************************************************/
! 42:
! 43: #include <stdio.h>
! 44: #include <string.h>
! 45: #include <time.h>
! 46:
! 47: #include "defines.h"
! 48: #include "tipos.h"
! 49: #include "ficheros.h"
! 50:
! 51: /* configuración */
! 52: extern struct argumentos configuracion;
! 53:
! 54: /* bases de datos */
! 55: extern unsigned int num_nemonicos;
! 56: extern operacion *nemonicos;
! 57: extern unsigned int num_simbolos;
! 58: extern operando *simbolos;
! 59:
! 60: extern unsigned int num_tiempos;
! 61: extern tiempo *ciclos;
! 62:
! 63: /* recuentos */
! 64: extern unsigned long int *contadornemonicos;
! 65: extern unsigned long int *contadorlecturas;
! 66: extern unsigned long int *contadorescrituras;
! 67:
! 68: /* contadores de instrucciones y ventanas */
! 69: extern unsigned long instruccion, ventana;
! 70:
! 71: /* otros resultados */
! 72: extern double cpimedio;
! 73: extern double tiempoejecucion;
! 74: extern unsigned long *distribucionpasos;
! 75:
! 76: /* posibles ubicaciones de datos */
! 77: extern unsigned int num_ubicaciones;
! 78: extern ubicacion *datos;
! 79:
! 80: /* analisis de dependencias de datos */
! 81: extern struct punterosD matriz;
! 82: extern unsigned char **matrizC;
! 83: extern char **OrdenParcial;
! 84:
! 85: /* parámetros asociados a las matrices */
! 86: extern parametromatriz *pasos;
! 87: extern parametromatriz *mediapasos;
! 88: extern parametromatriz *grado;
! 89: extern parametromatriz *mediagrado;
! 90: extern parametromatriz *acoplo;
! 91: extern parametromatriz *mediaacoplo;
! 92:
! 93:
! 94:
! 95: /* BASES de DATOS */
! 96: /* función para salvar en un fichero la base de datos */
! 97:
! 98: void CrearFicheroDB (char *fichero, int idtabla)
! 99: {
! 100: FILE *handle;
! 101: unsigned int i;
! 102: char mensaje[MAX_LINE];
! 103:
! 104: /* los ficheros van a tener el formato de texto EXCEL */
! 105: /* al nombre del fichero le asigno la extensión .XLS */
! 106:
! 107: strcat(fichero, ".xls");
! 108:
! 109: switch(idtabla)
! 110: {
! 111: case TABLA_NEMONICOS:
! 112: /* abro el fichero */
! 113: if((handle = fopen(fichero, "w")) != NULL)
! 114: {
! 115: sprintf(mensaje, "[CrearFicheroDB] El fichero '%s' se ha abierto con éxito", fichero);
! 116: Notificar(mensaje, NO_ERROR, ECO_NO);
! 117:
! 118: /* escribo una pequeña cabecera */
! 119: fprintf(handle, "BASE DE DATOS DE NEMÓNICOS\n\n");
! 120: fprintf(handle, "%s\t", "índice");
! 121: fprintf(handle, "%s\t", "nemónico");
! 122: fprintf(handle, "%s\t", "tipo");
! 123: fprintf(handle, "%s\t", "implicitos_escritos");
! 124: fprintf(handle, "%s\t", "implicitos_leidos");
! 125: fprintf(handle, "%s\t", "modo_op1");
! 126: fprintf(handle, "%s\n", "modo_op2");
! 127: /* fprintf(handle, "%s\n", "cuenta"); */
! 128:
! 129: /* copio la base de datos al fichero con formato EXCEL */
! 130: for(i=0; i<num_nemonicos; i++)
! 131: {
! 132: fprintf(handle, "%d\t%s\t", i+1, nemonicos[i].nemonico);
! 133: fprintf(handle, "%d\t", nemonicos[i].tipo);
! 134: fprintf(handle, "%s\t", nemonicos[i].implicitos_escritos);
! 135: fprintf(handle, "%s\t", nemonicos[i].implicitos_leidos);
! 136: fprintf(handle, "%d\t", nemonicos[i].modo_op1);
! 137: fprintf(handle, "%d\n", nemonicos[i].modo_op2);
! 138: /* fprintf(handle, "%lu\n", nemonicos[i].cuenta); */
! 139: }
! 140:
! 141: sprintf(mensaje, "[CrearFicheroDB] La Tabla Nemónicos se ha volcado al fichero '%s'", fichero);
! 142: Notificar(mensaje, NO_ERROR, ECO_NO);
! 143:
! 144: /* cierro el fichero */
! 145: if(fclose(handle))
! 146: {
! 147: sprintf(mensaje, "[CrearFicheroDB] El fichero '%s' no se ha podido cerrar", fichero);
! 148: Notificar(mensaje, ERROR_SEGUIR, ECO_NO);
! 149: }
! 150: else
! 151: {
! 152: sprintf(mensaje, "[CrearFicheroDB] El fichero '%s' ha sido cerrado con éxito", fichero);
! 153: Notificar(mensaje, NO_ERROR, ECO_NO);
! 154: }
! 155: }
! 156: else
! 157: {
! 158: sprintf(mensaje, "[CrearFicheroDB] El fichero '%s' no se ha podido abrir", fichero);
! 159: Notificar(mensaje, ERROR_SEGUIR, ECO_NO);
! 160: }
! 161: break;
! 162:
! 163: case TABLA_SIMBOLOS:
! 164: /* abro el fichero */
! 165: if((handle = fopen(fichero, "w")) != NULL)
! 166: {
! 167: sprintf(mensaje, "[CrearFicheroDB] El fichero '%s' se ha abierto con éxito", fichero);
! 168: Notificar(mensaje, NO_ERROR, ECO_NO);
! 169:
! 170: /* escribo una pequeña cabecera */
! 171: fprintf(handle, "BASE DE DATOS DE UBICACIONES\n\n");
! 172: fprintf(handle, "%s\t", "índice");
! 173: fprintf(handle, "%s\t", "símbolo");
! 174: fprintf(handle, "%s\t", "tipo");
! 175: fprintf(handle, "%s\t", "dependencias");
! 176: fprintf(handle, "%s\n", "segmento");
! 177: /* fprintf(handle, "%s\t", "lecturas"); */
! 178: /* fprintf(handle, "%s\n", "escrituras"); */
! 179:
! 180: /* copio la base de datos al fichero con formato EXCEL */
! 181: for(i=0; i<num_simbolos; i++)
! 182: {
! 183: fprintf(handle, "%d\t%s\t", i+1, simbolos[i].simbolo);
! 184: fprintf(handle, "%d\t", simbolos[i].tipo);
! 185: fprintf(handle, "%s\t", simbolos[i].dependencias);
! 186: fprintf(handle, "%d\n", simbolos[i].segmento);
! 187: /* fprintf(handle, "%lu\t", simbolos[i].lecturas); */
! 188: /* fprintf(handle, "%lu\n", simbolos[i].escrituras); */
! 189: }
! 190:
! 191: sprintf(mensaje, "[CrearFicheroDB] La Tabla Símbolos se ha volcado al fichero '%s'", fichero);
! 192: Notificar(mensaje, NO_ERROR, ECO_NO);
! 193:
! 194: /* cierro el fichero */
! 195: if(fclose(handle))
! 196: {
! 197: sprintf(mensaje, "[CrearFicheroDB] El fichero '%s' no se ha podido cerrar", fichero);
! 198: Notificar(mensaje, ERROR_SEGUIR, ECO_NO);
! 199: }
! 200: else
! 201: {
! 202: sprintf(mensaje, "[CrearFicheroDB] El fichero '%s' ha sido cerrado con éxito", fichero);
! 203: Notificar(mensaje, NO_ERROR, ECO_NO);
! 204: }
! 205: }
! 206: else
! 207: {
! 208: sprintf(mensaje, "[CrearFicheroDB] El fichero '%s' no se ha podido abrir", fichero);
! 209: Notificar(mensaje, ERROR_SEGUIR, ECO_NO);
! 210: }
! 211: break;
! 212:
! 213: case TABLA_CICLOS:
! 214: /* abro el fichero */
! 215: if((handle = fopen(fichero, "w")) != NULL)
! 216: {
! 217: sprintf(mensaje, "[CrearFicheroDB] El fichero '%s' se ha abierto con éxito", fichero);
! 218: Notificar(mensaje, NO_ERROR, ECO_NO);
! 219:
! 220: /* escribo una pequeña cabecera */
! 221: fprintf(handle, "BASE DE DATOS DE TIEMPOS DE EJECUCIÓN\n\n");
! 222: fprintf(handle, "%s\t", "índice");
! 223: fprintf(handle, "%s\t", "identificador");
! 224: fprintf(handle, "%s\n", "ciclos");
! 225:
! 226: /* copio la base de datos al fichero con formato EXCEL */
! 227: for(i=0; i<num_tiempos; i++)
! 228: {
! 229: fprintf(handle, "%d\t%s\t", i+1, ciclos[i].identificador);
! 230: fprintf(handle, "%d\n", ciclos[i].ciclos);
! 231: }
! 232:
! 233: sprintf(mensaje, "[CrearFicheroDB] La Tabla Ciclos se ha volcado al fichero '%s'", fichero);
! 234: Notificar(mensaje, NO_ERROR, ECO_NO);
! 235:
! 236: /* cierro el fichero */
! 237: if(fclose(handle))
! 238: {
! 239: sprintf(mensaje, "[CrearFicheroDB] El fichero '%s' no se ha podido cerrar", fichero);
! 240: Notificar(mensaje, ERROR_SEGUIR, ECO_NO);
! 241: }
! 242: else
! 243: {
! 244: sprintf(mensaje, "[CrearFicheroDB] El fichero '%s' ha sido cerrado con éxito", fichero);
! 245: Notificar(mensaje, NO_ERROR, ECO_NO);
! 246: }
! 247: }
! 248: else
! 249: {
! 250: sprintf(mensaje, "[CrearFicheroDB] El fichero '%s' no se ha podido abrir\n", fichero);
! 251: Notificar(mensaje, ERROR_SEGUIR, ECO_NO);
! 252: }
! 253: break;
! 254: }
! 255: }
! 256:
! 257:
! 258: /* esta función salva todas las bases de datos utilizadas */
! 259:
! 260: void SalvarBasesDatos()
! 261: {
! 262: char cadena[MAX_LINE];
! 263:
! 264: /* genero los ficheros con las tablas de la BD para comprobar que todo va bien */
! 265: strcpy(cadena, "nemos");
! 266: CrearFicheroDB (cadena, TABLA_NEMONICOS);
! 267: strcpy(cadena, "ubis");
! 268: CrearFicheroDB (cadena, TABLA_SIMBOLOS);
! 269: if(configuracion.cpi == SI)
! 270: {
! 271: strcpy(cadena, "ciclos");
! 272: CrearFicheroDB (cadena, TABLA_CICLOS);
! 273: }
! 274: }
! 275:
! 276:
! 277: /* VENTANAS de INSTRUCCIONES */
! 278: /* funciones para salvar en un fichero la información relativa a una ventana */
! 279: /* de instrucciones */
! 280: /* abro un fichero para salvar información de una ventana de instrucciones */
! 281:
! 282: void IniciarFicheroVentana()
! 283: {
! 284: FILE *handle;
! 285: char fichero[MAX_LINE];
! 286: char mensaje[MAX_LINE];
! 287: int i;
! 288:
! 289: /* el fichero va a tener el formato de texto EXCEL */
! 290: /* construyo el nombre a partir del número de ventana */
! 291: /* al nombre del fichero le asigno la extensión .XLS */
! 292:
! 293: sprintf(fichero, "%lu.xls", ventana);
! 294:
! 295: /* esto no es ANSI
! 296: _ltoa(ventana, fichero, 10);
! 297: strcat(fichero, ".xls"); */
! 298:
! 299: /* abro el fichero */
! 300: if((handle = fopen(fichero, "w")) != NULL)
! 301: {
! 302: sprintf(mensaje, "[IniciarFicheroVentana] El fichero '%s' se ha abierto con éxito", fichero);
! 303: Notificar(mensaje, NO_ERROR, ECO_NO);
! 304:
! 305: /* escribo una pequeña cabecera con información */
! 306: /* copiar de CrearFicheroResultados */
! 307:
! 308: fprintf(handle, "VENTANA NÚMERO:\t%lu\n\n", ventana);
! 309:
! 310: /* encabezado de la tabla */
! 311: fprintf(handle, "SECUENCIA DE CÓDIGO\n");
! 312: fprintf(handle, "\t\t\toperandos leidos\t\t\t\t\t\t\t\toperandos escritos\n");
! 313: fprintf(handle, "\t\t\texplícitos\t\t\t\timplícitos\t\t\t\texplícitos\t\t\t\timplícitos\n");
! 314:
! 315: fprintf(handle, "instrucción\thexadecimal\tensamblador\t");
! 316: for(i=0; i<4; i++) fprintf(handle, "datos\tdirecciones\tpila\testado\t");
! 317: fprintf(handle, "longitud\ttipo\tciclos ALU\tciclos BIU\n");
! 318:
! 319:
! 320: /* cierro el fichero */
! 321: if(fclose(handle))
! 322: {
! 323: sprintf(mensaje, "[IniciarFicheroVentana] El fichero '%s' no se ha podido cerrar", fichero);
! 324: Notificar(mensaje, ERROR_SEGUIR, ECO_NO);
! 325: }
! 326: else
! 327: {
! 328: sprintf(mensaje, "[IniciarFicheroVentana] El fichero '%s' ha sido cerrado con éxito", fichero);
! 329: Notificar(mensaje, NO_ERROR, ECO_NO);
! 330: }
! 331: }
! 332: else
! 333: {
! 334: sprintf(mensaje, "[IniciarFicheroVentana] El fichero '%s' no se ha podido abrir", fichero);
! 335: Notificar(mensaje, ERROR_SEGUIR, ECO_NO);
! 336: }
! 337: }
! 338:
! 339:
! 340: /* escribo información sobre una instrucción en el fichero de la ventana */
! 341:
! 342: void Instruccion2FicheroVentana(fichainstruccion *tarjetaoperandos)
! 343: {
! 344: FILE *handle;
! 345: char fichero[MAX_LINE];
! 346: char mensaje[MAX_LINE];
! 347:
! 348: /* construyo el nombre a partir del número de ventana */
! 349:
! 350: sprintf(fichero, "%lu.xls", ventana);
! 351:
! 352: /* esto no es ANSI
! 353: _ltoa(ventana, fichero, 10);
! 354: strcat(fichero, ".xls"); */
! 355:
! 356: /* abro el fichero */
! 357: if((handle = fopen(fichero, "a")) != NULL)
! 358: {
! 359: sprintf(mensaje, "[Instruccion2FicheroVentana] El fichero '%s' se ha abierto con éxito", fichero);
! 360: Notificar(mensaje, NO_ERROR, ECO_NO);
! 361:
! 362: /* escribo la información relativa a la instrucción */
! 363:
! 364: fprintf(handle, "%d\t", instruccion);
! 365: fprintf(handle, "%s\t", tarjetaoperandos->hexadecimal);
! 366:
! 367: /* formato de instrucción (notación de INTEL) */
! 368: /*
! 369: fprintf(handle, "%s%s", tarjetaoperandos->prefijo, tarjetaoperandos->prefijo[0]!='\0' ? " ":"");
! 370: fprintf(handle, "%s", tarjetaoperandos->nemonico);
! 371: fprintf(handle, "%s%s", tarjetaoperandos->op1[0]!='\0' ? " ":"", tarjetaoperandos->op1);
! 372: fprintf(handle, "%s%s%s", (tarjetaoperandos->op1[0]!='\0' && tarjetaoperandos->op2[0]!='\0') ? ",":"", tarjetaoperandos->op2[0]!='\0' ? " ":"", tarjetaoperandos->op2);
! 373: fprintf(handle, "\t");
! 374: */
! 375:
! 376: /* igual con la función del módulo 'Auxiliares.c' */
! 377: CadenaEnsamblador(tarjetaoperandos->prefijo, tarjetaoperandos->nemonico, tarjetaoperandos->op1, tarjetaoperandos->op2, INTEL, mensaje);
! 378: fprintf(handle, "%s\t", mensaje);
! 379:
! 380:
! 381: /* operandos */
! 382: fprintf(handle, "%s\t", tarjetaoperandos->leidoexpldatos);
! 383: fprintf(handle, "%s\t", tarjetaoperandos->leidoexpldir);
! 384: fprintf(handle, "%s\t", tarjetaoperandos->leidoexplpila);
! 385: fprintf(handle, "%s\t", tarjetaoperandos->leidoexplestado);
! 386: fprintf(handle, "%s\t", tarjetaoperandos->leidoimpldatos);
! 387: fprintf(handle, "%s\t", tarjetaoperandos->leidoimpldir);
! 388: fprintf(handle, "%s\t", tarjetaoperandos->leidoimplpila);
! 389: fprintf(handle, "%s\t", tarjetaoperandos->leidoimplestado);
! 390: fprintf(handle, "%s\t", tarjetaoperandos->escritoexpldatos);
! 391: fprintf(handle, "%s\t", tarjetaoperandos->escritoexpldir);
! 392: fprintf(handle, "%s\t", tarjetaoperandos->escritoexplpila);
! 393: fprintf(handle, "%s\t", tarjetaoperandos->escritoexplestado);
! 394: fprintf(handle, "%s\t", tarjetaoperandos->escritoimpldatos);
! 395: fprintf(handle, "%s\t", tarjetaoperandos->escritoimpldir);
! 396: fprintf(handle, "%s\t", tarjetaoperandos->escritoimplpila);
! 397: fprintf(handle, "%s\t", tarjetaoperandos->escritoimplestado);
! 398:
! 399: fprintf(handle, "%d\t", tarjetaoperandos->longitud);
! 400: switch(tarjetaoperandos->salto)
! 401: {
! 402: case INCONDICIONAL:
! 403: fprintf(handle, "INCONDICIONAL\t");
! 404: break;
! 405:
! 406: case NO_SALTO:
! 407: fprintf(handle, "NO SALTO\t");
! 408: break;
! 409:
! 410: case TOMADO:
! 411: fprintf(handle, "TOMADO\t");
! 412: break;
! 413:
! 414: case NOTOMADO:
! 415: fprintf(handle, "NO TOMADO\t");
! 416: break;
! 417: }
! 418:
! 419: fprintf(handle, "%d\t", tarjetaoperandos->ciclosALU);
! 420: fprintf(handle, "%d", tarjetaoperandos->ciclosBIU);
! 421:
! 422: fprintf(handle, "\n");
! 423:
! 424:
! 425: /* cierro el fichero */
! 426: if(fclose(handle))
! 427: {
! 428: sprintf(mensaje, "[Instruccion2FicheroVentana] El fichero '%s' no se ha podido cerrar", fichero);
! 429: Notificar(mensaje, ERROR_SEGUIR, ECO_NO);
! 430: }
! 431: else
! 432: {
! 433: sprintf(mensaje, "[Instruccion2FicheroVentana] El fichero '%s' ha sido cerrado con éxito", fichero);
! 434: Notificar(mensaje, NO_ERROR, ECO_NO);
! 435: }
! 436: }
! 437: else
! 438: {
! 439: sprintf(mensaje, "[Instruccion2FicheroVentana] El fichero '%s' no se ha podido abrir", fichero);
! 440: Notificar(mensaje, ERROR_SEGUIR, ECO_NO);
! 441: }
! 442: }
! 443:
! 444:
! 445: /* escribo las matrices de la ventana en el fichero correspondiente */
! 446:
! 447: void Matrices2FicheroVentana()
! 448: {
! 449: FILE *handle;
! 450: char fichero[MAX_LINE];
! 451: char mensaje[MAX_LINE];
! 452: int i, j, dim;
! 453:
! 454: dim = configuracion.ventana;
! 455:
! 456: /* construyo el nombre a partir del número de ventana */
! 457:
! 458: sprintf(fichero, "%lu.xls", ventana);
! 459:
! 460: /* esto no es ANSI
! 461: _ltoa(ventana, fichero, 10);
! 462: strcat(fichero, ".xls"); */
! 463:
! 464: /* abro el fichero */
! 465: if((handle = fopen(fichero, "a")) != NULL)
! 466: {
! 467: sprintf(mensaje, "[Matrices2FicheroVentana] El fichero '%s' se ha abierto con éxito", fichero);
! 468: Notificar(mensaje, NO_ERROR, ECO_NO);
! 469:
! 470: /* escribo las matrices y los parámetros que de ellas se derivan */
! 471:
! 472: fprintf(handle, "\n\nMATRICES\n");
! 473:
! 474: /* FILA 1: etiquetas */
! 475: if(matriz.Ddatoexp != NULL) {fprintf(handle, "Ddatoexp"); for(i=0; i<dim+2; i++) fprintf(handle, "\t");}
! 476: if(matriz.Ddir_exp != NULL) {fprintf(handle, "Ddir_exp"); for(i=0; i<dim+2; i++) fprintf(handle, "\t");}
! 477: if(matriz.Dpilaexp != NULL) {fprintf(handle, "Dpilaexp"); for(i=0; i<dim+2; i++) fprintf(handle, "\t");}
! 478: if(matriz.Destadoexp != NULL) {fprintf(handle, "Destadoexp"); for(i=0; i<dim+2; i++) fprintf(handle, "\t");}
! 479: fprintf(handle, "\n");
! 480:
! 481: /* matrices */
! 482: for(i=0; i<dim; i++)
! 483: {
! 484: if(matriz.Ddatoexp != NULL) for(j=0; j<dim; j++) fprintf(handle, "%3d\t", matriz.Ddatoexp[i][j]); fprintf(handle, "\t\t");
! 485: if(matriz.Ddir_exp != NULL) for(j=0; j<dim; j++) fprintf(handle, "%3d\t", matriz.Ddir_exp[i][j]); fprintf(handle, "\t\t");
! 486: if(matriz.Dpilaexp != NULL) for(j=0; j<dim; j++) fprintf(handle, "%3d\t", matriz.Dpilaexp[i][j]); fprintf(handle, "\t\t");
! 487: if(matriz.Destadoexp != NULL) for(j=0; j<dim; j++) fprintf(handle, "%3d\t", matriz.Destadoexp[i][j]); fprintf(handle, "\n");
! 488: }
! 489:
! 490: /* parámetros calculados */
! 491: /* ¡OJO!: los separadores del sistema en EXCEL son los del castellano */
! 492: /* la función 'fprintf' usa los del inglés (',' para miles y '.' para decimales) */
! 493: /* lo mejor es anular en Opciones de EXCEL los separadores del sistema */
! 494: /* y cambiarlos a los del idioma inglés antes de abrir mis ficheros */
! 495: /* pasos de computación */
! 496: if(configuracion.pasoscomputacion == SI)
! 497: {
! 498: if(matriz.Ddatoexp != NULL) {fprintf(handle, "pasos\t%.3f", pasos->Ddatoexp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 499: if(matriz.Ddir_exp != NULL) {fprintf(handle, "pasos\t%.3f", pasos->Ddir_exp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 500: if(matriz.Dpilaexp != NULL) {fprintf(handle, "pasos\t%.3f", pasos->Dpilaexp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 501: if(matriz.Destadoexp != NULL) {fprintf(handle, "pasos\t%.3f", pasos->Destadoexp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 502: fprintf(handle, "\n");
! 503: }
! 504: /* grado de paralelismo */
! 505: if(configuracion.gradoparalelismo == SI)
! 506: {
! 507: if(matriz.Ddatoexp != NULL) {fprintf(handle, "grado\t%.3f", grado->Ddatoexp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 508: if(matriz.Ddir_exp != NULL) {fprintf(handle, "grado\t%.3f", grado->Ddir_exp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 509: if(matriz.Dpilaexp != NULL) {fprintf(handle, "grado\t%.3f", grado->Dpilaexp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 510: if(matriz.Destadoexp != NULL) {fprintf(handle, "grado\t%.3f", grado->Destadoexp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 511: fprintf(handle, "\n");
! 512: }
! 513: /* acoplamiento */
! 514: if(configuracion.acoplamiento == SI)
! 515: {
! 516: if(matriz.Ddatoexp != NULL) {fprintf(handle, "acoplo\t%.3f", acoplo->Ddatoexp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 517: if(matriz.Ddir_exp != NULL) {fprintf(handle, "acoplo\t%.3f", acoplo->Ddir_exp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 518: if(matriz.Dpilaexp != NULL) {fprintf(handle, "acoplo\t%.3f", acoplo->Dpilaexp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 519: if(matriz.Destadoexp != NULL) {fprintf(handle, "acoplo\t%.3f", acoplo->Destadoexp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 520: fprintf(handle, "\n");
! 521: }
! 522: fprintf(handle, "\n\n");
! 523:
! 524:
! 525: /* FILA 2: etiquetas */
! 526: if(matriz.Ddatoimp != NULL) {fprintf(handle, "Ddatoimp"); for(i=0; i<dim+2; i++) fprintf(handle, "\t");}
! 527: if(matriz.Ddir_imp != NULL) {fprintf(handle, "Ddir_imp"); for(i=0; i<dim+2; i++) fprintf(handle, "\t");}
! 528: if(matriz.Dpilaimp != NULL) {fprintf(handle, "Dpilaimp"); for(i=0; i<dim+2; i++) fprintf(handle, "\t");}
! 529: if(matriz.Destadoimp != NULL) {fprintf(handle, "Destadoimp"); for(i=0; i<dim+2; i++) fprintf(handle, "\t");}
! 530: fprintf(handle, "\n");
! 531:
! 532: /* matrices */
! 533: for(i=0; i<dim; i++)
! 534: {
! 535: if(matriz.Ddatoimp != NULL) for(j=0; j<dim; j++) fprintf(handle, "%3d\t", matriz.Ddatoimp[i][j]); fprintf(handle, "\t\t");
! 536: if(matriz.Ddir_imp != NULL) for(j=0; j<dim; j++) fprintf(handle, "%3d\t", matriz.Ddir_imp[i][j]); fprintf(handle, "\t\t");
! 537: if(matriz.Dpilaimp != NULL) for(j=0; j<dim; j++) fprintf(handle, "%3d\t", matriz.Dpilaimp[i][j]); fprintf(handle, "\t\t");
! 538: if(matriz.Destadoimp != NULL) for(j=0; j<dim; j++) fprintf(handle, "%3d\t", matriz.Destadoimp[i][j]); fprintf(handle, "\n");
! 539: }
! 540:
! 541: /* parámetros calculados */
! 542: /* pasos de computación */
! 543: if(configuracion.pasoscomputacion == SI)
! 544: {
! 545: if(matriz.Ddatoimp != NULL) {fprintf(handle, "pasos\t%.3f", pasos->Ddatoimp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 546: if(matriz.Ddir_imp != NULL) {fprintf(handle, "pasos\t%.3f", pasos->Ddir_imp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 547: if(matriz.Dpilaimp != NULL) {fprintf(handle, "pasos\t%.3f", pasos->Dpilaimp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 548: if(matriz.Destadoimp != NULL) {fprintf(handle, "pasos\t%.3f", pasos->Destadoimp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 549: fprintf(handle, "\n");
! 550: }
! 551: /* grado de paralelismo */
! 552: if(configuracion.gradoparalelismo == SI)
! 553: {
! 554: if(matriz.Ddatoimp != NULL) {fprintf(handle, "grado\t%.3f", grado->Ddatoimp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 555: if(matriz.Ddir_imp != NULL) {fprintf(handle, "grado\t%.3f", grado->Ddir_imp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 556: if(matriz.Dpilaimp != NULL) {fprintf(handle, "grado\t%.3f", grado->Dpilaimp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 557: if(matriz.Destadoimp != NULL) {fprintf(handle, "grado\t%.3f", grado->Destadoimp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 558: fprintf(handle, "\n");
! 559: }
! 560: /* acoplamiento */
! 561: if(configuracion.acoplamiento == SI)
! 562: {
! 563: if(matriz.Ddatoimp != NULL) {fprintf(handle, "acoplo\t%.3f", acoplo->Ddatoimp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 564: if(matriz.Ddir_imp != NULL) {fprintf(handle, "acoplo\t%.3f", acoplo->Ddir_imp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 565: if(matriz.Dpilaimp != NULL) {fprintf(handle, "acoplo\t%.3f", acoplo->Dpilaimp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 566: if(matriz.Destadoimp != NULL) {fprintf(handle, "acoplo\t%.3f", acoplo->Destadoimp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 567: fprintf(handle, "\n");
! 568: }
! 569: fprintf(handle, "\n\n");
! 570:
! 571:
! 572: /* FILA 3: etiquetas */
! 573: if(matriz.ADdatoexp != NULL) {fprintf(handle, "ADdatoexp"); for(i=0; i<dim+2; i++) fprintf(handle, "\t");}
! 574: if(matriz.ADdir_exp != NULL) {fprintf(handle, "ADdir_exp"); for(i=0; i<dim+2; i++) fprintf(handle, "\t");}
! 575: if(matriz.ADpilaexp != NULL) {fprintf(handle, "ADpilaexp"); for(i=0; i<dim+2; i++) fprintf(handle, "\t");}
! 576: if(matriz.ADestadoexp != NULL) {fprintf(handle, "ADestadoexp"); for(i=0; i<dim+2; i++) fprintf(handle, "\t");}
! 577: fprintf(handle, "\n");
! 578:
! 579: /* matrices */
! 580: for(i=0; i<dim; i++)
! 581: {
! 582: if(matriz.ADdatoexp != NULL) for(j=0; j<dim; j++) fprintf(handle, "%3d\t", matriz.ADdatoexp[i][j]); fprintf(handle, "\t\t");
! 583: if(matriz.ADdir_exp != NULL) for(j=0; j<dim; j++) fprintf(handle, "%3d\t", matriz.ADdir_exp[i][j]); fprintf(handle, "\t\t");
! 584: if(matriz.ADpilaexp != NULL) for(j=0; j<dim; j++) fprintf(handle, "%3d\t", matriz.ADpilaexp[i][j]); fprintf(handle, "\t\t");
! 585: if(matriz.ADestadoexp != NULL) for(j=0; j<dim; j++) fprintf(handle, "%3d\t", matriz.ADestadoexp[i][j]); fprintf(handle, "\n");
! 586: }
! 587:
! 588: /* parámetros calculados */
! 589: /* pasos de computación */
! 590: if(configuracion.pasoscomputacion == SI)
! 591: {
! 592: if(matriz.ADdatoexp != NULL) {fprintf(handle, "pasos\t%.3f", pasos->ADdatoexp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 593: if(matriz.ADdir_exp != NULL) {fprintf(handle, "pasos\t%.3f", pasos->ADdir_exp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 594: if(matriz.ADpilaexp != NULL) {fprintf(handle, "pasos\t%.3f", pasos->ADpilaexp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 595: if(matriz.ADestadoexp != NULL) {fprintf(handle, "pasos\t%.3f", pasos->ADestadoexp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 596: fprintf(handle, "\n");
! 597: }
! 598: /* grado de paralelismo */
! 599: if(configuracion.gradoparalelismo == SI)
! 600: {
! 601: if(matriz.ADdatoexp != NULL) {fprintf(handle, "grado\t%.3f", grado->ADdatoexp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 602: if(matriz.ADdir_exp != NULL) {fprintf(handle, "grado\t%.3f", grado->ADdir_exp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 603: if(matriz.ADpilaexp != NULL) {fprintf(handle, "grado\t%.3f", grado->ADpilaexp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 604: if(matriz.ADestadoexp != NULL) {fprintf(handle, "grado\t%.3f", grado->ADestadoexp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 605: fprintf(handle, "\n");
! 606: }
! 607: /* acoplamiento */
! 608: if(configuracion.acoplamiento == SI)
! 609: {
! 610: if(matriz.ADdatoexp != NULL) {fprintf(handle, "acoplo\t%.3f", acoplo->ADdatoexp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 611: if(matriz.ADdir_exp != NULL) {fprintf(handle, "acoplo\t%.3f", acoplo->ADdir_exp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 612: if(matriz.ADpilaexp != NULL) {fprintf(handle, "acoplo\t%.3f", acoplo->ADpilaexp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 613: if(matriz.ADestadoexp != NULL) {fprintf(handle, "acoplo\t%.3f", acoplo->ADestadoexp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 614: fprintf(handle, "\n");
! 615: }
! 616: fprintf(handle, "\n\n");
! 617:
! 618:
! 619: /* FILA 4: etiquetas */
! 620: if(matriz.ADdatoimp != NULL) {fprintf(handle, "ADdatoimp"); for(i=0; i<dim+2; i++) fprintf(handle, "\t");}
! 621: if(matriz.ADdir_imp != NULL) {fprintf(handle, "ADdir_imp"); for(i=0; i<dim+2; i++) fprintf(handle, "\t");}
! 622: if(matriz.ADpilaimp != NULL) {fprintf(handle, "ADpilaimp"); for(i=0; i<dim+2; i++) fprintf(handle, "\t");}
! 623: if(matriz.ADestadoimp != NULL) {fprintf(handle, "ADestadoimp"); for(i=0; i<dim+2; i++) fprintf(handle, "\t");}
! 624: fprintf(handle, "\n");
! 625:
! 626: /* matrices */
! 627: for(i=0; i<dim; i++)
! 628: {
! 629: if(matriz.ADdatoimp != NULL) for(j=0; j<dim; j++) fprintf(handle, "%3d\t", matriz.ADdatoimp[i][j]); fprintf(handle, "\t\t");
! 630: if(matriz.ADdir_imp != NULL) for(j=0; j<dim; j++) fprintf(handle, "%3d\t", matriz.ADdir_imp[i][j]); fprintf(handle, "\t\t");
! 631: if(matriz.ADpilaimp != NULL) for(j=0; j<dim; j++) fprintf(handle, "%3d\t", matriz.ADpilaimp[i][j]); fprintf(handle, "\t\t");
! 632: if(matriz.ADestadoimp != NULL) for(j=0; j<dim; j++) fprintf(handle, "%3d\t", matriz.ADestadoimp[i][j]); fprintf(handle, "\n");
! 633: }
! 634:
! 635: /* parámetros calculados */
! 636: /* pasos de computación */
! 637: if(configuracion.pasoscomputacion == SI)
! 638: {
! 639: if(matriz.ADdatoimp != NULL) {fprintf(handle, "pasos\t%.3f", pasos->ADdatoimp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 640: if(matriz.ADdir_imp != NULL) {fprintf(handle, "pasos\t%.3f", pasos->ADdir_imp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 641: if(matriz.ADpilaimp != NULL) {fprintf(handle, "pasos\t%.3f", pasos->ADpilaimp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 642: if(matriz.ADestadoimp != NULL) {fprintf(handle, "pasos\t%.3f", pasos->ADestadoimp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 643: fprintf(handle, "\n");
! 644: }
! 645: /* grado de paralelismo */
! 646: if(configuracion.gradoparalelismo == SI)
! 647: {
! 648: if(matriz.ADdatoimp != NULL) {fprintf(handle, "grado\t%.3f", grado->ADdatoimp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 649: if(matriz.ADdir_imp != NULL) {fprintf(handle, "grado\t%.3f", grado->ADdir_imp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 650: if(matriz.ADpilaimp != NULL) {fprintf(handle, "grado\t%.3f", grado->ADpilaimp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 651: if(matriz.ADestadoimp != NULL) {fprintf(handle, "grado\t%.3f", grado->ADestadoimp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 652: fprintf(handle, "\n");
! 653: }
! 654: /* acoplamiento */
! 655: if(configuracion.acoplamiento == SI)
! 656: {
! 657: if(matriz.ADdatoimp != NULL) {fprintf(handle, "acoplo\t%.3f", acoplo->ADdatoimp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 658: if(matriz.ADdir_imp != NULL) {fprintf(handle, "acoplo\t%.3f", acoplo->ADdir_imp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 659: if(matriz.ADpilaimp != NULL) {fprintf(handle, "acoplo\t%.3f", acoplo->ADpilaimp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 660: if(matriz.ADestadoimp != NULL) {fprintf(handle, "acoplo\t%.3f", acoplo->ADestadoimp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 661: fprintf(handle, "\n");
! 662: }
! 663: fprintf(handle, "\n\n");
! 664:
! 665:
! 666: /* FILA 5: etiquetas */
! 667: if(matriz.Sdatoexp != NULL) {fprintf(handle, "Sdatoexp"); for(i=0; i<dim+2; i++) fprintf(handle, "\t");}
! 668: if(matriz.Sdir_exp != NULL) {fprintf(handle, "Sdir_exp"); for(i=0; i<dim+2; i++) fprintf(handle, "\t");}
! 669: if(matriz.Spilaexp != NULL) {fprintf(handle, "Spilaexp"); for(i=0; i<dim+2; i++) fprintf(handle, "\t");}
! 670: if(matriz.Sestadoexp != NULL) {fprintf(handle, "Sestadoexp"); for(i=0; i<dim+2; i++) fprintf(handle, "\t");}
! 671: fprintf(handle, "\n");
! 672:
! 673: /* matrices */
! 674: for(i=0; i<dim; i++)
! 675: {
! 676: if(matriz.Sdatoexp != NULL) for(j=0; j<dim; j++) fprintf(handle, "%3d\t", matriz.Sdatoexp[i][j]); fprintf(handle, "\t\t");
! 677: if(matriz.Sdir_exp != NULL) for(j=0; j<dim; j++) fprintf(handle, "%3d\t", matriz.Sdir_exp[i][j]); fprintf(handle, "\t\t");
! 678: if(matriz.Spilaexp != NULL) for(j=0; j<dim; j++) fprintf(handle, "%3d\t", matriz.Spilaexp[i][j]); fprintf(handle, "\t\t");
! 679: if(matriz.Sestadoexp != NULL) for(j=0; j<dim; j++) fprintf(handle, "%3d\t", matriz.Sestadoexp[i][j]); fprintf(handle, "\n");
! 680: }
! 681:
! 682: /* parámetros calculados */
! 683: /* pasos de computación */
! 684: if(configuracion.pasoscomputacion == SI)
! 685: {
! 686: if(matriz.Sdatoexp != NULL) {fprintf(handle, "pasos\t%.3f", pasos->Sdatoexp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 687: if(matriz.Sdir_exp != NULL) {fprintf(handle, "pasos\t%.3f", pasos->Sdir_exp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 688: if(matriz.Spilaexp != NULL) {fprintf(handle, "pasos\t%.3f", pasos->Spilaexp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 689: if(matriz.Sestadoexp != NULL) {fprintf(handle, "pasos\t%.3f", pasos->Sestadoexp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 690: fprintf(handle, "\n");
! 691: }
! 692: /* grado de paralelismo */
! 693: if(configuracion.gradoparalelismo == SI)
! 694: {
! 695: if(matriz.Sdatoexp != NULL) {fprintf(handle, "grado\t%.3f", grado->Sdatoexp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 696: if(matriz.Sdir_exp != NULL) {fprintf(handle, "grado\t%.3f", grado->Sdir_exp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 697: if(matriz.Spilaexp != NULL) {fprintf(handle, "grado\t%.3f", grado->Spilaexp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 698: if(matriz.Sestadoexp != NULL) {fprintf(handle, "grado\t%.3f", grado->Sestadoexp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 699: fprintf(handle, "\n");
! 700: }
! 701: /* acoplamiento */
! 702: if(configuracion.acoplamiento == SI)
! 703: {
! 704: if(matriz.Sdatoexp != NULL) {fprintf(handle, "acoplo\t%.3f", acoplo->Sdatoexp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 705: if(matriz.Sdir_exp != NULL) {fprintf(handle, "acoplo\t%.3f", acoplo->Sdir_exp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 706: if(matriz.Spilaexp != NULL) {fprintf(handle, "acoplo\t%.3f", acoplo->Spilaexp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 707: if(matriz.Sestadoexp != NULL) {fprintf(handle, "acoplo\t%.3f", acoplo->Sestadoexp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 708: fprintf(handle, "\n");
! 709: }
! 710: fprintf(handle, "\n\n");
! 711:
! 712:
! 713: /* FILA 6: etiquetas */
! 714: if(matriz.Sdatoimp != NULL) {fprintf(handle, "Sdatoimp"); for(i=0; i<dim+2; i++) fprintf(handle, "\t");}
! 715: if(matriz.Sdir_imp != NULL) {fprintf(handle, "Sdir_imp"); for(i=0; i<dim+2; i++) fprintf(handle, "\t");}
! 716: if(matriz.Spilaimp != NULL) {fprintf(handle, "Spilaimp"); for(i=0; i<dim+2; i++) fprintf(handle, "\t");}
! 717: if(matriz.Sestadoimp != NULL) {fprintf(handle, "Sestadoimp"); for(i=0; i<dim+2; i++) fprintf(handle, "\t");}
! 718: fprintf(handle, "\n");
! 719:
! 720: /* matrices */
! 721: for(i=0; i<dim; i++)
! 722: {
! 723: if(matriz.Sdatoimp != NULL) for(j=0; j<dim; j++) fprintf(handle, "%3d\t", matriz.Sdatoimp[i][j]); fprintf(handle, "\t\t");
! 724: if(matriz.Sdir_imp != NULL) for(j=0; j<dim; j++) fprintf(handle, "%3d\t", matriz.Sdir_imp[i][j]); fprintf(handle, "\t\t");
! 725: if(matriz.Spilaimp != NULL) for(j=0; j<dim; j++) fprintf(handle, "%3d\t", matriz.Spilaimp[i][j]); fprintf(handle, "\t\t");
! 726: if(matriz.Sestadoimp != NULL) for(j=0; j<dim; j++) fprintf(handle, "%3d\t", matriz.Sestadoimp[i][j]); fprintf(handle, "\n");
! 727: }
! 728:
! 729: /* parámetros calculados */
! 730: /* pasos de computación */
! 731: if(configuracion.pasoscomputacion == SI)
! 732: {
! 733: if(matriz.Sdatoimp != NULL) {fprintf(handle, "pasos\t%.3f", pasos->Sdatoimp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 734: if(matriz.Sdir_imp != NULL) {fprintf(handle, "pasos\t%.3f", pasos->Sdir_imp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 735: if(matriz.Spilaimp != NULL) {fprintf(handle, "pasos\t%.3f", pasos->Spilaimp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 736: if(matriz.Sestadoimp != NULL) {fprintf(handle, "pasos\t%.3f", pasos->Sestadoimp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 737: fprintf(handle, "\n");
! 738: }
! 739: /* grado de paralelismo */
! 740: if(configuracion.gradoparalelismo == SI)
! 741: {
! 742: if(matriz.Sdatoimp != NULL) {fprintf(handle, "grado\t%.3f", grado->Sdatoimp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 743: if(matriz.Sdir_imp != NULL) {fprintf(handle, "grado\t%.3f", grado->Sdir_imp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 744: if(matriz.Spilaimp != NULL) {fprintf(handle, "grado\t%.3f", grado->Spilaimp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 745: if(matriz.Sestadoimp != NULL) {fprintf(handle, "grado\t%.3f", grado->Sestadoimp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 746: fprintf(handle, "\n");
! 747: }
! 748: /* acoplamiento */
! 749: if(configuracion.acoplamiento == SI)
! 750: {
! 751: if(matriz.Sdatoimp != NULL) {fprintf(handle, "acoplo\t%.3f", acoplo->Sdatoimp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 752: if(matriz.Sdir_imp != NULL) {fprintf(handle, "acoplo\t%.3f", acoplo->Sdir_imp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 753: if(matriz.Spilaimp != NULL) {fprintf(handle, "acoplo\t%.3f", acoplo->Spilaimp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 754: if(matriz.Sestadoimp != NULL) {fprintf(handle, "acoplo\t%.3f", acoplo->Sestadoimp); for(i=0; i<dim+1; i++) fprintf(handle, "\t");}
! 755: fprintf(handle, "\n");
! 756: }
! 757: fprintf(handle, "\n\n");
! 758:
! 759:
! 760: /* matriz D */
! 761: /* etiqueta */
! 762: fprintf(handle, "D\n");
! 763: /* matriz */
! 764: for(i=0; i<dim; i++) {for(j=0; j<dim; j++) fprintf(handle, "%3d\t", matriz.D[i][j]); fprintf(handle, "\n");}
! 765: /* parámetros calculados */
! 766: /* pasos de computación */
! 767: if(configuracion.pasoscomputacion == SI) fprintf(handle, "pasos\t%.3f\n", pasos->D);
! 768: /* grado de paralelismo */
! 769: if(configuracion.gradoparalelismo == SI) fprintf(handle, "grado\t%.3f\n", grado->D);
! 770: /* acoplamiento */
! 771: if(configuracion.acoplamiento == SI) fprintf(handle, "acoplo\t%.3f\n", acoplo->D);
! 772: fprintf(handle, "\n\n");
! 773:
! 774: /* orden parcial asociado a la matriz D */
! 775: if(configuracion.ordenparcial == SI)
! 776: {
! 777: fprintf(handle, "orden parcial asociado a la matriz D\n");
! 778: /* coloco el caracter "'" delante del listado del OrdenParcial */
! 779: /* para que EXCEL lo tome como cadena y no como fecha */
! 780: for(i=0; i<dim; i++) fprintf(handle, "paso\t%3d\t'%s\n", i+1, OrdenParcial[i]);
! 781: fprintf(handle, "\n\n");
! 782: }
! 783:
! 784: /* matriz C */
! 785: if(configuracion.matrizcaminos == SI)
! 786: {
! 787: fprintf(handle, "C\n");
! 788: for(i=0; i<dim; i++) {for(j=0; j<dim; j++) fprintf(handle, "%3d\t", matrizC[i][j]); fprintf(handle, "\n");}
! 789: fprintf(handle, "\n\n");
! 790: }
! 791:
! 792:
! 793:
! 794: /* cierro el fichero */
! 795: if(fclose(handle))
! 796: {
! 797: sprintf(mensaje, "[Matrices2FicheroVentana] El fichero '%s' no se ha podido cerrar", fichero);
! 798: Notificar(mensaje, ERROR_SEGUIR, ECO_NO);
! 799: }
! 800: else
! 801: {
! 802: sprintf(mensaje, "[Matrices2FicheroVentana] El fichero '%s' ha sido cerrado con éxito", fichero);
! 803: Notificar(mensaje, NO_ERROR, ECO_NO);
! 804: }
! 805: }
! 806: else
! 807: {
! 808: sprintf(mensaje, "[Matrices2FicheroVentana] El fichero '%s' no se ha podido abrir", fichero);
! 809: Notificar(mensaje, ERROR_SEGUIR, ECO_NO);
! 810: }
! 811: }
! 812:
! 813:
! 814: /* función que salva la configuración en un fichero previamente abierto */
! 815: /* OJO -> faltan parámetros */
! 816: /* ¿usar tantas cadenas constantes puede consumir memoria de una manera relevante?*/
! 817: #if 0
! 818: void SalvarConfiguracion(FILE *handle)
! 819: {
! 820: /* escribo la configuración */
! 821: fprintf(handle, "CAPTURA DE CONFIGURACIÓN =\t%s\n", configuracion.captura);
! 822: /* FICHERO DE CONFIGURACIÓN POR DEFECTO */
! 823: fprintf(handle, "FICHERO DE CONFIGURACIÓN =\t%s\n", configuracion.ficheroconfig);
! 824: /* FICHEROS DE BASE DE DATOS */
! 825: fprintf(handle, "FICHERO DE OPERACIONES =\t%s\n", configuracion.ficheronemos);
! 826: fprintf(handle, "FICHERO DE SÍMBOLOS =\t%s\n", configuracion.ficheroubis);
! 827: if(configuracion.cpi == SI)
! 828: fprintf(handle, "FICHERO DE CICLOS =\t%s\n", configuracion.ficherociclos);
! 829:
! 830: /* ORIGEN DE DATOS */
! 831: switch(configuracion.origen)
! 832: {
! 833: case TRAZA:
! 834: fprintf(handle, "ORIGEN DE DATOS =\t%s\n", "TRAZA");
! 835: break;
! 836:
! 837: case SECUENCIA:
! 838: fprintf(handle, "ORIGEN DE DATOS =\t%s\n", "SECUENCIA");
! 839: break;
! 840:
! 841: case CADENAHEX:
! 842: fprintf(handle, "ORIGEN DE DATOS =\t%s\n", "CADENAHEX");
! 843: break;
! 844: }
! 845:
! 846: if(configuracion.origen != CADENAHEX)
! 847: fprintf(handle, "FICHERO DE DATOS =\t%s\n", configuracion.ficherodatos);
! 848: else
! 849: fprintf(handle, "SECUENCIA DE INSTRUCCIÓN =\t%s\n", configuracion.cadenahex);
! 850:
! 851: if(configuracion.origen == TRAZA)
! 852: {
! 853: fprintf(handle, "RANGO =\t%.2f%%\n", configuracion.rango);
! 854: fprintf(handle, "COMIENZO =\t%.2f%%\n", configuracion.comienzo);
! 855: fprintf(handle, "INSTRUCCIÓN DE COMIENZO =\t%lu\n", configuracion.primera);
! 856: fprintf(handle, "INSTRUCCIÓN FINAL =\t%lu\n", configuracion.ultima);
! 857: }
! 858:
! 859: /* EVALUAR */
! 860: fprintf(handle, "RECUENTOS =\t%s\n", configuracion.recuentos==SI ? "SI":"NO");
! 861: fprintf(handle, "ASIGNAR CPI =\t%s\n", configuracion.cpi==SI ? "SI":"NO");
! 862:
! 863: /* PARÁMETROS DE ANÁLISIS DE DEPENDENCIAS DE DATOS */
! 864: fprintf(handle, "TAMAÑO VENTANA INSTRUCCIONES =\t%u\n", configuracion.ventana);
! 865: fprintf(handle, "LISTADO DE UBICACIONES =\t%s\n", configuracion.listaubis);
! 866: fprintf(handle, "DESACOPLAR TIPOS DE DEPENDENCIAS =\t%s\n", configuracion.desacoplartipos==SI ? "SI":"NO");
! 867: fprintf(handle, "DEPENDENCIAS VERDADERAS =\t%s\n", configuracion.verdaderas==SI ? "SI":"NO");
! 868: fprintf(handle, "ANTIDEPENDENCIAS =\t%s\n", configuracion.antidependencias==SI ? "SI":"NO");
! 869: fprintf(handle, "DEPENDENCIAS DE SALIDA =\t%s\n", configuracion.salida==SI ? "SI":"NO");
! 870: fprintf(handle, "DESACOPLAR ORIGEN DE OPERANDOS =\t%s\n", configuracion.desacoplarorigen==SI ? "SI":"NO");
! 871: fprintf(handle, "OPERANDOS EXPLÍCITOS =\t%s\n", configuracion.explicitos==SI ? "SI":"NO");
! 872: fprintf(handle, "OPERANDOS IMPLÍCITOS =\t%s\n", configuracion.implicitos==SI ? "SI":"NO");
! 873: fprintf(handle, "DESACOPLAR FUENTES DE DEPENDENCIAS =\t%s\n", configuracion.desacoplarfuentes==SI ? "SI":"NO");
! 874: fprintf(handle, "DEPENDENCIAS DE DATOS =\t%s\n", configuracion.datos==SI ? "SI":"NO");
! 875: fprintf(handle, "DEPENDENCIAS DE DIRECCIONES =\t%s\n", configuracion.direcciones==SI ? "SI":"NO");
! 876: fprintf(handle, "DEPENDENCIAS DE PILA =\t%s\n", configuracion.pila==SI ? "SI":"NO");
! 877: fprintf(handle, "DEPENDENCIAS DE CÓDIGOS DE CONDICIÓN =\t%s\n", configuracion.cc==SI ? "SI":"NO");
! 878:
! 879: /* CALCULAR */
! 880: fprintf(handle, "CALCULAR GRADO DE PARALELISMO =\t%s\n", configuracion.gradoparalelismo==SI ? "SI":"NO");
! 881: fprintf(handle, "CALCULAR TIEMPO DE EJECUCIÓN =\t%s\n", configuracion.tiempo==SI ? "SI":"NO");
! 882:
! 883: /* CONFIGURACIÓN DEL INFORME */
! 884: fprintf(handle, "FICHERO DE RESULTADOS =\t%s.xls\n", configuracion.ficheroresultados);
! 885: fprintf(handle, "VOLCAR BD EN FICHEROS =\t%s\n\n", configuracion.volcarBD==SI ? "SI":"NO");
! 886: }
! 887: #endif
! 888:
! 889: /* función SOFISTICADA que salva la configuración en un fichero previamente abierto */
! 890:
! 891: /* cabecera -> cadena con un texto explicativo */
! 892: /* fecha -> SI / NO incluir fecha */
! 893: /* completo -> SI;CFG incluir todos los parámetros; excluir los de captura de cfg */
! 894: /* comentarios -> SI / NO incluir comentarios de clases de parámetros */
! 895: /* separador de campos de datos (' ', '\t') */
! 896:
! 897: /* cualquier información que no sea campo de datos se comenta con '[ ]' */
! 898: /* el fichero de configuración admite líneas en blanco */
! 899: /* la función 'completo' no está implementada */
! 900:
! 901: void SalvarConfiguracionFichero(FILE *handle, char *cabecera, char fecha, char completo, char comentarios, char separador)
! 902: {
! 903: time_t tiempo;
! 904: struct tm *ptr_tm;
! 905: char cadena[MAX_LINE];
! 906:
! 907: /* si hay cabecera la vuelco en el fichero */
! 908: if(strcmp(cabecera, "") != 0)
! 909: {
! 910: fprintf(handle, "[ADD v5.1 --Analizador de Dependencias de Datos--]\n\n");
! 911: fprintf(handle, "[%s]\n\n", cabecera);
! 912: }
! 913:
! 914: /* si hay que volcar la fecha la capturo y la vuelco */
! 915: if(fecha == SI)
! 916: {
! 917: /* fecha y hora */
! 918: tiempo = time(NULL);
! 919: ptr_tm = localtime(&tiempo);
! 920: strftime(cadena, MAX_LINE, "%d/%m/%y - %H:%M:%S", ptr_tm);
! 921:
! 922: fprintf(handle, "[Fecha de creación del fichero:\t%s]\n\n", cadena);
! 923: }
! 924:
! 925: /* PARÁMETROS DE CONFIGURACIÓN */
! 926: if(comentarios == SI) fprintf(handle, "\n[%s]\n", etiquetas[0]);
! 927:
! 928: if(completo != CFG)
! 929: {
! 930: /* OBSERVACIONES */
! 931: if(comentarios == SI) fprintf(handle, "\n[%s]\n", etiquetas[1]);
! 932: /* captura de configuración */
! 933: fprintf(handle, "%s =%c%s\n", claves[0], separador, configuracion.captura);
! 934:
! 935: /* FICHERO DE CONFIGURACIÓN POR DEFECTO */
! 936: if(comentarios == SI) fprintf(handle, "\n[%s]\n", etiquetas[2]);
! 937: fprintf(handle, "%s =%c'%s'\n", claves[1], separador, configuracion.ficheroconfig);
! 938: }
! 939:
! 940: /* FICHEROS DE BASE DE DATOS */
! 941: if(comentarios == SI) fprintf(handle, "\n[%s]\n", etiquetas[3]);
! 942: /* fichero de operaciones */
! 943: fprintf(handle, "%s =%c'%s'\n", claves[2], separador, configuracion.ficheronemos);
! 944: /* fichero de símbolos */
! 945: fprintf(handle, "%s =%c'%s'\n", claves[3], separador, configuracion.ficheroubis);
! 946: /* fichero de ciclos */
! 947: fprintf(handle, "%s =%c'%s'\n", claves[4], separador, configuracion.ficherociclos);
! 948:
! 949: /* ORIGEN DE DATOS */
! 950: if(comentarios == SI) fprintf(handle, "\n[%s]\n", etiquetas[4]);
! 951: /* origen de datos */
! 952: fprintf(handle, "%s =%c", claves[5], separador);
! 953: switch(configuracion.origen)
! 954: {
! 955: case TRAZA:
! 956: fprintf(handle, "TRAZA\n");
! 957: break;
! 958:
! 959: case SECUENCIA:
! 960: fprintf(handle, "SECUENCIA\n");
! 961: break;
! 962:
! 963: case CADENAHEX:
! 964: fprintf(handle, "CADENAHEX\n");
! 965: break;
! 966: }
! 967: /* fichero de datos */
! 968: fprintf(handle, "%s =%c'%s'\n", claves[6], separador, configuracion.ficherodatos);
! 969: /* secuencia hexadecimal de una instrucción */
! 970: fprintf(handle, "%s =%c%s\n", claves[7], separador, configuracion.cadenahex);
! 971: /* rango de análisis en porcentaje (sólo trazas) */
! 972: fprintf(handle, "%s =%c%2.2f%%\n", claves[8], separador, configuracion.rango);
! 973: /* instrucción de comienzo en porcentaje */
! 974: fprintf(handle, "%s =%c%2.2f\n", claves[9], separador, configuracion.comienzo);
! 975: /* primera instrucción */
! 976: fprintf(handle, "%s =%c%lu\n", claves[10], separador, configuracion.primera);
! 977: /* última instrucción */
! 978: fprintf(handle, "%s =%c%lu\n", claves[11], separador, configuracion.ultima);
! 979:
! 980: /* EVALUAR */
! 981: if(comentarios == SI) fprintf(handle, "\n[%s]\n", etiquetas[5]);
! 982: /* ¿hacer recuentos? */
! 983: fprintf(handle, "%s =%c%s\n", claves[12], separador, configuracion.recuentos==SI ? "SI":"NO");
! 984: /* ¿asignar ciclos a cada instrucción? */
! 985: fprintf(handle, "%s =%c%s\n", claves[13], separador, configuracion.cpi==SI ? "SI":"NO");
! 986: /* ¿hacer análisis de dependencias? */
! 987: fprintf(handle, "%s =%c%s\n", claves[14], separador, configuracion.dependencias==SI ? "SI":"NO");
! 988:
! 989: /* PARÁMETROS DE ANÁLISIS DE DEPENDENCIAS */
! 990: if(comentarios == SI) fprintf(handle, "\n[%s]\n", etiquetas[6]);
! 991: /* tamaño de la ventana de instrucciones */
! 992: fprintf(handle, "%s =%c%d\n", claves[15], separador, configuracion.ventana);
! 993: /* listado de ubicaciones que van a la pizarra de dependencias */
! 994: fprintf(handle, "%s =%c'%s'\n", claves[16], separador, configuracion.listaubis);
! 995: /* ¿desacoplar tipos de dependencias? */
! 996: fprintf(handle, "%s =%c%s\n", claves[17], separador, configuracion.desacoplartipos==SI ? "SI":"NO");
! 997: /* ¿considerar dependencias verdaderas? */
! 998: fprintf(handle, "%s =%c%s\n", claves[18], separador, configuracion.verdaderas==SI ? "SI":"NO");
! 999: /* ¿considerar antidependencias? */
! 1000: fprintf(handle, "%s =%c%s\n", claves[19], separador, configuracion.antidependencias==SI ? "SI":"NO");
! 1001: /* ¿considerar dependencias de salida? */
! 1002: fprintf(handle, "%s =%c%s\n", claves[20], separador, configuracion.salida==SI ? "SI":"NO");
! 1003: /* ¿desacoplar origen de dependencias? */
! 1004: fprintf(handle, "%s =%c%s\n", claves[21], separador, configuracion.desacoplarorigen==SI ? "SI":"NO");
! 1005: /* ¿considerar explícitas? */
! 1006: fprintf(handle, "%s =%c%s\n", claves[22], separador, configuracion.explicitos==SI ? "SI":"NO");
! 1007: /* ¿considerar implícitas? */
! 1008: fprintf(handle, "%s =%c%s\n", claves[23], separador, configuracion.implicitos==SI ? "SI":"NO");
! 1009: /* ¿desacoplar fuentes de dependencias? */
! 1010: fprintf(handle, "%s =%c%s\n", claves[24], separador, configuracion.desacoplarfuentes==SI ? "SI":"NO");
! 1011: /* ¿procesamiento de datos? */
! 1012: fprintf(handle, "%s =%c%s\n", claves[25], separador, configuracion.datos==SI ? "SI":"NO");
! 1013: /* ¿cómputo de direcciones? */
! 1014: fprintf(handle, "%s =%c%s\n", claves[26], separador, configuracion.direcciones==SI ? "SI":"NO");
! 1015: /* ¿tráfico con la pila? */
! 1016: fprintf(handle, "%s =%c%s\n", claves[27], separador, configuracion.pila==SI ? "SI":"NO");
! 1017: /* ¿códigos de condición? */
! 1018: fprintf(handle, "%s =%c%s\n", claves[28], separador, configuracion.cc==SI ? "SI":"NO");
! 1019:
! 1020: /* CALCULAR */
! 1021: if(comentarios == SI) fprintf(handle, "\n[%s]\n", etiquetas[7]);
! 1022: /* ¿calcular CPI promedio? */
! 1023: fprintf(handle, "%s =%c%s\n", claves[29], separador, configuracion.CPImedio==SI ? "SI":"NO");
! 1024: /* ¿calcular tiempo de ejecución? */
! 1025: fprintf(handle, "%s =%c%s\n", claves[30], separador, configuracion.tiempo==SI ? "SI":"NO");
! 1026: /* ¿obtener la lista de orden parcial? */
! 1027: fprintf(handle, "%s =%c%s\n", claves[31], separador, configuracion.ordenparcial==SI ? "SI":"NO");
! 1028: /* ¿calcular la matriz de caminos? */
! 1029: fprintf(handle, "%s =%c%s\n", claves[32], separador, configuracion.matrizcaminos==SI ? "SI":"NO");
! 1030: /* ¿calcular pasos de computación para cada ventana? */
! 1031: fprintf(handle, "%s =%c%s\n", claves[33], separador, configuracion.pasoscomputacion==SI ? "SI":"NO");
! 1032: /* ¿determinar grado de paralelismo? */
! 1033: fprintf(handle, "%s =%c%s\n", claves[34], separador, configuracion.gradoparalelismo==SI ? "SI":"NO");
! 1034: /* ¿calcular acoplamiento? */
! 1035: fprintf(handle, "%s =%c%s\n", claves[35], separador, configuracion.acoplamiento==SI ? "SI":"NO");
! 1036: /* ¿generar histograma de pasos de computación? */
! 1037: fprintf(handle, "%s =%c%s\n", claves[36], separador, configuracion.distribucionpasos==SI ? "SI":"NO");
! 1038:
! 1039: /* CONFIGURACIÓN DEL INFORME */
! 1040: if(comentarios == SI) fprintf(handle, "\n[%s]\n", etiquetas[8]);
! 1041: /* volcar bases de datos en ficheros */
! 1042: fprintf(handle, "%s =%c%s\n", claves[37], separador, configuracion.volcarBD==SI ? "SI":"NO");
! 1043: /* volcar la configuración en curso en un fichero nuevo */
! 1044: fprintf(handle, "%s =%c%s\n", claves[38], separador, configuracion.crearficheroconfig==SI ? "SI":"NO");
! 1045: /* nombre del nuevo fichero de configuración */
! 1046: fprintf(handle, "%s =%c'%s'\n", claves[39], separador, configuracion.nuevoficheroconfig);
! 1047: /* lista de ventanas a volcar en ficheros EXCEL */
! 1048: fprintf(handle, "%s =%c'%s'\n", claves[40], separador, configuracion.volcarventana);
! 1049: /* nombre del fichero de resultados */
! 1050: fprintf(handle, "%s =%c'%s'\n", claves[41], separador, configuracion.ficheroresultados);
! 1051: /* nivel de notificación en el fichero de log */
! 1052: fprintf(handle, "%s =%c", claves[42], separador);
! 1053: switch(configuracion.nivelnotificaciones)
! 1054: {
! 1055: case ALL:
! 1056: fprintf(handle, "ALL\n");
! 1057: break;
! 1058:
! 1059: case EX_CFG:
! 1060: fprintf(handle, "EX_CFG\n");
! 1061: break;
! 1062:
! 1063: case ERRORS:
! 1064: fprintf(handle, "ERRORS\n");
! 1065: break;
! 1066: }
! 1067:
! 1068: /* INTERFASE GRÁFICA */
! 1069: if(comentarios == SI) fprintf(handle, "\n[%s]\n", etiquetas[9]);
! 1070: /* mostrar información de la instrucción en curso */
! 1071: fprintf(handle, "%s =%c%s\n", claves[43], separador, configuracion.verinstruccion==SI ? "SI":"NO");
! 1072: /* mostrar información de la ventna en curso */
! 1073: fprintf(handle, "%s =%c%s\n", claves[44], separador, configuracion.verventana==SI ? "SI":"NO");
! 1074:
! 1075: fprintf(handle, "\n\n");
! 1076: }
! 1077:
! 1078:
! 1079: /* función que crea un fichero de configuración con los parámetros de configuración en curso */
! 1080:
! 1081: void CrearFicheroConfiguracion()
! 1082: {
! 1083: FILE *handle;
! 1084: char nombrefichero[MAX_LINE];
! 1085: char mensaje[MAX_LINE];
! 1086:
! 1087: sprintf(nombrefichero, "%s.cfg", configuracion.nuevoficheroconfig);
! 1088:
! 1089: /* abro el fichero */
! 1090: if((handle = fopen(nombrefichero, "w")) != NULL)
! 1091: {
! 1092: sprintf(mensaje, "[CrearFicheroConfiguracion] El fichero '%s' se ha abierto con éxito", nombrefichero);
! 1093: Notificar(mensaje, NO_ERROR, ECO_NO);
! 1094:
! 1095: /* vuelco la configuración */
! 1096: strcpy(mensaje, "Nuevo fichero de configuración");
! 1097: /* fecha SI, completo CFG, comentarios SI, separador " "); */
! 1098: SalvarConfiguracionFichero(handle, mensaje, SI, CFG, SI, ' ');
! 1099:
! 1100: /* SalvarConfiguracion(handle); */
! 1101:
! 1102: /* cierro el fichero */
! 1103: if(fclose(handle))
! 1104: {
! 1105: sprintf(mensaje, "[CrearFicheroConfiguracion] El fichero '%s' no se ha podido cerrar", nombrefichero);
! 1106: Notificar(mensaje, ERROR_SEGUIR, ECO_NO);
! 1107: }
! 1108: else
! 1109: {
! 1110: sprintf(mensaje, "[CrearFicheroConfiguracion] El fichero '%s' ha sido cerrado con éxito", nombrefichero);
! 1111: Notificar(mensaje, NO_ERROR, ECO_NO);
! 1112: }
! 1113: }
! 1114: else
! 1115: {
! 1116: sprintf(mensaje, "[CrearFicheroConfiguracion] El fichero '%s' no se ha podido abrir", nombrefichero);
! 1117: Notificar(mensaje, ERROR_SEGUIR, ECO_NO);
! 1118: }
! 1119: }
! 1120:
! 1121:
! 1122: /* EJEMPLO de manejo de funciones de fecha y hora */
! 1123: /*
! 1124: #include <stdio.h>
! 1125: #include <time.h>
! 1126:
! 1127: int main()
! 1128: {
! 1129: time_t tiempo;
! 1130: char cad[80];
! 1131: struct tm *tmPtr;
! 1132:
! 1133: tiempo = time(NULL);
! 1134: tmPtr = localtime(&tiempo);
! 1135: strftime( cad, 80, "%H:%M.%S, %A de %B de %Y", tmPtr );
! 1136:
! 1137: printf( "La hora local es: %s\n", asctime(tmPtr) );
! 1138: printf( "La hora y fecha locales son: %s\n", cad );
! 1139:
! 1140: return 0;
! 1141: }
! 1142: */
! 1143:
! 1144:
! 1145: /* esta función escribe una variable agregada en un fichero */
! 1146:
! 1147: void SalvarVariableAgregada(char *cadena, parametromatriz *variable, FILE *handle)
! 1148: {
! 1149: if(matriz.Ddatoexp != NULL) fprintf(handle, "%s %s\t%f\n", cadena, "Ddatoexp", variable->Ddatoexp);
! 1150: if(matriz.Ddir_exp != NULL) fprintf(handle, "%s %s\t%f\n", cadena, "Ddir_exp", variable->Ddir_exp);
! 1151: if(matriz.Dpilaexp != NULL) fprintf(handle, "%s %s\t%f\n", cadena, "Dpilaexp", variable->Dpilaexp);
! 1152: if(matriz.Destadoexp != NULL) fprintf(handle, "%s %s\t%f\n", cadena, "Destadoexp", variable->Destadoexp);
! 1153:
! 1154: if(matriz.Ddatoimp != NULL) fprintf(handle, "%s %s\t%f\n", cadena, "Ddatoimp", variable->Ddatoimp);
! 1155: if(matriz.Ddir_imp != NULL) fprintf(handle, "%s %s\t%f\n", cadena, "Ddir_imp", variable->Ddir_imp);
! 1156: if(matriz.Dpilaimp != NULL) fprintf(handle, "%s %s\t%f\n", cadena, "Dpilaimp", variable->Dpilaimp);
! 1157: if(matriz.Destadoimp != NULL) fprintf(handle, "%s %s\t%f\n", cadena, "Destadoimp", variable->Destadoimp);
! 1158:
! 1159: if(matriz.ADdatoexp != NULL) fprintf(handle, "%s %s\t%f\n", cadena, "ADdatoexp", variable->ADdatoexp);
! 1160: if(matriz.ADdir_exp != NULL) fprintf(handle, "%s %s\t%f\n", cadena, "ADdir_exp", variable->ADdir_exp);
! 1161: if(matriz.ADpilaexp != NULL) fprintf(handle, "%s %s\t%f\n", cadena, "ADpilaexp", variable->ADpilaexp);
! 1162: if(matriz.ADestadoexp != NULL) fprintf(handle, "%s %s\t%f\n", cadena, "ADestadoexp", variable->ADestadoexp);
! 1163:
! 1164: if(matriz.ADdatoimp != NULL) fprintf(handle, "%s %s\t%f\n", cadena, "ADdatoimp", variable->ADdatoimp);
! 1165: if(matriz.ADdir_imp != NULL) fprintf(handle, "%s %s\t%f\n", cadena, "ADdir_imp", variable->ADdir_imp);
! 1166: if(matriz.ADpilaimp != NULL) fprintf(handle, "%s %s\t%f\n", cadena, "ADpilaimp", variable->ADpilaimp);
! 1167: if(matriz.ADestadoimp != NULL) fprintf(handle, "%s %s\t%f\n", cadena, "ADestadoimp", variable->ADestadoimp);
! 1168:
! 1169: if(matriz.Sdatoexp != NULL) fprintf(handle, "%s %s\t%f\n", cadena, "Sdatoexp", variable->Sdatoexp);
! 1170: if(matriz.Sdir_exp != NULL) fprintf(handle, "%s %s\t%f\n", cadena, "Sdir_exp", variable->Sdir_exp);
! 1171: if(matriz.Spilaexp != NULL) fprintf(handle, "%s %s\t%f\n", cadena, "Spilaexp", variable->Spilaexp);
! 1172: if(matriz.Sestadoexp != NULL) fprintf(handle, "%s %s\t%f\n", cadena, "Sestadoexp", variable->Sestadoexp);
! 1173:
! 1174: if(matriz.Sdatoimp != NULL) fprintf(handle, "%s %s\t%f\n", cadena, "Sdatoimp", variable->Sdatoimp);
! 1175: if(matriz.Sdir_imp != NULL) fprintf(handle, "%s %s\t%f\n", cadena, "Sdir_imp", variable->Sdir_imp);
! 1176: if(matriz.Spilaimp != NULL) fprintf(handle, "%s %s\t%f\n", cadena, "Spilaimp", variable->Spilaimp);
! 1177: if(matriz.Sestadoimp != NULL) fprintf(handle, "%s %s\t%f\n", cadena, "Sestadoimp", variable->Sestadoimp);
! 1178:
! 1179: if(matriz.D != NULL) fprintf(handle, "%s %s\t%f\n", cadena, "D", variable->D);
! 1180:
! 1181: fprintf(handle, "\n");
! 1182: }
! 1183:
! 1184:
! 1185:
! 1186: /* RESULTADOS */
! 1187: /* función que crea un fichero EXCEL con los resultados */
! 1188:
! 1189: void CrearFicheroResultados (char *fichero)
! 1190: {
! 1191: time_t tiempo;
! 1192: struct tm *ptr_tm;
! 1193:
! 1194: FILE *handle;
! 1195: unsigned int i;
! 1196: char nombrefichero[MAX_LINE];
! 1197:
! 1198: char mensaje[MAX_LINE];
! 1199: char *ptr;
! 1200:
! 1201:
! 1202: /* el fichero de resultados va a tener el formato de texto EXCEL */
! 1203: /* construyo el nombre del fichero con el prefijo indicado en la */
! 1204: /* configuración más el nombre del fichero origen de datos sin */
! 1205: /* extensión más el tamaño de la ventana de instrucciones */
! 1206: /* al nombre del fichero le asigno la extensión .XLS */
! 1207:
! 1208: /* esto cambia la configuración ya que añade la extensión => strcat(fichero, ".xls"); */
! 1209: /* otro modo de hacer lo mismo => sprintf(cadena, "%s.xls", fichero); */
! 1210:
! 1211: /* construyo el nombre del fichero de resultados */
! 1212: strcpy(mensaje, configuracion.ficherodatos);
! 1213: ptr = mensaje + strlen(mensaje); /* coloco un puntero al final */
! 1214: /* busco la última barra viajando hacia atrás hasta alcanzar el comienzo */
! 1215: while(*(--ptr)!='/' && *ptr!='\\' && ptr!=mensaje-1);
! 1216: strcpy(mensaje, ++ptr); /* actualizo la cadena */
! 1217: ptr = mensaje; /* coloco el puntero al principio */
! 1218: /* finalizo la cadena cuando encuentro la .ext */
! 1219: while(*(++ptr)!='.' && *ptr!='\0'); *ptr = '\0';
! 1220: sprintf(nombrefichero, "%s %s %u.xls", fichero, mensaje, configuracion.ventana);
! 1221:
! 1222:
! 1223: /* abro el fichero */
! 1224: if((handle = fopen(nombrefichero, "w")) != NULL)
! 1225: {
! 1226: sprintf(mensaje, "[CrearFicheroResultados] El fichero '%s' se ha abierto con éxito", nombrefichero);
! 1227: Notificar(mensaje, NO_ERROR, ECO_NO);
! 1228:
! 1229: /* escribo una pequeña cabecera */
! 1230: fprintf(handle, "RESULTADOS DEL ANÁLISIS\n\n");
! 1231: /* fecha y hora */
! 1232: tiempo = time(NULL);
! 1233: ptr_tm = localtime(&tiempo);
! 1234: /* la cadena devuelta tiene formato inglés => strcpy(mensaje, asctime(ptr_tm)); */
! 1235: strftime(mensaje, MAX_LINE, "%d/%m/%y\t%H:%M:%S", ptr_tm);
! 1236: /*
! 1237: strftime(mensaje, MAX_LINE, "%c", ptr_tm);
! 1238: strftime(mensaje, MAX_LINE, "%#c", ptr_tm);
! 1239: strftime(mensaje, MAX_LINE, "%x", ptr_tm);
! 1240: strftime(mensaje, MAX_LINE, "%#x", ptr_tm);
! 1241: */
! 1242:
! 1243: fprintf(handle, "Fecha de creación del fichero\t%s \n\n", mensaje);
! 1244:
! 1245: /* vuelco la configuración en el fichero de resultados */
! 1246: /* sin cabecera, fecha NO, completo SI, comentarios SI, separador "\t"); */
! 1247: SalvarConfiguracionFichero(handle, "", NO, SI, SI, '\t');
! 1248:
! 1249: /* SalvarConfiguracion(handle); */
! 1250:
! 1251:
! 1252: /* VOLUMEN DE INFORMACIÓN PROCESADA */
! 1253: fprintf(handle, "VOLUMEN DE INFORMACIÓN PROCESADA\n");
! 1254: fprintf(handle, "Instrucciones procesadas\t%lu\n", instruccion-1);
! 1255: fprintf(handle, "Ventanas procesadas\t%lu", ventana);
! 1256: fprintf(handle, "\n\n");
! 1257:
! 1258: /* INFORME DE RECUENTOS */
! 1259: if(configuracion.recuentos == SI)
! 1260: {
! 1261: fprintf(handle, "RECUENTOS:\n");
! 1262: fprintf(handle, "Nemónicos:\n");
! 1263: for(i=0; i<num_nemonicos; i++) /* RECUENTO DE NEMÓNICOS */
! 1264: {
! 1265: fprintf(handle, "%s\t%lu\n", nemonicos[i].nemonico, contadornemonicos[i]);
! 1266: }
! 1267:
! 1268: fprintf(handle, "\n");
! 1269: fprintf(handle, "Acceso a operandos explícitos:\n");
! 1270: fprintf(handle, "Símbolos\tlecturas\tescrituras\n");
! 1271: for(i=0; i<num_simbolos; i++) /* RECUENTO DE ACCESO A DATOS */
! 1272: {
! 1273: fprintf(handle, "%s\t%lu\t%lu\n", simbolos[i].simbolo, contadorlecturas[i], contadorescrituras[i]);
! 1274: }
! 1275: fprintf(handle, "\n\n");
! 1276: }
! 1277:
! 1278: /* INFORME CPI MEDIO */
! 1279: if(configuracion.CPImedio == SI)
! 1280: {
! 1281: fprintf(handle, "CPI medio:\t%f", cpimedio);
! 1282: fprintf(handle, "\n\n");
! 1283: }
! 1284:
! 1285: /* TIEMPO DE EJECUCIÓN */
! 1286: if(configuracion.tiempo == SI)
! 1287: {
! 1288: fprintf(handle, "Tiempo de ejecución:\t%f\tseg", tiempoejecucion);
! 1289: fprintf(handle, "\n\n");
! 1290: }
! 1291:
! 1292: /* RESULTADOS DEL ANÁLISIS DE DEPENDENCIAS DE DATOS */
! 1293: if(configuracion.dependencias == SI)
! 1294: {
! 1295: fprintf(handle, "ANÁLISIS DE DEPENDENCIAS DE DATOS:\n");
! 1296: if(configuracion.pasoscomputacion == SI)
! 1297: {
! 1298: fprintf(handle, "Promedio de pasos de computación\n");
! 1299: SalvarVariableAgregada("promedio pasos", mediapasos, handle);
! 1300: fprintf(handle, "\n");
! 1301: }
! 1302: if(configuracion.gradoparalelismo == SI)
! 1303: {
! 1304: fprintf(handle, "Promedio de grado de paralelismo normalizado\n");
! 1305: SalvarVariableAgregada("grado de paralelismo", mediagrado, handle);
! 1306: fprintf(handle, "\n");
! 1307: }
! 1308: if(configuracion.acoplamiento == SI)
! 1309: {
! 1310: fprintf(handle, "Promedio de acoplamiento\n");
! 1311: SalvarVariableAgregada("acoplamiento", mediaacoplo, handle);
! 1312: fprintf(handle, "\n");
! 1313: }
! 1314: if(configuracion.distribucionpasos == SI)
! 1315: {
! 1316: fprintf(handle, "Histograma de pasos de computación para la matriz D\n");
! 1317: fprintf(handle, "pasos\tnúmero ventanas\n");
! 1318: /* OJO, el histograma va de 1 al tamaño de la ventana (el 0 no sirve) */
! 1319: for(i=1; i<configuracion.ventana+1; i++)
! 1320: {
! 1321: fprintf(handle, "%u\t%lu\n", i, distribucionpasos[i]);
! 1322: }
! 1323: }
! 1324: fprintf(handle, "\n\n");
! 1325: }
! 1326:
! 1327:
! 1328:
! 1329: /* cierro el fichero */
! 1330: if(fclose(handle))
! 1331: {
! 1332: sprintf(mensaje, "[CrearFicheroResultados] El fichero '%s' no se ha podido cerrar", nombrefichero);
! 1333: Notificar(mensaje, ERROR_SEGUIR, ECO_NO);
! 1334: }
! 1335: else
! 1336: {
! 1337: sprintf(mensaje, "[CrearFicheroResultados] El fichero '%s' ha sido cerrado con éxito", nombrefichero);
! 1338: Notificar(mensaje, NO_ERROR, ECO_NO);
! 1339: }
! 1340: }
! 1341: else
! 1342: {
! 1343: sprintf(mensaje, "[CrearFicheroResultados] El fichero '%s' no se ha podido abrir", nombrefichero);
! 1344: Notificar(mensaje, ERROR_SEGUIR, ECO_NO);
! 1345: }
! 1346: }
! 1347:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>