/***********************************************
 * CP-I warmup 1999-2000
 * Problem #12
 **********************************************/

/*
 * Question:
 *
 * Write a complete C program to fold long lines into lines of
 * 40 characters.  A word must not be split across two lines. The
 * program must scan lines from the user until he enters "STOP" as
 * the first word of a line.  A line is defined as a set of characters
 * terminated by a '\n'.  
 *
 * You can assume that there are no punctuation marks in the input.
 *
 * Example: 
 * input:
 *      this is a gift from all the would be cp2 team members
 *      to all the would be students
 *      STOP
 * the output must be:
 *      this is a gift from all the would be cp2
 *       team members
 *      to all the would be students
 *      
 * Note how a line has been split into two lines.
 * Both the lines satisfy the condition that their length is utmost
 * 40 characters, and no woed is split across lines.
 *
 * The fold command in UNIX can do this job.
 */

#include <stdio.h>
#include <string.h>

#define BUFFER_LENGTH           104
#define MAX_WORD_LENGTH         20

#define INPUT_TERMINATOR        "STOP"
#define LINE_LENGTH             40

main()
{
        char buffer[BUFFER_LENGTH]={'\0'};
        char word[MAX_WORD_LENGTH]="";
        char changed[BUFFER_LENGTH]={'\0'};
        char ch='\n';
        int i;
        
        while(1)
        {
                word[0]='\0';
                scanf("%s",word);
                if(ch=='\n' && !strcmp(word,INPUT_TERMINATOR))
                        break;
                ch=getchar();
                strcat(buffer,word);
                buffer[strlen(buffer)]=ch;
        }       
        //printf("%s\nSCANNED\n",buffer);       
        printf("%s\n",changed);
        fold(changed,buffer,LINE_LENGTH);
        printf("Folded:\n%s\n",changed);
}

int fold(char *dest,char *old,int line_length)
{
        char word[MAX_WORD_LENGTH]={'\0'};
        char *prev,*temp;
        int cur_len=0,i=0;
        
        
        temp=old;
        prev=old;
        
        while(temp=strpbrk(temp," \t\n"))
        {
                if(cur_len+temp-prev>=line_length)
                {
                        dest[strlen(dest)]='\n';
                        cur_len=0;
                }
                strncat(dest,prev,temp-prev);
                dest[strlen(dest)]=temp[0];
                cur_len+=temp-prev+1;           
                
                if(temp[0]=='\n')
                        cur_len=0;
                temp++;
                prev=temp;
        }
}