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>