|
|
1.1 ! root 1: /*%cc -O % ! 2: */ ! 3: #include <stdio.h> ! 4: struct line{ ! 5: struct line *next; ! 6: int count; ! 7: char str[1]; ! 8: }line; ! 9: copy(p,q) ! 10: register char *p, *q; ! 11: { ! 12: while(*q++ = *p++); ! 13: } ! 14: int eof; ! 15: char * ! 16: getstr(buf) ! 17: char *buf; ! 18: { ! 19: register char *s, c; ! 20: s=buf; ! 21: if(eof){ ! 22: *s++='\0'; ! 23: return(buf); ! 24: } ! 25: while((c=getchar())!='\n' && c!=EOF) ! 26: *s++=c; ! 27: *s++='\0'; ! 28: if(c==EOF) ! 29: eof++; ! 30: return(buf); ! 31: } ! 32: int spcnt; ! 33: putch(c){ ! 34: register i; ! 35: if(c==' ') ! 36: spcnt++; ! 37: else if(c=='\n'){ ! 38: spcnt=0; ! 39: putchar(c); ! 40: } ! 41: else{ ! 42: for(i=0;i<spcnt;i++) ! 43: putchar(' '); ! 44: spcnt=0; ! 45: putchar(c); ! 46: } ! 47: } ! 48: length(s) ! 49: register char *s; ! 50: { ! 51: register i; ! 52: for(i=0;*s++;i++); ! 53: return(i); ! 54: } ! 55: char buf[2048]; ! 56: char obuf[BUFSIZ]; ! 57: main(){ ! 58: register struct line *p, *q; ! 59: register done; ! 60: p=0; ! 61: setbuf(stdout,obuf); ! 62: for(;;){ ! 63: getstr(buf); ! 64: if(eof) break; ! 65: q=p; ! 66: p=(struct line *)malloc(sizeof line+length(buf)); ! 67: p->next=q; ! 68: p->count=0; ! 69: copy(buf, p->str); ! 70: } ! 71: for(;;){ ! 72: done=1; ! 73: for(q=p;q;q=q->next){ ! 74: if(q->str[q->count]){ ! 75: putch(q->str[q->count++]); ! 76: done=0; ! 77: } ! 78: else ! 79: putch(' '); ! 80: } ! 81: if(done) break; ! 82: putch('\n'); ! 83: } ! 84: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.