Annotation of ADD_ver_10/Source Code/Source Files/Configuracion.c, revision 1.1
1.1 ! rico 1: /******************************************************************************/
! 2: /* MÓDULO: Configuracion.c */
! 3: /* */
! 4: /* Este módulo contiene las funciones relacionadas con la configuración. */
! 5: /******************************************************************************/
! 6: /* Fecha: 28 de septiembre de 2005 */
! 7: /******************************************************************************/
! 8:
! 9: #include <stdio.h>
! 10: #include <stdlib.h>
! 11: #include <string.h>
! 12:
! 13: #include "defines.h"
! 14: #include "tipos.h"
! 15: #include "ayuda.h"
! 16: #include "configuracion.h"
! 17:
! 18: /* configuración */
! 19: extern struct argumentos configuracion;
! 20:
! 21:
! 22:
! 23: /* función que realiza la validación de los parámetros de configuración */
! 24: /* introducidos por cualquiera de los medios previstos */
! 25:
! 26: void ValidarConfiguracion()
! 27: {
! 28: char mensaje[MAX_LINE];
! 29:
! 30: /* si necesito fichero de configuración y no lo tengo */
! 31: /* capturo el nombre del fichero de configuración */
! 32: if(strcmp(configuracion.captura, "Por fichero") == 0 && strcmp(configuracion.ficheroconfig, "") == 0)
! 33: {
! 34: printf("Introduzca el nombre del fichero de configuración\n\n->\t");
! 35: scanf("%s", configuracion.ficheroconfig);
! 36:
! 37: sprintf(mensaje, "[ValidarConfiguracion] Se solicita fichero de configuración");
! 38: Notificar(mensaje, NO_ERROR, ECO_NO);
! 39: }
! 40:
! 41: /* si no tengo fichero de nemónicos */
! 42: if(strcmp(configuracion.ficheronemos, "") == 0)
! 43: {
! 44: printf("Introduzca el nombre del fichero de operaciones\n\n->\t");
! 45: scanf("%s", configuracion.ficheronemos);
! 46:
! 47: sprintf(mensaje, "[ValidarConfiguracion] Se solicita fichero de operaciones");
! 48: Notificar(mensaje, NO_ERROR, ECO_NO);
! 49: }
! 50:
! 51: /* si no tengo fichero de operandos */
! 52: if(strcmp(configuracion.ficheroubis, "") == 0)
! 53: {
! 54: printf("Introduzca el nombre del fichero de operandos\n\n->\t");
! 55: scanf("%s", configuracion.ficheroubis);
! 56:
! 57: sprintf(mensaje, "[ValidarConfiguracion] Se solicita fichero de operandos");
! 58: Notificar(mensaje, NO_ERROR, ECO_NO);
! 59: }
! 60:
! 61: /* si necesito el fichero de ciclos del procesador */
! 62: /* y no lo tengo */
! 63: if(configuracion.cpi == SI && strcmp(configuracion.ficherociclos, "") == 0)
! 64: {
! 65: printf("Introduzca el nombre del fichero de procesador\n\n->\t");
! 66: scanf("%s", configuracion.ficherociclos);
! 67:
! 68: sprintf(mensaje, "[ValidarConfiguracion] Se solicita fichero de procesador");
! 69: Notificar(mensaje, NO_ERROR, ECO_NO);
! 70: }
! 71:
! 72: /* si no tengo fichero de datos */
! 73: if(configuracion.origen != CADENAHEX && strcmp(configuracion.ficherodatos, "") == 0)
! 74: {
! 75: printf("Introduzca el nombre del fichero de datos\n\n->\t");
! 76: scanf("%s", configuracion.ficherodatos);
! 77:
! 78: sprintf(mensaje, "[ValidarConfiguracion] Se solicita fichero de datos");
! 79: Notificar(mensaje, NO_ERROR, ECO_NO);
! 80: }
! 81:
! 82: /* si el origen de datos es una única instrucción */
! 83: /* anulo el análisis de dependencias de datos */
! 84: if(configuracion.origen == CADENAHEX) configuracion.dependencias = NO;
! 85:
! 86: /* validación del rango */
! 87: if(configuracion.rango > 100.00) configuracion.rango = 100.00;
! 88: else if(configuracion.rango < 1.00) configuracion.rango = 1.00;
! 89:
! 90: /* validación del comienzo */
! 91: if(configuracion.comienzo > 100.00) configuracion.comienzo = 100.00;
! 92: /* el porcentaje de comienzo puede ser 0 */
! 93:
! 94: /* si doy instrucción final se supone que tengo una inicial */
! 95: if(configuracion.ultima != 0)
! 96: {
! 97: if(configuracion.primera == 0) configuracion.primera = 1;
! 98: /* la cuenta de instrucciones comienza en '1' */
! 99: }
! 100:
! 101: /* si el tamaño de ventana de instrucciones es nulo pido un valor */
! 102: if(configuracion.ventana == 0)
! 103: {
! 104: /* capturo el tamaño de la ventana de instrucciones */
! 105: printf("Introduzca el tamaño de la ventana de instrucciones[1 - %d]\n\n->\t", MAX_VENTANA);
! 106: scanf("%d", &configuracion.ventana);
! 107: }
! 108:
! 109: /* si la ventana es mayor que el máximo permitido pongo el máximo */
! 110: if(configuracion.ventana > MAX_VENTANA) configuracion.ventana = MAX_VENTANA;
! 111: /* si la ventana es de 1 instrucción anulo el análisis de dependencias de datos */
! 112: if(configuracion.ventana == 1) configuracion.dependencias = NO;
! 113: /* si la ventana es mayor de 32 instrucciones no construyo ficheros */
! 114: /* para volcar información de las ventanas ya que no caben */
! 115: if(configuracion.ventana > 32) strcpy(configuracion.volcarventana, "");
! 116:
! 117: /* si no considero ningún tipo no hago análisis de dependencias */
! 118: if(configuracion.verdaderas == NO &&
! 119: configuracion.antidependencias == NO &&
! 120: configuracion.verdaderas == NO) configuracion.dependencias = NO;
! 121:
! 122: if(configuracion.explicitos == NO &&
! 123: configuracion.implicitos == NO) configuracion.dependencias = NO;
! 124:
! 125: if(configuracion.datos == NO &&
! 126: configuracion.direcciones == NO &&
! 127: configuracion.pila == NO &&
! 128: configuracion.cc == NO) configuracion.dependencias = NO;
! 129:
! 130: /* los desacoplos y sus matrices llevan un orden */
! 131: /* mapa de posibles matrices */
! 132: /* tipo origen fuente */
! 133: /* SI SI SI */
! 134: /* SI SI NO */
! 135: /* SI NO NO */
! 136: /* NO NO NO */ /* -> por defecto no se desacopla nada */
! 137:
! 138: if(configuracion.desacoplarorigen == SI)
! 139: {
! 140: configuracion.desacoplartipos = SI;
! 141: }
! 142: if(configuracion.desacoplarfuentes == SI)
! 143: {
! 144: configuracion.desacoplarorigen = SI;
! 145: configuracion.desacoplartipos = SI;
! 146: }
! 147:
! 148: /* calcular CPI medio implica asignar CPI a cada instrucción */
! 149: if(configuracion.CPImedio == SI) configuracion.cpi = SI;
! 150: /* calcular tiempo de ejecución implica asignar CPI a cada */
! 151: /* y calcular las dependencias de datos entre instrucción */
! 152: if(configuracion.tiempo == SI)
! 153: {
! 154: configuracion.cpi = SI;
! 155: configuracion.dependencias = SI;
! 156: }
! 157: /* calculos relativos al análisis de dependencias */
! 158: if(configuracion.ordenparcial == SI) configuracion.dependencias = SI;
! 159: if(configuracion.matrizcaminos == SI) configuracion.dependencias = SI;
! 160: if(configuracion.pasoscomputacion == SI) configuracion.dependencias = SI;
! 161: if(configuracion.gradoparalelismo == SI)
! 162: {
! 163: configuracion.pasoscomputacion = SI;
! 164: configuracion.dependencias = SI;
! 165: }
! 166: if(configuracion.acoplamiento == SI) configuracion.dependencias = SI;
! 167: if(configuracion.distribucionpasos == SI)
! 168: {
! 169: configuracion.pasoscomputacion = SI;
! 170: configuracion.dependencias = SI;
! 171: }
! 172:
! 173: /* si no quiero calcular nada anulo el análisis de dependencias */
! 174: if(configuracion.tiempo == NO &&
! 175: configuracion.ordenparcial == NO &&
! 176: configuracion.matrizcaminos == NO &&
! 177: configuracion.pasoscomputacion == NO &&
! 178: configuracion.gradoparalelismo == NO &&
! 179: configuracion.acoplamiento == NO &&
! 180: configuracion.distribucionpasos == NO) configuracion.dependencias = NO;
! 181:
! 182: /* si he de crear un fichero de configuración nuevo */
! 183: /* y no tengo nombre solicito uno nuevo */
! 184: if(configuracion.crearficheroconfig == SI && strcmp(configuracion.nuevoficheroconfig, "") == 0)
! 185: {
! 186: printf("Introduzca el nombre del nuevo fichero de configuración\n\n->\t");
! 187: scanf("%s", configuracion.nuevoficheroconfig);
! 188:
! 189: sprintf(mensaje, "[ValidarConfiguracion] Se solicita nuevo fichero de configuración");
! 190: Notificar(mensaje, NO_ERROR, ECO_NO);
! 191: }
! 192: }
! 193:
! 194:
! 195:
! 196: /* función que carga la configuración por defecto de la aplicación */
! 197:
! 198: void CargarConfiguracionInicial()
! 199: {
! 200: /* OBSERVACIONES (tipo de captura de configuración) */
! 201: strcpy(configuracion.captura, "Por defecto");
! 202:
! 203: /* FICHERO DE CONFIGURACIÓN POR DEFECTO */
! 204: /* ruta del fichero de configuración (si se usa sin indicar ruta) */
! 205: strcpy(configuracion.ficheroconfig, "configuracion.cfg");
! 206:
! 207: /* FICHEROS DE BASE DE DATOS */
! 208: /* ARQUITECTURA: fichero de operaciones */
! 209: strcpy(configuracion.ficheronemos, "IA16-nemos.isa");
! 210: /* ARQUITECTURA: fichero de símbolos */
! 211: strcpy(configuracion.ficheroubis, "IA16-ubis.isa");
! 212: /* PROCESADOR: fichero de ciclos */
! 213: strcpy(configuracion.ficherociclos, "uP-8086-01.pro");
! 214:
! 215: /* ORIGEN DE DATOS */
! 216: /* código de origen de datos */
! 217: /* 0: TRAZA; 1: SECUENCIA; 2: CADENAHEX */
! 218: /* si es CADENAHEX no se hace análisis de dependencias) */
! 219: configuracion.origen = TRAZA;
! 220: /* fichero de origen de datos -si existe- */
! 221: strcpy(configuracion.ficherodatos, "comp.trz");
! 222: /* instrucción en hexadecimal */
! 223: strcpy(configuracion.cadenahex, "");
! 224: /* porcentaje a analizar -sólo TRAZA- */
! 225: configuracion.rango = 100.00;
! 226: /* comienzo en porcentaje -sólo TRAZA- */
! 227: configuracion.comienzo = 0.00;
! 228: /* instrucción de comienzo */
! 229: configuracion.primera = 0;
! 230: /* instrucción de final */
! 231: configuracion.ultima = 0;
! 232:
! 233: /* EVALUAR */
! 234: /* ¿hacer recuentos? */
! 235: configuracion.recuentos = NO;
! 236: /* ¿asignar ciclos a cada instrucción? */
! 237: configuracion.cpi = NO;
! 238: /* ¿hacer análisis de dependencias de datos? */
! 239: configuracion.dependencias = SI;
! 240:
! 241: /* PARÁMETROS DE ANÁLISIS DE DEPENDENCIAS DE DATOS */
! 242: /* tamaño de la ventana de instrucciones (si es 1 no se hace análisis de dependencias) */
! 243: configuracion.ventana = 32;
! 244: /* tipos de ubicaciones a incluir en la pizarra de dependencias */
! 245: strcpy(configuracion.listaubis, "0:1:2:3");
! 246: /* ¿desacoplar tipos de dependencias? */
! 247: configuracion.desacoplartipos = NO;
! 248: /* ¿considerar dependencias verdaderas? */
! 249: configuracion.verdaderas = SI;
! 250: /* ¿considerar antidependencias? */
! 251: configuracion.antidependencias = SI;
! 252: /* ¿considerar dependencias de salida? */
! 253: configuracion.salida = SI;
! 254: /* ¿desacoplar implìcitas-explícitas? */
! 255: configuracion.desacoplarorigen = NO;
! 256: /* ¿considerar explícitas? */
! 257: configuracion.explicitos = SI;
! 258: /* ¿considerar implícitas? */
! 259: configuracion.implicitos = SI;
! 260: /* ¿desacoplar fuentes de dependencias? */
! 261: configuracion.desacoplarfuentes = NO;
! 262: /* ¿origen de dependencias de datos? */
! 263: configuracion.datos = SI;
! 264: /* ¿origen de dependencias de direcciones? */
! 265: configuracion.direcciones = SI;
! 266: /* ¿origen de dependencias de pila? */
! 267: configuracion.pila = SI;
! 268: /* ¿origen de dependencias de códigos de condición? */
! 269: configuracion.cc = SI;
! 270:
! 271: /* CALCULAR */
! 272: /* ¿calcular CPI medio? (requiere asignación de CPI) */
! 273: configuracion.CPImedio = NO;
! 274: /* ¿calcular tiempo de ejecución? (requiere asignación de CPI) */
! 275: configuracion.tiempo = NO;
! 276: /* ¿obtener orden parcial? (requiere evaluación de dependencias) */
! 277: configuracion.ordenparcial = NO;
! 278: /* ¿calcular la matriz de caminos? (requiere evaluación de dependencias) */
! 279: /*(tarea gran consumidora de tiempo) */
! 280: configuracion.matrizcaminos = NO;
! 281: /* ¿determinar pasos de computación? (requiere evaluación de dependencias) */
! 282: configuracion.pasoscomputacion = SI;
! 283: /* ¿determinar grado de paralelismo? (requiere evaluación de dependencias y pasos de computación) */
! 284: configuracion.gradoparalelismo = NO;
! 285: /* ¿determinar acoplamiento? (requiere evaluación de dependencias) */
! 286: configuracion.acoplamiento = NO;
! 287: /* ¿salvar el histograma de pasos de computación para la matriz D? */
! 288: configuracion.distribucionpasos = NO;
! 289:
! 290: /* CONFIGURACIÓN DEL INFORME */
! 291: /* salvar bases de datos en ficheros EXCEL */
! 292: configuracion.volcarBD = NO;
! 293: /* volcar configuracion en un fichero nuevo */
! 294: configuracion.crearficheroconfig = NO;
! 295: /* nombre del nuevo fichero de configuración */
! 296: strcpy(configuracion.nuevoficheroconfig, "nuevoconfig");
! 297: /* salvar listado de ventanas en formato EXCEL */
! 298: strcpy(configuracion.volcarventana, "");
! 299: /* fichero de resultados en formato EXCEL */
! 300: strcpy(configuracion.ficheroresultados, "resultados");
! 301: /* nivel de gravedad de los mensajes volcados en el log */
! 302: configuracion.nivelnotificaciones = ALL;
! 303: /* (el nivel inicial es el de mayor notificación) */
! 304:
! 305: /* INTERFASE GRÁFICA */
! 306: /* ver instrucción en pantalla */
! 307: configuracion.verinstruccion = NO;
! 308: /* ver ventana en pantalla */
! 309: configuracion.verventana = NO;
! 310:
! 311: ValidarConfiguracion();
! 312: }
! 313:
! 314:
! 315: /* función que carga la configuración desde un fichero */
! 316: /* el fichero de configuración no tiene que tener todas las claves */
! 317:
! 318: void CargarConfiguracionFichero()
! 319: {
! 320: FILE *handle;
! 321: char fichero[MAX_LINE];
! 322: char linea[MAX_LINE];
! 323: char mensaje[MAX_LINE];
! 324: char *campo;
! 325: int i;
! 326: char encontrado;
! 327: char *inicio, *final;
! 328:
! 329: /* nombre del fichero de configuración */
! 330: strcpy(fichero, configuracion.ficheroconfig);
! 331:
! 332: /* abro el fichero de configuración*/
! 333: if((handle = fopen(fichero, "r")) != NULL)
! 334: {
! 335: sprintf(mensaje, "[CargarConfiguracionFichero] El fichero '%s' se ha abierto con éxito", fichero);
! 336: Notificar(mensaje, NO_ERROR, ECO_NO);
! 337:
! 338: while(!feof(handle))
! 339: {
! 340: fgets (linea, MAX_LINE, handle);
! 341: /* quito el caracter '\n' (0x0a) final de la línea */
! 342: /* OJO: si abro en modo binario me encuentro "\r\n" (0x0d 0x0a) */
! 343: *(linea+strlen(linea)-1)='\0';
! 344: /* si no es ni comentario ni línea en blanco */
! 345: if(linea[0]!='[' && linea[0]!='\0')
! 346: {
! 347: campo = strtok(linea, "=");
! 348: /* limpio de espacios en blanco por delante y por detrás */
! 349: inicio = campo; while(*inicio++==' '); campo = inicio - 1;
! 350: final = campo + strlen(campo); while(*--final==' '); *(final+1)='\0';
! 351:
! 352: i = 0;
! 353: encontrado = NO;
! 354: while(i<NUM_CLAVES && encontrado == NO)
! 355: {
! 356: /* solución si 'campo' tiene espacios en blanco */
! 357: /* if (strncmp(campo, claves[i], strlen(claves[i]))) i++; */
! 358: /* solución si 'campo' no tiene espacios en blanco */
! 359: if (strcmp(campo, claves[i])) i++; /* no encontrado */
! 360: else encontrado = SI; /* encontrado */
! 361: }
! 362: if(encontrado == NO)
! 363: {
! 364: sprintf(mensaje, "No se ha encontrado la clave del fichero de configuración");
! 365: Notificar(mensaje, ERROR_SEGUIR, ECO_NO);
! 366: }
! 367: else
! 368: {
! 369: campo = strtok(NULL, "=");
! 370: /* limpio de espacios en blanco por delante y por detrás */
! 371: inicio = campo; while(*inicio++==' '); campo = inicio - 1;
! 372: final = campo + strlen(campo); while(*--final==' '); *(final+1)='\0';
! 373: /* limpio las comillas simples si están */
! 374: inicio = strchr(campo, '\'');
! 375: if(inicio!=NULL) {campo = inicio + 1; final = strrchr(campo, '\''); if(final!=NULL) *final = '\0';}
! 376:
! 377: switch(i)
! 378: {
! 379: case 0: /* CAPTURA DE CONFIGURACIÓN */
! 380: strcpy(configuracion.captura, campo);
! 381: break;
! 382:
! 383: case 1: /* FICHERO DE CONFIGURACIÓN */
! 384: strcpy(configuracion.ficheroconfig, campo);
! 385: break;
! 386:
! 387: case 2: /* FICHERO DE OPERACIONES */
! 388: strcpy(configuracion.ficheronemos, campo);
! 389: break;
! 390:
! 391: case 3: /* FICHERO DE SÍMBOLOS */
! 392: strcpy(configuracion.ficheroubis, campo);
! 393: break;
! 394:
! 395: case 4: /* FICHERO DE CICLOS */
! 396: strcpy(configuracion.ficherociclos, campo);
! 397: break;
! 398:
! 399: case 5: /* ORIGEN DE DATOS */
! 400: /* if(strcmp(campo, "TRAZA")==0) */
! 401: /* opción por defecto */
! 402: configuracion.origen = TRAZA;
! 403: if(strcmp(campo, "SECUENCIA")==0) configuracion.origen = SECUENCIA;
! 404: else if(strcmp(campo, "CADENAHEX")==0) configuracion.origen = CADENAHEX;
! 405: break;
! 406:
! 407: case 6: /* FICHERO DE DATOS */
! 408: strcpy(configuracion.ficherodatos, campo);
! 409: break;
! 410:
! 411: case 7: /* SECUENCIA DE INSTRUCCIÓN */
! 412: strcpy(configuracion.cadenahex, campo);
! 413: break;
! 414:
! 415: case 8: /* RANGO */
! 416: /* quito el signo '%' si está */
! 417: *(campo+strlen(campo)-1)='\0';
! 418: configuracion.rango = atof(campo);
! 419: break;
! 420:
! 421: case 9: /* COMIENZO */
! 422: /* quito el signo '%' si está */
! 423: *(campo+strlen(campo)-1)='\0';
! 424: configuracion.comienzo = atof(campo);
! 425: break;
! 426:
! 427: case 10: /* PRIMERA */
! 428: configuracion.primera = atoi(campo);
! 429: break;
! 430:
! 431: case 11: /* ULTIMA */
! 432: configuracion.ultima = atoi(campo);
! 433: break;
! 434:
! 435: case 12: /* RECUENTOS */
! 436: configuracion.recuentos = SI;
! 437: if(strcmp(campo, "NO")==0) configuracion.recuentos = NO;
! 438: break;
! 439:
! 440: case 13: /* ASIGNAR CPI */
! 441: configuracion.cpi = SI;
! 442: if(strcmp(campo, "NO")==0) configuracion.cpi = NO;
! 443: break;
! 444:
! 445: case 14: /* ANALIZAR DEPENDENCIAS */
! 446: configuracion.dependencias = SI;
! 447: if(strcmp(campo, "NO")==0) configuracion.dependencias = NO;
! 448: break;
! 449:
! 450: case 15: /* TAMAÑO VENTANA INSTRUCCIONES */
! 451: configuracion.ventana = atoi(campo);
! 452: break;
! 453:
! 454: case 16: /* LISTADO DE UBICACIONES */
! 455: strcpy(configuracion.listaubis, campo);
! 456: break;
! 457:
! 458: case 17: /* DESACOPLAR TIPOS DE DEPENDENCIAS */
! 459: configuracion.desacoplartipos = SI;
! 460: if(strcmp(campo, "NO")==0) configuracion.desacoplartipos = NO;
! 461: break;
! 462:
! 463: case 18: /* DEPENDENCIAS VERDADERAS */
! 464: configuracion.verdaderas = SI;
! 465: if(strcmp(campo, "NO")==0) configuracion.verdaderas = NO;
! 466: break;
! 467:
! 468: case 19: /* ANTIDEPENDENCIAS */
! 469: configuracion.antidependencias = SI;
! 470: if(strcmp(campo, "NO")==0) configuracion.antidependencias = NO;
! 471: break;
! 472:
! 473: case 20: /* DEPENDENCIAS DE SALIDA */
! 474: configuracion.salida = SI;
! 475: if(strcmp(campo, "NO")==0) configuracion.salida = NO;
! 476: break;
! 477:
! 478: case 21: /* DESACOPLAR ORIGEN */
! 479: configuracion.desacoplarorigen = SI;
! 480: if(strcmp(campo, "NO")==0) configuracion.desacoplarorigen = NO;
! 481: break;
! 482:
! 483: case 22: /* OPERANDOS EXPLÍCITOS */
! 484: configuracion.explicitos = SI;
! 485: if(strcmp(campo, "NO")==0) configuracion.explicitos = NO;
! 486: break;
! 487:
! 488: case 23: /* OPERANDOS IMPLÍCITOS */
! 489: configuracion.implicitos = SI;
! 490: if(strcmp(campo, "NO")==0) configuracion.implicitos = NO;
! 491: break;
! 492:
! 493: case 24: /* DESACOPLAR FUENTES DE DEPENDENCIAS */
! 494: configuracion.desacoplarfuentes = SI;
! 495: if(strcmp(campo, "NO")==0) configuracion.desacoplarfuentes = NO;
! 496: break;
! 497:
! 498: case 25: /* DEPENDENCIAS DE DATOS */
! 499: configuracion.datos = SI;
! 500: if(strcmp(campo, "NO")==0) configuracion.datos = NO;
! 501: break;
! 502:
! 503: case 26: /* DEPENDENCIAS DE DIRECCIONES */
! 504: configuracion.direcciones = SI;
! 505: if(strcmp(campo, "NO")==0) configuracion.direcciones = NO;
! 506: break;
! 507:
! 508: case 27: /* DEPENDENCIAS DE PILA */
! 509: configuracion.pila = SI;
! 510: if(strcmp(campo, "NO")==0) configuracion.pila = NO;
! 511: break;
! 512:
! 513: case 28: /* DEPENDENCIAS DE CÓDIGOS DE CONDICIÓN */
! 514: configuracion.cc = SI;
! 515: if(strcmp(campo, "NO")==0) configuracion.cc = NO;
! 516: break;
! 517:
! 518: case 29: /* CALCULAR CPI PROMEDIO */
! 519: configuracion.CPImedio = SI;
! 520: if(strcmp(campo, "NO")==0) configuracion.CPImedio = NO;
! 521: break;
! 522:
! 523: case 30: /* TIEMPO DE EJECUCIÓN */
! 524: configuracion.tiempo = SI;
! 525: if(strcmp(campo, "NO")==0) configuracion.tiempo = NO;
! 526: break;
! 527:
! 528: case 31: /* GENERAR LISTADO ORDEN PARCIAL */
! 529: configuracion.ordenparcial = SI;
! 530: if(strcmp(campo, "NO")==0) configuracion.ordenparcial = NO;
! 531: break;
! 532:
! 533: case 32: /* GENERAR MATRIZ DE CAMINOS */
! 534: configuracion.matrizcaminos = SI;
! 535: if(strcmp(campo, "NO")==0) configuracion.matrizcaminos = NO;
! 536: break;
! 537:
! 538: case 33: /* PASOS DE COMPUTACIÓN */
! 539: configuracion.pasoscomputacion = SI;
! 540: if(strcmp(campo, "NO")==0) configuracion.pasoscomputacion = NO;
! 541: break;
! 542:
! 543: case 34: /* GRADO DE PARALELISMO */
! 544: configuracion.gradoparalelismo = SI;
! 545: if(strcmp(campo, "NO")==0) configuracion.gradoparalelismo = NO;
! 546: break;
! 547:
! 548: case 35: /* ACOPLAMIENTO */
! 549: configuracion.acoplamiento = SI;
! 550: if(strcmp(campo, "NO")==0) configuracion.acoplamiento = NO;
! 551: break;
! 552:
! 553: case 36: /* HISTOGRAMA PASOS DE COMPUTACIÓN */
! 554: configuracion.distribucionpasos = SI;
! 555: if(strcmp(campo, "NO")==0) configuracion.distribucionpasos = NO;
! 556: break;
! 557:
! 558: case 37: /* VOLCAR BD EN FICHEROS */
! 559: configuracion.volcarBD = SI;
! 560: if(strcmp(campo, "NO")==0) configuracion.volcarBD = NO;
! 561: break;
! 562:
! 563: case 38: /* CREAR FICHERO DE CONFIGURACIÓN */
! 564: configuracion.crearficheroconfig = SI;
! 565: if(strcmp(campo, "NO")==0) configuracion.crearficheroconfig = NO;
! 566: break;
! 567:
! 568: case 39: /* NOMBRE DEL NUEVO FICHERO DE CONFIGURACIÓN */
! 569: strcpy(configuracion.nuevoficheroconfig, campo);
! 570: break;
! 571:
! 572: case 40: /* LISTADO DE VENTANAS A SALVAR */
! 573: strcpy(configuracion.volcarventana, campo);
! 574: break;
! 575:
! 576: case 41: /* FICHERO DE RESULTADOS */
! 577: strcpy(configuracion.ficheroresultados, campo);
! 578: break;
! 579:
! 580: case 42: /* NIVEL DE NOTIFICACIÓN EN EL LOG */
! 581: /* opción por defecto */
! 582: configuracion.nivelnotificaciones = ALL;
! 583: if(strcmp(campo, "EX_CFG")==0) configuracion.nivelnotificaciones = EX_CFG;
! 584: else if(strcmp(campo, "ERRORS")==0) configuracion.nivelnotificaciones = ERRORS;
! 585: break;
! 586:
! 587: case 43: /* VER INSTRUCCIÓN EN CURSO EN LA PANTALLA */
! 588: configuracion.verinstruccion = SI;
! 589: if(strcmp(campo, "NO")==0) configuracion.verinstruccion = NO;
! 590: break;
! 591:
! 592: case 44: /* VER VENTANA EN CURSO EN LA PANTALLA */
! 593: configuracion.verventana = SI;
! 594: if(strcmp(campo, "NO")==0) configuracion.verventana = NO;
! 595: break;
! 596: }
! 597: }
! 598: }
! 599: }
! 600:
! 601: /* hago validación de datos de entrada */
! 602: ValidarConfiguracion();
! 603:
! 604:
! 605: if(fclose(handle))
! 606: {
! 607: sprintf(mensaje, "[CargarConfiguracionFichero] El fichero '%s' no se ha podido cerrar", fichero);
! 608: Notificar(mensaje, ERROR_SEGUIR, ECO_NO);
! 609: }
! 610: else
! 611: {
! 612: sprintf(mensaje, "[CargarConfiguracionFichero] El fichero '%s' ha sido cerrado con éxito", fichero);
! 613: Notificar(mensaje, NO_ERROR, ECO_NO);
! 614: }
! 615: }
! 616: else
! 617: {
! 618: sprintf(mensaje, "[CargarConfiguracionFichero] El fichero '%s' no se ha podido abrir", fichero);
! 619: Notificar(mensaje, ERROR_SEGUIR, ECO_NO);
! 620: }
! 621: }
! 622:
! 623:
! 624: /* función que carga la configuración desde los argumentos del 'main' */
! 625:
! 626: /* también realiza una pequeña validación de las entradas */
! 627: /* si se requiere asignación de CPI lo fuerza */
! 628: /* si se anula el análisis de dependencias de datos lo fuerza */
! 629: /* si se requiere un cálculo previo lo fuerza */
! 630:
! 631: void CapturarArgumentos(int argc, char *argv[])
! 632: {
! 633: char mensaje[MAX_LINE];
! 634: char cadena[10];
! 635: char arg_leido = NO;
! 636:
! 637: /*
! 638: int i;
! 639:
! 640: printf("%d\n", argc);
! 641: for(i=0; i<argc; i++)
! 642: {
! 643: printf("%s\n", argv[i]);
! 644: }
! 645:
! 646: _getch();
! 647: */
! 648:
! 649: while(--argc > 0 && (*++argv)[0]=='-')
! 650: {
! 651: switch((*argv)[1])
! 652: {
! 653: case 'h': /* mostrar texto de ayuda */
! 654: printf("%s", *textoayuda);
! 655: exit(1);
! 656: break;
! 657:
! 658: case 'f': /* cargar la configuración desde fichero */
! 659: /* si queda al menos un argumento y es una ruta y no otra opción */
! 660: if(--argc!=0 && (*++argv)[0]!='-') strcpy(configuracion.ficheroconfig, argv[0]);
! 661: /* cargo la configuración desde fichero (el indicado por defecto o el nuevo) */
! 662: /* haciendo caso omiso del resto de argumentos (capturados o por capturar) */
! 663: strcpy(configuracion.captura, "Por fichero");
! 664: /* el fichero de configuración no lleva la clave del tipo de captura ni el */
! 665: /* nombre del fichero de configuración */
! 666: CargarConfiguracionFichero();
! 667: argc = 0; /* dejo de leer el resto de argumentos */
! 668: break;
! 669:
! 670: case 'n': /* fichero de arquitectura del repertorio (nemónicos) */
! 671: /* si queda al menos un argumento y es una ruta y no otra opción */
! 672: if(--argc!=0 && (*++argv)[0]!='-')
! 673: {
! 674: strcpy(configuracion.ficheronemos, argv[0]);
! 675: arg_leido = SI;
! 676: }
! 677: else
! 678: {
! 679: sprintf(mensaje, "[CapturarArgumentos] La opción -n no especifica ruta y no se tendrá en cuenta");
! 680: Notificar(mensaje, NO_ERROR, ECO_NO);
! 681: ++argc; *--argv; /* recupero la situación */
! 682: }
! 683: break;
! 684:
! 685: case 'u': /* fichero de arquitectura del repertorio (ubicaciones) */
! 686: /* si queda al menos un argumento y es una ruta y no otra opción */
! 687: if(--argc!=0 && (*++argv)[0]!='-')
! 688: {
! 689: strcpy(configuracion.ficheroubis, argv[0]);
! 690: arg_leido = SI;
! 691: }
! 692: else
! 693: {
! 694: sprintf(mensaje, "[CapturarArgumentos] La opción -u no especifica ruta y no se tendrá en cuenta");
! 695: Notificar(mensaje, NO_ERROR, ECO_NO);
! 696: ++argc; *--argv; /* recupero la situación */
! 697: }
! 698: break;
! 699:
! 700: case 'O': /* origen de datos */
! 701: /* el siguiente caracter indica situaciones excluyentes */
! 702: switch((*argv)[2])
! 703: {
! 704: case 't':
! 705: /* si queda al menos un argumento y es una ruta y no otra opción */
! 706: if(--argc!=0 && (*++argv)[0]!='-')
! 707: {
! 708: configuracion.origen = TRAZA;
! 709: strcpy(configuracion.ficherodatos, argv[0]);
! 710: arg_leido = SI;
! 711: }
! 712: else
! 713: {
! 714: sprintf(mensaje, "[CapturarArgumentos] La opción -Ot no especifica ruta y no se tendrá en cuenta");
! 715: Notificar(mensaje, NO_ERROR, ECO_NO);
! 716: ++argc; *--argv; /* recupero la situación */
! 717: }
! 718: break;
! 719:
! 720: case 's':
! 721: /* si queda al menos un argumento y es una ruta y no otra opción */
! 722: if(--argc!=0 && (*++argv)[0]!='-')
! 723: {
! 724: configuracion.origen = SECUENCIA;
! 725: strcpy(configuracion.ficherodatos, argv[0]);
! 726: arg_leido = SI;
! 727: }
! 728: else
! 729: {
! 730: sprintf(mensaje, "[CapturarArgumentos] La opción -Os no especifica ruta y no se tendrá en cuenta");
! 731: Notificar(mensaje, NO_ERROR, ECO_NO);
! 732: ++argc; *--argv; /* recupero la situación */
! 733: }
! 734: break;
! 735:
! 736: case 'i':
! 737: /* si queda al menos un argumento y es una ruta y no otra opción */
! 738: if(--argc!=0 && (*++argv)[0]!='-')
! 739: {
! 740: configuracion.origen = CADENAHEX;
! 741: strcpy(configuracion.cadenahex, argv[0]);
! 742: arg_leido = SI;
! 743: }
! 744: else
! 745: {
! 746: sprintf(mensaje, "[CapturarArgumentos] La opción -Oi no especifica instrucción y no se tendrá en cuenta");
! 747: Notificar(mensaje, NO_ERROR, ECO_NO);
! 748: ++argc; *--argv; /* recupero la situación */
! 749: }
! 750: break;
! 751:
! 752: default:
! 753: sprintf(mensaje, "[CapturarArgumentos] La opción -O%c no se reconoce", (*argv)[2]);
! 754: Notificar(mensaje, NO_ERROR, ECO_NO);
! 755: break;
! 756: }
! 757: break;
! 758:
! 759: case 'p': /* porcentaje de datos a analizar (sólo para trazas) */
! 760: /* estos argumentos se cargan en los parámetros de configuración */
! 761: /* pero si se procesa una traza no se tienen en cuenta */
! 762: switch((*argv)[2])
! 763: {
! 764: case 'r': /* rango total en porcentaje */
! 765: /* si queda al menos un argumento y es una ruta y no otra opción */
! 766: if(--argc!=0 && (*++argv)[0]!='-')
! 767: {
! 768: strcpy(cadena, argv[0]);
! 769: cadena[strlen(cadena)-1]='\0'; /* quito el caracter '%' */
! 770: configuracion.rango = atof(argv[0]);
! 771: arg_leido = SI;
! 772: }
! 773: else
! 774: {
! 775: sprintf(mensaje, "[CapturarArgumentos] La opción -pr no especifica valor y no se tendrá en cuenta");
! 776: Notificar(mensaje, NO_ERROR, ECO_NO);
! 777: ++argc; *--argv; /* recupero la situación */
! 778: }
! 779: break;
! 780:
! 781: case 'c': /* comienzo en porcentaje */
! 782: /* si queda al menos un argumento y es una ruta y no otra opción */
! 783: if(--argc!=0 && (*++argv)[0]!='-')
! 784: {
! 785: strcpy(cadena, argv[0]);
! 786: cadena[strlen(cadena)-1]='\0'; /* quito el caracter '%' */
! 787: configuracion.comienzo = atof(argv[0]);
! 788: arg_leido = SI;
! 789: }
! 790: else
! 791: {
! 792: sprintf(mensaje, "[CapturarArgumentos] La opción -pc no especifica valor y no se tendrá en cuenta");
! 793: Notificar(mensaje, NO_ERROR, ECO_NO);
! 794: ++argc; *--argv; /* recupero la situación */
! 795: }
! 796: break;
! 797:
! 798: default:
! 799: sprintf(mensaje, "[CapturarArgumentos] La opción -p%c no se reconoce", (*argv)[2]);
! 800: Notificar(mensaje, NO_ERROR, ECO_NO);
! 801: break;
! 802: }
! 803: break;
! 804:
! 805: case 'i': /* primera y última instrucción del análisis (sólo para trazas) */
! 806: /* estos argumentos se cargan en los parámetros de configuración */
! 807: /* pero si se procesa una traza no se tienen en cuenta */
! 808: switch((*argv)[2])
! 809: {
! 810: case 'p':
! 811: /* si queda al menos un argumento y es una ruta y no otra opción */
! 812: if(--argc!=0 && (*++argv)[0]!='-')
! 813: {
! 814: configuracion.primera = atoi(argv[0]);
! 815: arg_leido = SI;
! 816: }
! 817: else
! 818: {
! 819: sprintf(mensaje, "[CapturarArgumentos] La opción -ip no especifica valor y no se tendrá en cuenta");
! 820: Notificar(mensaje, NO_ERROR, ECO_NO);
! 821: ++argc; *--argv; /* recupero la situación */
! 822: }
! 823: break;
! 824:
! 825: case 'u':
! 826: /* si queda al menos un argumento y es una ruta y no otra opción */
! 827: if(--argc!=0 && (*++argv)[0]!='-')
! 828: {
! 829: configuracion.ultima = atoi(argv[0]);
! 830: arg_leido = SI;
! 831: }
! 832: else
! 833: {
! 834: sprintf(mensaje, "[CapturarArgumentos] La opción -iu no especifica valor y no se tendrá en cuenta");
! 835: Notificar(mensaje, NO_ERROR, ECO_NO);
! 836: ++argc; *--argv; /* recupero la situación */
! 837: }
! 838: break;
! 839:
! 840: default:
! 841: sprintf(mensaje, "[CapturarArgumentos] La opción -i%c no se reconoce", (*argv)[2]);
! 842: Notificar(mensaje, NO_ERROR, ECO_NO);
! 843: break;
! 844: }
! 845: break;
! 846:
! 847: case 'r': /* hacer recuentos */
! 848: configuracion.recuentos = SI;
! 849: arg_leido = SI;
! 850: break;
! 851:
! 852: case 'c': /* asignar CPI a cada instrucción */
! 853: configuracion.cpi = SI;
! 854: arg_leido = SI;
! 855: /* si queda al menos un argumento y es una ruta y no otra opción */
! 856: if(--argc!=0 && (*++argv)[0]!='-') strcpy(configuracion.ficherociclos , argv[0]);
! 857: else {++argc; *--argv;} /* recupero la situación */
! 858: break;
! 859:
! 860: case 'D': /* analizar dependencias de datos */
! 861: configuracion.dependencias = NO;
! 862: arg_leido = SI;
! 863: break;
! 864:
! 865: case 'v': /* tamaño de la ventana de instrucciones */
! 866: /* si queda al menos un argumento y es una ruta y no otra opción */
! 867: if(--argc!=0 && (*++argv)[0]!='-')
! 868: {
! 869: configuracion.ventana = atoi(argv[0]);
! 870: arg_leido = SI;
! 871: }
! 872: else
! 873: {
! 874: sprintf(mensaje, "[CapturarArgumentos] La opción -v no especifica tamaño y no se tendrá en cuenta");
! 875: Notificar(mensaje, NO_ERROR, ECO_NO);
! 876: ++argc; *--argv; /* recupero la situación */
! 877: }
! 878: break;
! 879:
! 880: case 'L': /* listado de ubicaciones de la pizarra de análisis de dependencias */
! 881: /* si queda al menos un argumento y es una lista y no otra opción */
! 882: if(--argc!=0 && (*++argv)[0]!='-')
! 883: {
! 884: strcpy(configuracion.listaubis, argv[0]);
! 885: arg_leido = SI;
! 886: }
! 887: else
! 888: {
! 889: sprintf(mensaje, "[CapturarArgumentos] La opción -L no especifica lista y no se tendrá en cuenta");
! 890: Notificar(mensaje, NO_ERROR, ECO_NO);
! 891: ++argc; *--argv; /* recupero la situación */
! 892: }
! 893: break;
! 894:
! 895: case 'k': /* desacoplar tipos de dependencias */
! 896: configuracion.desacoplartipos = SI;
! 897: arg_leido = SI;
! 898: break;
! 899:
! 900: case 'd': /* no considerar tipos de dependencias */
! 901: switch((*argv)[2])
! 902: {
! 903: case 'v': /* evitar las dependencias verdaderas */
! 904: configuracion.verdaderas = NO;
! 905: arg_leido = SI;
! 906: break;
! 907:
! 908: case 'a': /* evitar las antidependencias */
! 909: configuracion.antidependencias = NO;
! 910: arg_leido = SI;
! 911: break;
! 912:
! 913: case 's': /* evitar las dependencias de salida */
! 914: configuracion.salida = NO;
! 915: arg_leido = SI;
! 916: break;
! 917:
! 918: default:
! 919: sprintf(mensaje, "[CapturarArgumentos] La opción -d%c no se reconoce", (*argv)[2]);
! 920: Notificar(mensaje, NO_ERROR, ECO_NO);
! 921: break;
! 922: }
! 923: break;
! 924:
! 925: case 'o': /* desacoplar origen de dependencias */
! 926: configuracion.desacoplarorigen = SI;
! 927: arg_leido = SI;
! 928: break;
! 929:
! 930: case 't': /* no considerar origen de dependencias */
! 931: switch((*argv)[2])
! 932: {
! 933: case 'e': /* evitar los operandos explícitos */
! 934: configuracion.explicitos = NO;
! 935: arg_leido = SI;
! 936: break;
! 937:
! 938: case 'i': /* evitar los operandos implicitos */
! 939: configuracion.implicitos = NO;
! 940: arg_leido = SI;
! 941: break;
! 942:
! 943: default:
! 944: sprintf(mensaje, "[CapturarArgumentos] La opción -t%c no se reconoce", (*argv)[2]);
! 945: Notificar(mensaje, NO_ERROR, ECO_NO);
! 946: break;
! 947: }
! 948: break;
! 949:
! 950: case 's': /* desacoplar fuentes de dependencias */
! 951: configuracion.desacoplarfuentes = SI;
! 952: arg_leido = SI;
! 953: break;
! 954:
! 955: case 'q': /* no considerar fuentes de dependencias */
! 956: switch((*argv)[2])
! 957: {
! 958: case 'd': /* evitar las dependencias debidas a datos */
! 959: configuracion.datos = NO;
! 960: arg_leido = SI;
! 961: break;
! 962:
! 963: case 'a': /* evitar las dependencias debidas a cómputo de direcciones */
! 964: configuracion.direcciones = NO;
! 965: arg_leido = SI;
! 966: break;
! 967:
! 968: case 's': /* evitar las dependencias debidas a tráfico con la pila */
! 969: configuracion.pila = NO;
! 970: arg_leido = SI;
! 971: break;
! 972:
! 973: case 'c': /* evitar las dependencias debidas a códigos de condición */
! 974: configuracion.cc = NO;
! 975: arg_leido = SI;
! 976: break;
! 977:
! 978: default:
! 979: sprintf(mensaje, "[CapturarArgumentos] La opción -q%c no se reconoce", (*argv)[2]);
! 980: Notificar(mensaje, NO_ERROR, ECO_NO);
! 981: break;
! 982: }
! 983: break;
! 984:
! 985: case 'C': /* cálculos a realizar */
! 986: /* detrás de la 'C' podemos colocar seguidos todos los argumentos del grupo */
! 987: *++(*argv); /* avanzo hasta el primer caracter después de la 'C' */
! 988: while((char)*++(*argv)) /* barro todos los caracteres hasta el final de la cadena */
! 989: {
! 990: switch((char)*(*argv))
! 991: {
! 992: case 'm': /* calcular el CPI promedio */
! 993: configuracion.CPImedio = SI;
! 994: arg_leido = SI;
! 995: break;
! 996:
! 997: case 't': /* calcular tiempo de ejecución */
! 998: configuracion.tiempo = SI;
! 999: arg_leido = SI;
! 1000: break;
! 1001:
! 1002: case 'o': /* obtener lista de orden parcial */
! 1003: configuracion.ordenparcial = SI;
! 1004: arg_leido = SI;
! 1005: break;
! 1006:
! 1007: case 'c': /* generar matriz de caminos */
! 1008: configuracion.matrizcaminos = SI;
! 1009: arg_leido = SI;
! 1010: break;
! 1011:
! 1012: case 'p': /* calcular pasos de computación */
! 1013: configuracion.pasoscomputacion = NO;
! 1014: arg_leido = SI;
! 1015: break;
! 1016:
! 1017: case 'g': /* calcular grado de paralelismo */
! 1018: configuracion.gradoparalelismo = SI;
! 1019: arg_leido = SI;
! 1020: break;
! 1021:
! 1022: case 'a': /* calcular acoplamiento */
! 1023: configuracion.acoplamiento = SI;
! 1024: arg_leido = SI;
! 1025: break;
! 1026:
! 1027: case 'h': /* construir histograma */
! 1028: configuracion.distribucionpasos = SI;
! 1029: arg_leido = SI;
! 1030: break;
! 1031:
! 1032: default:
! 1033: sprintf(mensaje, "[CapturarArgumentos] La opción -C%c no se reconoce", (char)*(*argv));
! 1034: Notificar(mensaje, NO_ERROR, ECO_NO);
! 1035: break;
! 1036: }
! 1037: }
! 1038: break;
! 1039:
! 1040: case 'V': /* informes: volcar datos en ficheros */
! 1041: switch((*argv)[2])
! 1042: {
! 1043: case 'd': /* volcar bases de datos */
! 1044: configuracion.volcarBD = NO;
! 1045: arg_leido = SI;
! 1046: break;
! 1047:
! 1048: case 'c': /* crear nuevo fichero de configuración */
! 1049: configuracion.crearficheroconfig = SI;
! 1050: arg_leido = SI;
! 1051: /* si queda al menos un argumento y es una ruta y no otra opción */
! 1052: if(--argc!=0 && (*++argv)[0]!='-') strcpy(configuracion.nuevoficheroconfig, argv[0]);
! 1053: else {++argc; *--argv;} /* recupero la situación */
! 1054: break;
! 1055:
! 1056: case 'v': /* listado de ventanas a salvar */
! 1057: /* si queda al menos un argumento y es una lista y no otra opción */
! 1058: if(--argc!=0 && (*++argv)[0]!='-')
! 1059: {
! 1060: strcpy(configuracion.volcarventana, argv[0]);
! 1061: arg_leido = SI;
! 1062: }
! 1063: else
! 1064: {
! 1065: sprintf(mensaje, "[CapturarArgumentos] La opción -Vv no especifica lista y no se tendrá en cuenta");
! 1066: Notificar(mensaje, NO_ERROR, ECO_NO);
! 1067: ++argc; *--argv; /* recupero la situación */
! 1068: }
! 1069: break;
! 1070:
! 1071: default:
! 1072: sprintf(mensaje, "[CapturarArgumentos] La opción -V%c no se reconoce", (*argv)[2]);
! 1073: Notificar(mensaje, NO_ERROR, ECO_NO);
! 1074: break;
! 1075: }
! 1076: break;
! 1077:
! 1078: case 'R': /* fichero de resultados */
! 1079: /* si queda al menos un argumento y es una ruta y no otra opción */
! 1080: if(--argc!=0 && (*++argv)[0]!='-')
! 1081: {
! 1082: strcpy(configuracion.ficheroresultados, argv[0]);
! 1083: arg_leido = SI;
! 1084: }
! 1085: else
! 1086: {
! 1087: sprintf(mensaje, "[CapturarArgumentos] La opción -R no especifica ruta y no se tendrá en cuenta");
! 1088: Notificar(mensaje, NO_ERROR, ECO_NO);
! 1089: ++argc; *--argv; /* recupero la situación */
! 1090: }
! 1091: break;
! 1092:
! 1093: case 'N': /* nivel de notificaciones en el fichero de log */
! 1094: /* si queda al menos un argumento y es una ruta y no otra opción */
! 1095: if(--argc!=0 && (*++argv)[0]!='-')
! 1096: {
! 1097: configuracion.nivelnotificaciones = atoi(argv[0]);
! 1098: arg_leido = SI;
! 1099: }
! 1100: else
! 1101: {
! 1102: sprintf(mensaje, "[CapturarArgumentos] La opción -N no especifica nivel y no se tendrá en cuenta");
! 1103: Notificar(mensaje, NO_ERROR, ECO_NO);
! 1104: ++argc; *--argv; /* recupero la situación */
! 1105: }
! 1106: break;
! 1107:
! 1108: case 'M': /* mostrar en pantalla */
! 1109: /* detrás de la 'M' podemos colocar seguidos todos los argumentos del grupo */
! 1110: *++(*argv); /* avanzo hasta el primer caracter después de la 'M' */
! 1111: while((char)*++(*argv)) /* barro todos los caracteres hasta el final de la cadena */
! 1112: {
! 1113: switch((char)*(*argv))
! 1114: {
! 1115: case 'i': /* mostrar instrucción en curso en la pantalla */
! 1116: configuracion.verinstruccion = SI;
! 1117: arg_leido = SI;
! 1118: break;
! 1119:
! 1120: #if 0 /* no se ha incluido el parámetro aún */
! 1121: case 'e': /* mostrar estado */
! 1122: configuracion.XXXXXX = SI;
! 1123: arg_leido = SI;
! 1124: break;
! 1125: #endif
! 1126:
! 1127: case 'v': /* mostrar ventana */
! 1128: configuracion.verventana = SI;
! 1129: arg_leido = SI;
! 1130: break;
! 1131:
! 1132: default:
! 1133: sprintf(mensaje, "[CapturarArgumentos] La opción -M%c no se reconoce", (char)*(*argv));
! 1134: Notificar(mensaje, NO_ERROR, ECO_NO);
! 1135: break;
! 1136: }
! 1137: }
! 1138: break;
! 1139:
! 1140: default:
! 1141: sprintf(mensaje, "[CapturarArgumentos] La opción -%c no se reconoce", (*argv)[1]);
! 1142: Notificar(mensaje, NO_ERROR, ECO_NO);
! 1143: break;
! 1144: }
! 1145: }
! 1146:
! 1147: if(arg_leido == SI) strcpy(configuracion.captura, "Paso de argumentos");
! 1148:
! 1149: ValidarConfiguracion();
! 1150: }
! 1151:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>