/* paragrafo 1.9    pagina 27
   visualizza la lunghezza di righe arbitrariamente lunghe e ne mostra la maggior parte possibile
*/
#include <stdio.h>
#define	MAXLINE	40

int getline(char line[], int maxline);
void copy(char to[], char from[]);

int main()
{
    int i;
    int len;
    int lung;
    char line[MAXLINE];
    char text[MAXLINE];
    
    lung = 0;
    printf("Dimensione buffer:%3d\n", MAXLINE);
    
    while ((len = getline(line, MAXLINE)) > 0) {
        lung = lung + len;
        if (lung <= MAXLINE - 1)
            copy(text, line);
        if (line[len - 1] == '\n') {
            printf("%3d caratteri: %s", lung, text);
            if (lung > len)
                putchar('\n');
            lung = 0;
        }
    }

    if (lung > 0)
        printf("%3d caratteri: %s\n", lung, text);

    return 0;
}

/* getline: legge una riga in ingresso, la assegna a s, ne restituisce la lunghezza */
int getline(char s[], int lim)
{
    int c, i;
    
    for (i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i) {
        s[i] = c;
    }
    if (c == '\n') {
        s[i] = c;
        ++i;
    }
    s[i] = '\0';
    return i;
}

/* copy: copia la stringa 'from' sulla stringa 'to'; assume che 'to' sia sufficientemente lunga */
void copy(char to[], char from[])
{
    int i;
    
    i = 0;
    while ((to[i] = from[i]) != '\0')
        ++i;
}