V10/games/rot.c

Compare this file to the similar file:
Show the results in this format:

/*%cc -O %
 */
#include <stdio.h>
struct line{
	struct line *next;
	int count;
	char str[1];
}line;
copy(p,q)
	register char *p, *q;
{
	while(*q++ = *p++);
}
int eof;
char *
getstr(buf)
	char *buf;
{
	register char *s, c;
	s=buf;
	if(eof){
		*s++='\0';
		return(buf);
	}
	while((c=getchar())!='\n' && c!=EOF)
		*s++=c;
	*s++='\0';
	if(c==EOF)
		eof++;
	return(buf);
}
int spcnt;
putch(c){
	register i;
	if(c==' ')
		spcnt++;
	else if(c=='\n'){
		spcnt=0;
		putchar(c);
	}
	else{
		for(i=0;i<spcnt;i++)
			putchar(' ');
		spcnt=0;
		putchar(c);
	}
}
length(s)
	register char *s;
{
	register i;
	for(i=0;*s++;i++);
	return(i);
}
char buf[2048];
char obuf[BUFSIZ];
main(){
	register struct line *p, *q;
	register done;
	p=0;
	setbuf(stdout,obuf);
	for(;;){
		getstr(buf);
		if(eof) break;
		q=p;
		p=(struct line *)malloc(sizeof line+length(buf));
		p->next=q;
		p->count=0;
		copy(buf, p->str);
	}
	for(;;){
		done=1;
		for(q=p;q;q=q->next){
			if(q->str[q->count]){
				putch(q->str[q->count++]);
				done=0;
			}
			else
				putch(' ');
		}
		if(done) break;
		putch('\n');
	}
}