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

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

#include "Memo.h"

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

/*--------------------------------------------------------------Olimpo
 * FUNCION:  Mmo_Lee()
 * OBJETIVO: Leer un registro de un fichero memo
 * ENTRADAS: El objeto memo y el nmero de bloque donde comienza
 *           el registro
 * SALIDAS:  Una cadena con el texto o NIL si hay algn problema
 * EJEMPLO:  Mmo_Lee ( Dato, 17 )
 * NOTA:     Los fines de lnea se indican con el carcter \r
 * ALGORITMO:
 *      Crear una cadena con longitud suficiente para todo el texto
 *      Ir leyendo caracteres hasta terminar (con Control-Z)
 *        (El carcter 10 (Nueva lnea) se suprime porque el MS-DOS
 *         necesita dos caracteres para sealar el fin de lnea pero
 *         Olimpo slo usa uno, el \r)
 *------------------------------------------------------------------*/
cadena Mmo_Lee (Memo, Numero)
memo     Memo;
contador Numero;
  {
  cadena   Respuesta;
  entero   i, j=0;
  logico   Sigue = SI;
  contador Leido;

  if ( Respuesta = Cad_Crea (Mmo_Longitud(Memo, Numero)) )
    {
    Fch_Coloca (Mmo_Fichero(Memo), (entero)Numero*MMO_TAMANOBLOQUE);

    while ( Sigue )
      {
      Leido = Mmo_LeeBloque (Memo, Numero);

      for ( i=0 ; i<Leido && Sigue ; i++ )
        {
        if ( Mmo_Dato(Memo)[i] == 26 )  /* Control-Z, fin de registro */
          { Sigue = NO; }
        else if ( Mmo_Dato(Memo)[i] != 10 )
          { Respuesta[j++] = Mmo_Dato(Memo)[i]; }
        }

      if ( Sigue && Leido==MMO_TAMANOBLOQUE )
        { Leido = Mmo_LeeBloque (Memo, ++Numero); }
      else  { Sigue = NO; }  /* Condicin extraa: no quedan caracteres
                                pero se ha acabado el fichero */
      }

    Respuesta[j] = NULO;
    }

  return ( Respuesta );
  }