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