Add original unix v6
This commit is contained in:
+154
@@ -0,0 +1,154 @@
|
||||
# include "ne.h"
|
||||
|
||||
fromto(p1,p2,p3) int p1,p2,p3; {
|
||||
int w,h,b,h1,b1;
|
||||
yyval = oalloc();
|
||||
h1 = eht[yyval] = eht[p1];
|
||||
b1 = ebase[p1];
|
||||
b = 0;
|
||||
w = ewid[p1];
|
||||
if( p2>0 ){
|
||||
w = max(w, ewid[p2]);
|
||||
eht[yyval] =+ eht[p2];
|
||||
b = eht[p2];
|
||||
}
|
||||
if( p3>0 ){
|
||||
w = max(w, ewid[p3]);
|
||||
eht[yyval] =+ eht[p3];
|
||||
}
|
||||
ewid[yyval] = w;
|
||||
printf(".ds %d ", yyval); /* bottom of middle box */
|
||||
if( p2>0 ){
|
||||
down(eht[p2]-ebase[p2]+b1);
|
||||
fwd((w-ewid[p2])/2);
|
||||
printf("\\*(%d", p2);
|
||||
back((w+ewid[p2])/2);
|
||||
up(eht[p2]-ebase[p2]+b1);
|
||||
}
|
||||
fwd((w-ewid[p1])/2);
|
||||
printf("\\*(%d", p1);
|
||||
fwd((1+w-ewid[p1])/2);
|
||||
if( p3>0 ){
|
||||
up(h1-b1+ebase[p3]);
|
||||
back((w+ewid[p3])/2);
|
||||
printf("\\*(%d", p3);
|
||||
fwd((w-ewid[p3])/2);
|
||||
down(h1-b1+ebase[p3]);
|
||||
}
|
||||
putchar('\n');
|
||||
ebase[yyval] = b + b1;
|
||||
if(dbg)printf(".\tfrom to: S%d <- %d f %d t %d; h=%d b=%d,w=%d\n",
|
||||
yyval,p1,p2,p3,eht[yyval], ebase[yyval], ewid[yyval]);
|
||||
ofree(p1);
|
||||
if( p2>0 ) ofree(p2);
|
||||
if( p3>0 ) ofree(p3);
|
||||
}
|
||||
|
||||
paren(leftc,p1,rightc) int p1, leftc, rightc; {
|
||||
int n,h1,b1;
|
||||
yyval = oalloc();
|
||||
h1 = eht[p1]; ebase[yyval] = b1 = ebase[p1];
|
||||
n = max(b1+1, h1-b1-1);
|
||||
eht[yyval] = 2*n;
|
||||
if( eht[yyval] > h1 )
|
||||
++ebase[yyval];
|
||||
printf(".ds %d ", yyval);
|
||||
brack(n,'|');
|
||||
printf("\\*(%d", p1);
|
||||
if( rightc )
|
||||
brack(n,'|');
|
||||
putchar('\n');
|
||||
ewid[yyval] = ewid[p1] + 1 + (rightc ? 1 : 0);
|
||||
if(dbg)printf(".\tcurly: h=%d b=%d n=%d w=%d l=%c,r=%c\n",
|
||||
eht[yyval],ebase[yyval],n,ewid[yyval],leftc,rightc);
|
||||
ofree(p1);
|
||||
}
|
||||
|
||||
brack(n,c) int n,c; {
|
||||
int j;
|
||||
down(n-1);
|
||||
for( j=0; j < n; j++ ){
|
||||
putchar(c);
|
||||
back(1);
|
||||
up(2);
|
||||
}
|
||||
down(n+1);
|
||||
fwd(1);
|
||||
}
|
||||
|
||||
diacrit(p1,type) int p1,type; {
|
||||
int c,t;
|
||||
c = oalloc();
|
||||
switch(type){
|
||||
case 'H':
|
||||
printf(".ds %d ^\n",c);
|
||||
ewid[c] = 1;
|
||||
break;
|
||||
case 'T':
|
||||
printf(".ds %d ~\n",c);
|
||||
ewid[c] = 1;
|
||||
break;
|
||||
case 'D':
|
||||
printf(".ds %d ", c);
|
||||
up(2);
|
||||
putchar('.');
|
||||
down(2);
|
||||
putchar('\n');
|
||||
ewid[c] = 1;
|
||||
break;
|
||||
case 'U':
|
||||
printf(".ds %d ", c);
|
||||
up(2);
|
||||
printf("..");
|
||||
down(2);
|
||||
putchar('\n');
|
||||
ewid[c] = 2;
|
||||
break;
|
||||
case 'B':
|
||||
printf(".ds %d ", c);
|
||||
up(eht[p1]);
|
||||
line(ewid[p1]);
|
||||
down(eht[p1]);
|
||||
putchar('\n');
|
||||
ewid[c] = ewid[p1];
|
||||
break;
|
||||
case 'N':
|
||||
printf(".ds %d ", c);
|
||||
down(ebase[p1]);
|
||||
line(ewid[p1]);
|
||||
up(ebase[p1]);
|
||||
putchar('\n');
|
||||
ewid[c] = ewid[p1];
|
||||
break;
|
||||
}
|
||||
yyval = oalloc();
|
||||
printf(".ds %d \\*(%d", yyval, p1);
|
||||
back((ewid[p1]+ewid[c])/2);
|
||||
printf("\\*(%d", c);
|
||||
fwd(abs(ewid[p1]-ewid[c])/2);
|
||||
putchar('\n');
|
||||
ewid[yyval] = max(ewid[p1], ewid[c]);
|
||||
ebase[yyval] = ebase[p1];
|
||||
eht[yyval] = eht[p1];
|
||||
if( type != 'N' )
|
||||
eht[yyval]++;
|
||||
if(dbg)printf(".\t%c diacrit: S%d <- %d; h=%d,b=%d,w=%d\n",
|
||||
type, yyval, p1, eht[yyval], ebase[yyval], ewid[yyval]);
|
||||
ofree(p1); ofree(c);
|
||||
}
|
||||
|
||||
move(dir, amt, p) int dir, amt; char *p; {
|
||||
yyval = p;
|
||||
printf(".ds %d ", yyval);
|
||||
if( dir==0 ) fwd(amt);
|
||||
else if( dir==1 ) up(amt);
|
||||
else if( dir==2 ) back(amt);
|
||||
else if( dir==3 ) down(amt);
|
||||
printf("\\*(%d\n", p);
|
||||
if( dir==1 )
|
||||
ebase[yyval] =- amt;
|
||||
else if( dir==3 )
|
||||
ebase[yyval] =+ amt;
|
||||
if(dbg)printf(".\tmove %d dir %d amt %d; h=%d b=%d\n",
|
||||
p,dir,amt,eht[yyval],ebase[yyval]);
|
||||
}
|
||||
Reference in New Issue
Block a user