1*11023Sshannon /* paren.c 4.2 83/02/12 */ 211014Sshannon 311014Sshannon # include "e.h" 411014Sshannon 511014Sshannon paren(leftc, p1, rightc) int p1, leftc, rightc; { 611014Sshannon int n, m, h1, j, b1, v; 711014Sshannon h1 = eht[p1]; b1 = ebase[p1]; 811014Sshannon yyval = p1; 9*11023Sshannon #ifndef NEQN 1011014Sshannon lfont[yyval] = rfont[yyval] = 0; 1111014Sshannon n = (h1+(6*EFFPS(ps)-1))/(6*EFFPS(ps)); 12*11023Sshannon #else NEQN 13*11023Sshannon n = max(b1+VERT(1), h1-b1-VERT(1)) / VERT(1); 14*11023Sshannon #endif NEQN 1511014Sshannon if( n<2 ) n = 1; 1611014Sshannon m = n-2; 1711014Sshannon if (leftc=='{' || rightc == '}') { 1811014Sshannon n = n%2 ? n : ++n; 1911014Sshannon if( n<3 ) n=3; 2011014Sshannon m = n-3; 2111014Sshannon } 22*11023Sshannon #ifndef NEQN 2311014Sshannon eht[yyval] = VERT(6 * ps * n); 2411014Sshannon ebase[yyval] = b1 + (eht[yyval]-h1)/2; 2511014Sshannon v = b1 - h1/2 + VERT( (ps*6*4)/10 ); 26*11023Sshannon #else NEQN 27*11023Sshannon eht[yyval] = VERT(2 * n); 28*11023Sshannon ebase[yyval] = (n)/2 * VERT(2); 29*11023Sshannon if (n%2 == 0) 30*11023Sshannon ebase[yyval] -= VERT(1); 31*11023Sshannon v = b1 - h1/2 + VERT(1); 32*11023Sshannon #endif NEQN 3311014Sshannon printf(".ds %d \\|\\v'%du'", yyval, v); 3411014Sshannon switch( leftc ) { 3511014Sshannon case 'n': /* nothing */ 3611014Sshannon case '\0': 3711014Sshannon break; 3811014Sshannon case 'f': /* floor */ 3911014Sshannon if (n <= 1) 4011014Sshannon printf("\\(lf"); 4111014Sshannon else 4211014Sshannon brack(m, "\\(bv", "\\(bv", "\\(lf"); 4311014Sshannon break; 4411014Sshannon case 'c': /* ceiling */ 4511014Sshannon if (n <= 1) 4611014Sshannon printf("\\(lc"); 4711014Sshannon else 4811014Sshannon brack(m, "\\(lc", "\\(bv", "\\(bv"); 4911014Sshannon break; 5011014Sshannon case '{': 5111014Sshannon printf("\\b'\\(lt"); 5211014Sshannon for(j = 0; j < m; j += 2) printf("\\(bv"); 5311014Sshannon printf("\\(lk"); 5411014Sshannon for(j = 0; j < m; j += 2) printf("\\(bv"); 5511014Sshannon printf("\\(lb'"); 5611014Sshannon break; 5711014Sshannon case '(': 5811014Sshannon brack(m, "\\(lt", "\\(bv", "\\(lb"); 5911014Sshannon break; 6011014Sshannon case '[': 6111014Sshannon brack(m, "\\(lc", "\\(bv", "\\(lf"); 6211014Sshannon break; 6311014Sshannon case '|': 6411014Sshannon brack(m, "|", "|", "|"); 6511014Sshannon break; 6611014Sshannon default: 6711014Sshannon brack(m, (char *) &leftc, (char *) &leftc, (char *) &leftc); 6811014Sshannon break; 6911014Sshannon } 7011014Sshannon printf("\\v'%du'\\*(%d", -v, p1); 7111014Sshannon if( rightc ) { 7211014Sshannon printf("\\|\\v'%du'", v); 7311014Sshannon switch( rightc ) { 7411014Sshannon case 'f': /* floor */ 7511014Sshannon if (n <= 1) 7611014Sshannon printf("\\(rf"); 7711014Sshannon else 7811014Sshannon brack(m, "\\(bv", "\\(bv", "\\(rf"); 7911014Sshannon break; 8011014Sshannon case 'c': /* ceiling */ 8111014Sshannon if (n <= 1) 8211014Sshannon printf("\\(rc"); 8311014Sshannon else 8411014Sshannon brack(m, "\\(rc", "\\(bv", "\\(bv"); 8511014Sshannon break; 8611014Sshannon case '}': 8711014Sshannon printf("\\b'\\(rt"); 8811014Sshannon for(j = 0; j< m; j += 2)printf("\\(bv"); 8911014Sshannon printf("\\(rk"); 9011014Sshannon for(j = 0; j< m; j += 2) printf("\\(bv"); 9111014Sshannon printf("\\(rb'"); 9211014Sshannon break; 9311014Sshannon case ']': 9411014Sshannon brack(m, "\\(rc", "\\(bv", "\\(rf"); 9511014Sshannon break; 9611014Sshannon case ')': 9711014Sshannon brack(m, "\\(rt", "\\(bv", "\\(rb"); 9811014Sshannon break; 9911014Sshannon case '|': 10011014Sshannon brack(m, "|", "|", "|"); 10111014Sshannon break; 10211014Sshannon default: 10311014Sshannon brack(m, (char *) &rightc, (char *) &rightc, (char *) &rightc); 10411014Sshannon break; 10511014Sshannon } 10611014Sshannon printf("\\v'%du'", -v); 10711014Sshannon } 10811014Sshannon printf("\n"); 10911014Sshannon if(dbg)printf(".\tcurly: h=%d b=%d n=%d v=%d l=%c, r=%c\n", 11011014Sshannon eht[yyval], ebase[yyval], n, v, leftc, rightc); 11111014Sshannon } 11211014Sshannon 11311014Sshannon brack(m, t, c, b) int m; char *t, *c, *b; { 11411014Sshannon int j; 11511014Sshannon printf("\\b'%s", t); 11611014Sshannon for( j=0; j<m; j++) 11711014Sshannon printf("%s", c); 11811014Sshannon printf("%s'", b); 11911014Sshannon } 120