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>