/*--------------------------------------------------------------------
 * FICHERO:  MmoLong.c
 * OBJETIVO: Definir la funcin Mmo_Longitud()
 * AUTOR:    Pedro Reina
 * FECHA:    X.12.7.1995
 *------------------------------------------------------------------*/

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

#include "Memo.h"

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

/*--------------------------------------------------------------------
 * FUNCION:  Mmo_Longitud()
 * OBJETIVO: Calcular la longitud en octetos de un registro
 * ENTRADAS: El objeto memo y el nmero de bloque donde comienza el registro
 * SALIDAS:  Un entero que indica la longitud del registro
 * EJEMPLO:  Mmo_Longitud ( Dato, 17 )
 * NOTA:     Los fines de lnea cuentan como dos caracteres
 * ALGORITMO:
 *      Ir contando caracteres hasta encontrar el fin de registro
 *      (Cuando se acaba un bloque hay que leer el siguiente)
 *------------------------------------------------------------------*/
entero Mmo_Longitud (Memo, Numero)
memo     Memo;
contador Numero;
  {
  entero   Respuesta = 0, i;
  logico   Sigue = SI;
  contador Leido;
  
  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 indica el fin de registro */
        { Sigue = NO; }
      else  { Respuesta++; }  
      }                     
      
    if ( Sigue && Leido==MMO_TAMANOBLOQUE )
      { Leido = Mmo_LeeBloque (Memo, ++Numero); }  
    else  { Sigue = NO; }  /* Condicin extraa: no quedan caracteres
                              pero se ha acabado el fichero */
    }
  
  return ( Respuesta );
  }