/* kyr1-09b.c: linea mas larga, con variables externas */

#include <stdio.h>

#define MAXLINEA 1000	/* largo m ximo de la line de entrada */

int max;			/* maxima longitud hasta el momento */
char linea[MAXLINEA];		/* linea de entrada actual */
char maslarga[MAXLINEA];	/* linea mas larga */

int leelinea(void);
void copia(void);

main()
{
  int largo;			/* largo actual de la linea */
  extern int max;
  extern char maslarga[];

  max = 0;
  while ((largo = leelinea()) > 0)
    if (largo > max){
      max = largo;
      copia();
    }

  if (max > 0)		/* hubo al menos una linea */
    printf("\nLa linea mas larga fue:\n");
    printf("%s\n", maslarga);
  return 0;
}

/* leelinea: lee linea, devuelve longitud; con variables externas */
int leelinea(void)
{
  int c, i;
  extern char line[];

  for (i=0; i<MAXLINEA-1 && (c=getchar()) != EOF && c!='\n'; ++i)
    linea[i] = c;
  if (c == '\n'){
    linea[i] = c;
    ++i;
  }
  linea[i] = '\0';
  return i;
}

/* copia: copia "desde" en "hasta", con variables externas */
/*   supone "hasta" suficientemente grande */
void copia(void)
{
  int i;
  extern char linea[], maslarga[];

  i = 0;
  while ((maslarga[i] = linea[i]) != '\0')
    ++i;
}
