/*--------------------------------------------------------------------
 * FICHERO:  IndNuePa.c
 * OBJETIVO: Definir la funcin Ind_NuevaPagina()
 * AUTOR:    Pedro Reina
 * FECHA:    D.30.7.1995
 *------------------------------------------------------------------*/

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

#include "Indice.h"

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

/*--------------------------------------------------------------------
 * FUNCION:  Ind_NuevaPagina()
 * OBJETIVO: Crear una nueva pgina en un ndice
 * ENTRADAS: El ndice
 * SALIDAS:  Un entero que indica la posicin en el fichero en que
 *           se ha anotado la pgina o 0 si no se ha podido crear
 * EJEMPLO:  Ind_NuevaPagina ( Agenda )
 * ALGORITMO:
 *      Ponerse al final del fichero y anotar la posicin
 *      Limpiar la pgina en memoria
 *      Escribir el vector de desplazamientos a cada item
 *      Escribir la pgina al fichero
 *      Devolver la posicin en que se ha grabado
 *------------------------------------------------------------------*/
entero Ind_NuevaPagina (Indice)
indice Indice;
  {
  entero   Posicion = 0;
  contador i, Desplazamiento, LongitudItem;
  
  Fch_Coloca (Ind_Fichero(Indice), 0);   /* Exigencia del QL */
  
  if ( Fch_ColocaFinal (Ind_Fichero(Indice)) &&
       ( (Posicion = Fch_Posicion (Ind_Fichero(Indice))) != -1 ))
    {   
    Mem_Asigna (Ind_Pagina(Indice), 0, IND_PAGINA);
    
    LongitudItem = Ind_LongitudClave(Indice) + 8;
    Desplazamiento = 2 + 2 * (Ind_ClavesPagina(Indice)+1);
    for ( i=0 ; i<=Ind_ClavesPagina(Indice) ; i++ )
      {
      Ind_PonDesplazamiento (Indice, i, Desplazamiento);
      Desplazamiento += LongitudItem;
      }
      
    if ( !Fch_EscribeOcteto (Ind_Fichero (Indice), Ind_Pagina(Indice), 
                             IND_PAGINA) )
      { Posicion = 0; }
    }
    
  return ( Posicion );
  }
