/*--------------------------------------------------------------------
 * FICHERO:  CnfLee.c
 * OBJETIVO: Definir la funcin Cnf_Lee()
 * AUTOR:    Pedro Reina
 * FECHA:    V.14.7.1995
 *------------------------------------------------------------------*/

/*--------------------------------------------------------------------
 * Ficheros de cabecera
 *------------------------------------------------------------------*/

#include "Config.h"

/*--------------------------------------------------------------------
 * Definicin de macros
 *------------------------------------------------------------------*/

#define CNF_CARACTER_COMENTARIO  '*'
#define CNF_CADENA_COMENTARIO    "//"

/*--------------------------------------------------------------------
 * Definicin de funciones
 *------------------------------------------------------------------*/

/*--------------------------------------------------------------Olimpo
 * FUNCION:  Cnf_Lee()
 * OBJETIVO: Obtener la siguiente lnea de una configuracin
 * ENTRADAS: El objeto config
 * SALIDAS:  La cadena si no hay error, o NIL
 * NOTAS:    1. La cadena no contiene '\n'
 *           2. La cadena devuelta hay que destruirla cuando
 *              no sea necesaria
 *           3. La cadena devuelta no tiene espacio en blanco
 *              al final
 * EJEMPLO:  Cnf_Lee ( DatoImpresora )
 * ALGORITMO:
 *     Hacer Vlido NO y Error NO
 *     Mientras no Vlido y no Error
 *       Leer una lnea del fichero en Cadena
 *       Incrementar el nmero de lneas del config
 *       Si no se ha podido
 *         Hacer Error SI
 *       Si se ha podido
 *         Si la lnea no est vaca ni es un comentario
 *           Quitar el trozo que sea comentario
 *           Si lo que queda no est en blanco
 *             Hacer Vlido SI
 *     Si hay Error, devolver NIL
 *     Si no, devolver Cadena recortando el final
 *------------------------------------------------------------------*/
cadena Cnf_Lee (Config)
config Config;
  {
  logico   Valido=NO, Error=NO;
  contador Pos;
  cadena   Cadena, Aux;

  while ( !Valido && !Error )
    {
    if ( Cadena = Fch_LeeLinea ( Cnf_Fichero(Config) ) )
      {
      Cnf_IncrementaLinea (Config);
      if ( Cadena[0] != NULO )
        {
        Pos = Cad_PrimerUtil(Cadena) - 1;
        if (  Cadena[Pos] != CNF_CARACTER_COMENTARIO )
          {
          Pos = Cad_Subcadena (Cadena,CNF_CADENA_COMENTARIO);
          if ( Pos ) { Cadena[Pos-1] = NULO; }
          if ( Cad_PrimerUtil (Cadena) )
            { Valido = SI; }
          else { Cad_Destruye (Cadena); }
          }
        else { Cad_Destruye (Cadena); }
        }
      else { Cad_Destruye (Cadena); }
      }
    else
      { Error = SI; }
    } /* Fin while */

  return ( Cad_RecortaFinal(Cadena) );
  }