! "W N =    @ #D  D ҃** ^ B ы e@W 0 ,& 7    ` " ɋ -ɋ e- ɋ ?*p ȋB@E A Ze   "@    7@ eEmc.c Mx/ul.c Mx'p.c Mx'char *start; char *inp; char *endp; int maxlen; int pgwidth 72; int nlines; char **lines; main() { extern fout; char c; int len; int ncols, nrows, colwidth; int nfull; int nr; int i, j; char **last; char *p, **lp; fout = dup(1); start = sbrk(128); inp = start; endp = start + 128; len = 0; do { c = getchar(); store(c); if(c == '\n') { if(len > maxlen) maxlen = len; len = 0; nlines++; } else len++; } while(c); ncols = pgwidth/(maxlen+3); if(ncols == 0) { for(p = start; *p; p++) putchar(*p); return 0; } nrows = (nlines+ncols-1)/ncols; colwidth = pgwidth/ncols; nfull = ncols - (ncols*nrows - nlines); lines = sbrk(2*(nrows*ncols)); for(i = 0; i < nrows*ncols; i++) lines[i] = "\n"; nr = nrows; i = j = 0; lp = p = start; while(*p) if(*p++ == '\n') { lines[i*ncols + j] = lp; lp = p; if(++i == nr) { i = 0; if(++j == nfull) nr--; } } for(i = 0; i < nrows; i++) { for(j = 0; j < ncols; j++) printw(lines[i*ncols + j], colwidth); putchar('\n'); } flush(); return 0; } store(c) char c; { if(inp >= endp) endp = sbrk(128) + 128; *inp++ = c; } printw(l, w) char *l; { while(*l != '\n') { putchar(*l++); w--; } while(w--) putchar(' '); } "; nr = nrows; i = j = 0; lp = p = start; while(*p) if(*p++ == '\n') { lines[i*ncols + j] = lp; lp = p; if(++i == nr) { i = 0; if(++j == nfull) nr--; } } for(i = 0; i < nrows; i++) { for(j = 0; j < ncols; j++) printw(lines[i*ncols + j], col#define LINELEN 256 char line[LINELEN]; char flags[LINELEN]; int lp; main() { extern fout; fout = dup(1); while(rdline()) putline(); flush(); return 0; } reset() { int i; for(i = 0; i < LINELEN; i++) { line[i] = 0; flags[i] = 0; } lp = 0; } rdline() { char c; reset(); while((c = getchar()) != '\n') { if(c == 0) return 0; store(c); } return 1; } store(c) char c; { switch(c) { case '\b': lp--; if(lp < 0) lp = 0; break; case '_': if(line[lp]) flags[lp++] =| 1; else line[lp++] = c; break; default: line[lp++] = c; break; } } putline() { int ul; ul = 0; for(lp = 0; lp < LINELEN; lp++) { if(line[lp] == 0) break; if((flags[lp]&1)!=0 && !ul) { puts("\033[4m"); ul = 1; } else if((flags[lp]&1)==0 && ul) { puts("\033[0m"); ul = 0; } putchar(line[lp]); } if(ul) puts("\033[0m"); putchar('\n'); } puts(s) char *s; { while(*s) putchar(*s++); } lp--; if(lp < 0) lp = 0; break; case '_': if(line[lp]) flags[lp++] =| 1; int tty; int lines; main() { extern fout; fout = dup(1); tty = open("/dev/tty", 2); if(tty < 0) { printf("cannot open\n"); return 1; } print(22); } waitnl() { char c; while(read(tty, &c, 1) > 0) if(c == '\n') return; putchar('\n'); flush(); exit(0); } copyline() { char c; while(c = getchar()) { if(c == '\n') return; putchar(c); } exit(0); } print(pagesize) { int c; for(;;) { while(lines++ < pagesize-1) { copyline(); putchar('\n'); } lines = 0; copyline(); waitnl(); } } main() { extern fout; fout = dup(1); tty = open("/dev/tty", 2); if(tty < 0) { printf("cannot open\n"); return 1; } print(22); } waitnl() { char c; while(read(tty, &c, 1) > 0) if(c == '\n') return; putchar('\n'); flush(); exit(0); } copyline() { char c; while(c = getchar()) { if(c == '\n') return; putchar(c); } exit(0); } print(pagesize) { int c; for(;;) { while(lines++ < pagesize-1) { copyline(); putchar('\n'); } lines = 0; copyline(