/* permuted title index */ char *tfil "/tmp/p.tmp"; char *sw[] { "a", "an", "and", "as", "for", "is", "of", "on", "or", "the", "to", "up", 0}; char line[200]; int ch; int ptflg; int llen 72; main(argc, argv) int argc; char *argv[]; { extern fin, fout; extern onintr(); int f; if(argc>1 && *argv[1]=='-') { llen = 100; ptflg++; argc--; argv++; } if(argc<2) { printf("arg count\n"); exit(); } fin = open(argv[1]); if(fin < 0) { printf("%s: cannot open\n", argv[1]); exit(); } f = creat(tfil, 0600); if(f < 0) { printf("cannot create %s\n", tfil); exit(); } fout = f; if ((signal(2, 1) & 01) ==0) signal(2, onintr); pass1(); flush(); close(fin); fin = 0; close(fout); fout = 1; f = fork(); if(f < 0) { printf("try again\n"); exit(); } if(f == 0) { execl("/bin/sort", "sort", "-d", "-o", tfil, tfil, 0); execl("/usr/bin/sort", "sort", "-d", "-o", tfil, tfil, 0); printf("someone moved sort\n"); exit(); } while(wait() != f); fin = open(tfil, 0); if(fin < 0) { printf("cannot reopen %s\n", tfil); exit(); } if (argc>=3) f = creat(argv[2], 0666); else f = dup(1); if(f < 0) { printf("%s: cannot open\n", argv[2]); exit(); } fout = f; pass2(); flush(); onintr(); } onintr() { unlink(tfil); exit(); } pass1() { int n, c, i, ll, j, k, cc, ccc; loop: if ((c=getchar())=='\0') return; n = 0; i = 0; while(c!='\n' && c!='\0') { if(c == '(') c = 0177; if(c==' ' || c=='\t') { i++; c = getchar(); continue; } if(i) { i = 0; if(n<=llen) line[n++] = ' '; } if (n<=llen) line[n++] = c; c = getchar(); } ll = n; line[n++] = 0; i = -1; l1: while((cc=line[++i])==' '); n = i; j = 0; while(sw[j]) { i = n; k = 0; while ((cc=sw[j][k++])==line[i++]); if(cc==0 && ((ccc=line[--i])==' '||ccc==0)) goto l1; j++; } i = n; while (c=line[n++]) putchar(c); putchar('~'); n = 0; while (n=0) nafter++; else nbfore++; n++; c = getchar(); } if (tilde<0) tilde = n++; nafter--; if (nbfore>llen2) { i = tilde; while (nbfore > llen2) while(line[--i]!=' ' && i>=0) nbfore--; if (i<0) goto l1; line[tilde] = 0200; nafter =+ (tilde-i+2); tilde = i; } if (nafter >= llen-llen2) { i = tilde; while(nafter-- >= llen-llen2) while(line[++i]!=' ' && i=n) goto l1; line[tilde] = 0200; nafter++; tilde = i; } l1: if(!ptflg) { for(i=llen-llen2-nafter; i>=8; i =- 8) putchar('\t'); while(--i>=0) putchar(' '); } else printf(".xx \""); i = tilde; while (++i