1*14486Ssam #ifndef lint 2*14486Ssam static char sccsid[] = "@(#)paren.c 4.3 08/11/83"; 3*14486Ssam #endif 411014Sshannon 511014Sshannon # include "e.h" 611014Sshannon 711014Sshannon paren(leftc, p1, rightc) int p1, leftc, rightc; { 811014Sshannon int n, m, h1, j, b1, v; 911014Sshannon h1 = eht[p1]; b1 = ebase[p1]; 1011014Sshannon yyval = p1; 1111023Sshannon #ifndef NEQN 1211014Sshannon lfont[yyval] = rfont[yyval] = 0; 1311014Sshannon n = (h1+(6*EFFPS(ps)-1))/(6*EFFPS(ps)); 1411023Sshannon #else NEQN 1511023Sshannon n = max(b1+VERT(1), h1-b1-VERT(1)) / VERT(1); 1611023Sshannon #endif NEQN 1711014Sshannon if( n<2 ) n = 1; 1811014Sshannon m = n-2; 1911014Sshannon if (leftc=='{' || rightc == '}') { 2011014Sshannon n = n%2 ? n : ++n; 2111014Sshannon if( n<3 ) n=3; 2211014Sshannon m = n-3; 2311014Sshannon } 2411023Sshannon #ifndef NEQN 2511014Sshannon eht[yyval] = VERT(6 * ps * n); 2611014Sshannon ebase[yyval] = b1 + (eht[yyval]-h1)/2; 2711014Sshannon v = b1 - h1/2 + VERT( (ps*6*4)/10 ); 2811023Sshannon #else NEQN 2911023Sshannon eht[yyval] = VERT(2 * n); 3011023Sshannon ebase[yyval] = (n)/2 * VERT(2); 3111023Sshannon if (n%2 == 0) 3211023Sshannon ebase[yyval] -= VERT(1); 3311023Sshannon v = b1 - h1/2 + VERT(1); 3411023Sshannon #endif NEQN 3511014Sshannon printf(".ds %d \\|\\v'%du'", yyval, v); 3611014Sshannon switch( leftc ) { 3711014Sshannon case 'n': /* nothing */ 3811014Sshannon case '\0': 3911014Sshannon break; 4011014Sshannon case 'f': /* floor */ 4111014Sshannon if (n <= 1) 4211014Sshannon printf("\\(lf"); 4311014Sshannon else 4411014Sshannon brack(m, "\\(bv", "\\(bv", "\\(lf"); 4511014Sshannon break; 4611014Sshannon case 'c': /* ceiling */ 4711014Sshannon if (n <= 1) 4811014Sshannon printf("\\(lc"); 4911014Sshannon else 5011014Sshannon brack(m, "\\(lc", "\\(bv", "\\(bv"); 5111014Sshannon break; 5211014Sshannon case '{': 5311014Sshannon printf("\\b'\\(lt"); 5411014Sshannon for(j = 0; j < m; j += 2) printf("\\(bv"); 5511014Sshannon printf("\\(lk"); 5611014Sshannon for(j = 0; j < m; j += 2) printf("\\(bv"); 5711014Sshannon printf("\\(lb'"); 5811014Sshannon break; 5911014Sshannon case '(': 6011014Sshannon brack(m, "\\(lt", "\\(bv", "\\(lb"); 6111014Sshannon break; 6211014Sshannon case '[': 6311014Sshannon brack(m, "\\(lc", "\\(bv", "\\(lf"); 6411014Sshannon break; 6511014Sshannon case '|': 6611014Sshannon brack(m, "|", "|", "|"); 6711014Sshannon break; 6811014Sshannon default: 6911014Sshannon brack(m, (char *) &leftc, (char *) &leftc, (char *) &leftc); 7011014Sshannon break; 7111014Sshannon } 7211014Sshannon printf("\\v'%du'\\*(%d", -v, p1); 7311014Sshannon if( rightc ) { 7411014Sshannon printf("\\|\\v'%du'", v); 7511014Sshannon switch( rightc ) { 7611014Sshannon case 'f': /* floor */ 7711014Sshannon if (n <= 1) 7811014Sshannon printf("\\(rf"); 7911014Sshannon else 8011014Sshannon brack(m, "\\(bv", "\\(bv", "\\(rf"); 8111014Sshannon break; 8211014Sshannon case 'c': /* ceiling */ 8311014Sshannon if (n <= 1) 8411014Sshannon printf("\\(rc"); 8511014Sshannon else 8611014Sshannon brack(m, "\\(rc", "\\(bv", "\\(bv"); 8711014Sshannon break; 8811014Sshannon case '}': 8911014Sshannon printf("\\b'\\(rt"); 9011014Sshannon for(j = 0; j< m; j += 2)printf("\\(bv"); 9111014Sshannon printf("\\(rk"); 9211014Sshannon for(j = 0; j< m; j += 2) printf("\\(bv"); 9311014Sshannon printf("\\(rb'"); 9411014Sshannon break; 9511014Sshannon case ']': 9611014Sshannon brack(m, "\\(rc", "\\(bv", "\\(rf"); 9711014Sshannon break; 9811014Sshannon case ')': 9911014Sshannon brack(m, "\\(rt", "\\(bv", "\\(rb"); 10011014Sshannon break; 10111014Sshannon case '|': 10211014Sshannon brack(m, "|", "|", "|"); 10311014Sshannon break; 10411014Sshannon default: 10511014Sshannon brack(m, (char *) &rightc, (char *) &rightc, (char *) &rightc); 10611014Sshannon break; 10711014Sshannon } 10811014Sshannon printf("\\v'%du'", -v); 10911014Sshannon } 11011014Sshannon printf("\n"); 11111014Sshannon if(dbg)printf(".\tcurly: h=%d b=%d n=%d v=%d l=%c, r=%c\n", 11211014Sshannon eht[yyval], ebase[yyval], n, v, leftc, rightc); 11311014Sshannon } 11411014Sshannon 11511014Sshannon brack(m, t, c, b) int m; char *t, *c, *b; { 11611014Sshannon int j; 11711014Sshannon printf("\\b'%s", t); 11811014Sshannon for( j=0; j<m; j++) 11911014Sshannon printf("%s", c); 12011014Sshannon printf("%s'", b); 12111014Sshannon } 122