/*--------------------------------------------------------------------
 * FICHERO:  FchAbreA.c
 * OBJETIVO: Definir la funcin Fch_AbreActualizar()
 * AUTOR:    Pedro Reina
 * FECHA:    D.23.4.1995
 *------------------------------------------------------------------*/

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

#include "Fichero.h"

#include <stdio.h>      /* rewind() */

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

/*--------------------------------------------------------------Olimpo
 * FUNCION:  Fch_AbreActualizar()
 * OBJETIVO: Abrir un fichero para actualizarlo
 * ENTRADAS: El nombre del fichero y el modo: texto o binario
 * SALIDAS:  El fichero abierto o NIL si ha habido algn error
 * NOTA:     El puntero del fichero queda en el comienzo
 * EJEMPLO:  Fch_AbreActualizar ( "Datos.dat", FCH_BINARIO )
 * ALGORITMO:
 *      Si el fichero existe
 *        Se intenta abrir el fichero
 *        Si se puede, se coloca el puntero al principio y se devuelve
 *        Si no se puede, se informa al usuario y se devuelve NIL
 *------------------------------------------------------------------*/
fichero Fch_AbreActualizar (Nombre, Modo)
cadena Nombre;
octeto Modo;
  {
  fichero Fichero = NIL;
  cadena  Mensaje, IndicadorModo;

  if ( ! Fch_Existe (Nombre) )
    {
    Mensaje = Cad_Une ("El fichero \"",Nombre,"\" no existe",CAD_FIN);
    Usr_Avisa (Mensaje);
    Cad_Destruye (Mensaje);
    }

  else
    {
    if ( Modo == FCH_TEXTO ) { IndicadorModo = "r+"; }
    else                     { IndicadorModo = "r+b"; }

    Fichero = Fch_Abre (Nombre,IndicadorModo);
    if ( !Fichero )
      {
      Mensaje = Cad_Une ("El fichero \"",Nombre,"\" no se puede actualizar",
                         CAD_FIN);
      Usr_Avisa (Mensaje);
      Cad_Destruye (Mensaje);
      }
    else
      { rewind (Fch_Manejador(Fichero)); }
    }

  return ( Fichero );
  }
