1: # include "e.h" 2: # include "e.def" 3: 4: diacrit(p1, type) int p1, type; { 5: int c, t; 6: 7: c = oalloc(); 8: t = oalloc(); 9: nrwid(p1, ps, p1); 10: /* printf(".nr 10 %du\n", max(eht[p1]-ebase[p1]-VERT(2),0)); /* vertical shift if high */ 11: printf(".nr 10 %du-1m\n.if \\n(10<0 .nr 10 0\n",eht[p1]-ebase[p1]); 12: printf(".if \\n(ct>1 .nr 10 \\n(10+.25m\n"); 13: printf(".nr %d .1m\n", t); /* horiz shift if high */ 14: printf(".if \\n(ct>1 .nr %d .15m\n", t); 15: switch(type) { 16: case VEC: 17: printf(".ds %d \\v'-.4m'\\(->\\v'.4m'\n", c); 18: break; 19: case DYAD: 20: printf(".ds %d \\v'-.4m'\\z\\(<-\\(->\\v'.4m'\n", c); 21: break; 22: case HAT: 23: printf(".ds %d \\v'-.17m'^\\v'.17m'\n", c); 24: break; 25: case TILDE: 26: printf(".ds %d \\v'-.09m'~\\v'.09m'\n", c); 27: break; 28: case DOT: 29: printf(".ds %d \\v'-.67m'.\\v'.67m'\n", c); 30: break; 31: case DOTDOT: 32: printf(".ds %d \\v'-.67m'..\\v'.67m'\n", c); 33: break; 34: case BAR: 35: printf(".ds %d \\\h'.05m'\\l'\\n(%du-.1m\\(rn'\\h'.05m'\n", 36: /* printf(".ds %d \\v'.18m'\\h'.05m'\\l'\\n(%du-.1m\\(rn'\\h'.05m'\\v'-.18m'\n",*/ 37: c, p1); 38: break; 39: case UNDER: 40: printf(".ds %d \\l'\\n(%du\\(ul'\n", c, p1); 41: printf(".nr %d 0\n", t); 42: printf(".nr 10 0-%d\n", ebase[p1]); 43: break; 44: } 45: nrwid(c, ps, c); 46: if (lfont[p1] != ITAL) 47: printf(".nr %d 0\n", t); 48: printf(".as %d \\h'-\\n(%du-\\n(%du/2u+\\n(%du'\\v'0-\\n(10u'\\*(%d", 49: p1, p1, c, t, c); 50: printf("\\v'\\n(10u'\\h'-\\n(%du+\\n(%du/2u-\\n(%du'\n", c, p1, t); 51: /* BUG - should go to right end of widest */ 52: if (type != UNDER) 53: eht[p1] += VERT(1); /* 0.15m */ 54: if(dbg)printf(".\tdiacrit: %c over S%d, lf=%c, rf=%c, h=%d,b=%d\n", 55: type, p1, lfont[p1], rfont[p1], eht[p1], ebase[p1]); 56: ofree(c); ofree(t); 57: }