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

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

#include "Fichero.h"

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

/*--------------------------------------------------------------Olimpo
 * FUNCION:  Fch_AbreGrabar()
 * OBJETIVO: Abrir un fichero para grabar en l
 * ENTRADAS: El nombre del fichero y el modo: texto o binario
 * SALIDAS:  El fichero abierto o NIL si ha habido algn error o
 *           el usuario se niega a sobreescribir un fichero ya
 *           existente
 * EJEMPLO:  Fch_AbreGrabar ( "Informe.txt", FCH_BINARIO )
 * ALGORITMO:
 *      Si el fichero existe
 *        Si el usuario quiere grabar encima, hay que grabar
 *        Si no quiere, no hay que grabar
 *      Si el fichero no existe, hay que grabar
 *      Si hay que grabar
 *        Intentar abrir el fichero
 *          Si se puede, se devuelve
 *          Si no se puede, se informa al usuario y se devuelve NIL
 *      Si no hay que grabar, devolver NIL
 *------------------------------------------------------------------*/
fichero Fch_AbreGrabar (Nombre, Modo)
cadena Nombre;
octeto Modo;
  {
  fichero Fichero;
  cadena  Mensaje, IndicadorModo;
  logico  HayQueGrabar;

  if ( Fch_Existe (Nombre) )
    {
    Mensaje = Cad_Une ("El fichero \"",Nombre,"\" ya existe. ",
                       "Grabo sobre l?", CAD_FIN);
    if ( Usr_Consulta (Mensaje) ) { HayQueGrabar = SI; }
    else                          { HayQueGrabar = NO; }
    Cad_Destruye (Mensaje);
    }
  else
    { HayQueGrabar = SI; }

  if ( HayQueGrabar )
    {
    if ( Modo == FCH_TEXTO ) { IndicadorModo = "w+"; }
    else                     { IndicadorModo = "wb+"; }
    Fichero = Fch_Abre (Nombre,IndicadorModo);
    if ( !Fichero )
      {
      Mensaje = Cad_Une ("En el fichero \"",Nombre,
                         "\" no se puede grabar",CAD_FIN);
      Usr_Avisa (Mensaje);
      Cad_Destruye (Mensaje);
      }
    }
  else  { Fichero = (fichero)NIL; }

  return ( Fichero );
  }
