Add original unix v6
This commit is contained in:
+222
@@ -0,0 +1,222 @@
|
||||
/* 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<i) {
|
||||
c = line[n++];
|
||||
if (c!=' ' || n!=i)
|
||||
putchar(c);
|
||||
}
|
||||
putchar('\n');
|
||||
while((c=line[i++])!=0 && c!=' ');
|
||||
--i;
|
||||
if (c) goto l1;
|
||||
goto loop;
|
||||
}
|
||||
|
||||
pass2()
|
||||
{
|
||||
int i, n, c, tilde, llen2, nbfore, nafter;
|
||||
|
||||
|
||||
llen2 = llen/2+6;
|
||||
loop:
|
||||
if ((c=getchar())=='\0')
|
||||
return;
|
||||
n = nbfore = nafter = 0;
|
||||
tilde = -1;
|
||||
while(c!='\n' && c!='\0') {
|
||||
if(c == 0177)
|
||||
c = '(';
|
||||
if (n<=llen) line[n] = c;
|
||||
if (c=='~') tilde = n;
|
||||
if (tilde>=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) nafter--;
|
||||
if (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<n) p1char(line[i]);
|
||||
if(!ptflg)
|
||||
printf(" "); else
|
||||
printf("\" \"");
|
||||
i = -1;
|
||||
while(++i<tilde) p1char(line[i]);
|
||||
if(ptflg)
|
||||
putchar('"');
|
||||
putchar('\n');
|
||||
goto loop;
|
||||
}
|
||||
|
||||
p1char(c)
|
||||
{
|
||||
if ((c&0377) == 0200) {
|
||||
putchar('.');
|
||||
putchar('.');
|
||||
c = '.';
|
||||
}
|
||||
putchar(c);
|
||||
}
|
||||
Reference in New Issue
Block a user