/*--------------------------------------------------------------------
 * FICHERO:  FchAbre.c
 * OBJETIVO: Definir las funcin Fch_Abre() y Fch_Cierra()
 * AUTOR:    Pedro Reina
 * FECHA:    D.23.4.1995
 *------------------------------------------------------------------*/

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

#include "Fichero.h"

#include <stdio.h>       /* fopen() */
                                              
/*--------------------------------------------------------------------
 * Definicin de funciones
 *------------------------------------------------------------------*/

/*--------------------------------------------------------------Olimpo
 * FUNCION:  Fch_Abre()
 * OBJETIVO: Abrir un fichero
 * ENTRADAS: El nombre del fichero y el tipo
 * SALIDAS:  El fichero abierto o NIL si ha habido algn error
 * EJEMPLO:  Fch_Abre ( "Datos.dat", "r" )
 *------------------------------------------------------------------*/
fichero Fch_Abre (Nombre, Modo)
cadena Nombre;
char  *Modo;
  {
  fichero Respuesta;
  FILE   *Manejador; 

#ifdef OLIMPO_PC
  Fch_Inicia();
#endif

  if ( Respuesta = (fichero) Mem_Crea (sizeof(Fch_st)) )
    {
    if ( Manejador = fopen (Nombre,Modo) )
      {
      Fch_PonManejador (Respuesta, Manejador);
      Fch_PonNombreReal (Respuesta, Nombre);
      }
    else  
      { 
      Mem_Destruye (Respuesta);
      Respuesta = (fichero) NIL;
      }
    }

  return ( Respuesta );
  }

/*--------------------------------------------------------------Olimpo
 * MACRO:    Fch_Cierra()
 * OBJETIVO: Cerrar un fichero
 * ENTRADAS: El fichero
 * SALIDAS:  Lgica, que indica si todo ha ido bien
 * EJEMPLO:  Fch_Cierra ( Salida )
 *------------------------------------------------------------------*/
logico Fch_Cierra (Fichero)
fichero Fichero;
  {
  int Estado;
  
  Estado = fclose (Fch_Manejador(Fichero));
  Cad_Destruye (Fch_NombreReal(Fichero));
  Mem_Destruye (Fichero);
  
  return ( Estado == 0 );
  }  