date and time created 83/02/11 18:28:36 by shannon
authorBill Shannon <shannon@ucbvax.Berkeley.EDU>
Sat, 12 Feb 1983 10:28:36 +0000 (02:28 -0800)
committerBill Shannon <shannon@ucbvax.Berkeley.EDU>
Sat, 12 Feb 1983 10:28:36 +0000 (02:28 -0800)
SCCS-vsn: old/eqn/common_source/paren.c 4.1

usr/src/old/eqn/common_source/paren.c [new file with mode: 0644]

diff --git a/usr/src/old/eqn/common_source/paren.c b/usr/src/old/eqn/common_source/paren.c
new file mode 100644 (file)
index 0000000..b5eb840
--- /dev/null
@@ -0,0 +1,107 @@
+/*     paren.c 4.1     83/02/11        */
+
+# include "e.h"
+
+paren(leftc, p1, rightc) int p1, leftc, rightc; {
+       int n, m, h1, j, b1, v;
+       h1 = eht[p1]; b1 = ebase[p1];
+       yyval = p1;
+       lfont[yyval] = rfont[yyval] = 0;
+       n = (h1+(6*EFFPS(ps)-1))/(6*EFFPS(ps));
+       if( n<2 ) n = 1;
+       m = n-2;
+       if (leftc=='{' || rightc == '}') {
+               n = n%2 ? n : ++n;
+               if( n<3 ) n=3;
+               m = n-3;
+       }
+       eht[yyval] = VERT(6 * ps * n);
+       ebase[yyval] = b1 + (eht[yyval]-h1)/2;
+       v = b1 - h1/2 + VERT( (ps*6*4)/10 );
+       printf(".ds %d \\|\\v'%du'", yyval, v);
+       switch( leftc ) {
+               case 'n':       /* nothing */
+               case '\0':
+                       break;
+               case 'f':       /* floor */
+                       if (n <= 1)
+                               printf("\\(lf");
+                       else
+                               brack(m, "\\(bv", "\\(bv", "\\(lf");
+                       break;
+               case 'c':       /* ceiling */
+                       if (n <= 1)
+                               printf("\\(lc");
+                       else
+                               brack(m, "\\(lc", "\\(bv", "\\(bv");
+                       break;
+               case '{':
+                       printf("\\b'\\(lt");
+                       for(j = 0; j < m; j += 2) printf("\\(bv");
+                       printf("\\(lk");
+                       for(j = 0; j < m; j += 2) printf("\\(bv");
+                       printf("\\(lb'");
+                       break;
+               case '(':
+                       brack(m, "\\(lt", "\\(bv", "\\(lb");
+                       break;
+               case '[':
+                       brack(m, "\\(lc", "\\(bv", "\\(lf");
+                       break;
+               case '|':
+                       brack(m, "|", "|", "|");
+                       break;
+               default:
+                       brack(m, (char *) &leftc, (char *) &leftc, (char *) &leftc);
+                       break;
+               }
+       printf("\\v'%du'\\*(%d", -v, p1);
+       if( rightc ) {
+               printf("\\|\\v'%du'", v);
+               switch( rightc ) {
+                       case 'f':       /* floor */
+                               if (n <= 1)
+                                       printf("\\(rf");
+                               else
+                                       brack(m, "\\(bv", "\\(bv", "\\(rf");
+                               break;
+                       case 'c':       /* ceiling */
+                               if (n <= 1)
+                                       printf("\\(rc");
+                               else
+                                       brack(m, "\\(rc", "\\(bv", "\\(bv");
+                               break;
+                       case '}':
+                               printf("\\b'\\(rt");
+                               for(j = 0; j< m; j += 2)printf("\\(bv");
+                               printf("\\(rk");
+                               for(j = 0; j< m; j += 2) printf("\\(bv");
+                               printf("\\(rb'");
+                               break;
+                       case ']':
+                               brack(m, "\\(rc", "\\(bv", "\\(rf");
+                               break;
+                       case ')':
+                               brack(m, "\\(rt", "\\(bv", "\\(rb");
+                               break;
+                       case '|':
+                               brack(m, "|", "|", "|");
+                               break;
+                       default:
+                               brack(m, (char *) &rightc, (char *) &rightc, (char *) &rightc);
+                               break;
+               }
+               printf("\\v'%du'", -v);
+       }
+       printf("\n");
+       if(dbg)printf(".\tcurly: h=%d b=%d n=%d v=%d l=%c, r=%c\n", 
+               eht[yyval], ebase[yyval], n, v, leftc, rightc);
+}
+
+brack(m, t, c, b) int m; char *t, *c, *b; {
+       int j;
+       printf("\\b'%s", t);
+       for( j=0; j<m; j++)
+               printf("%s", c);
+       printf("%s'", b);
+}