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