Index: /trunk/Ohana/src/kapa/graph/DrawRotString.c
===================================================================
--- /trunk/Ohana/src/kapa/graph/DrawRotString.c	(revision 5481)
+++ /trunk/Ohana/src/kapa/graph/DrawRotString.c	(revision 5482)
@@ -329,5 +329,5 @@
   char *c, *segment, basefont[64];
   int i, N, code;
-  int dX, dY, Xoff, Yoff, X, Y, Nseg, YoffBase;
+  int dX, dY, Xoff, Yoff, X, Y, Nseg, NSEG, YoffBase;
   double cs, sn, fscale;
   int basesize;
@@ -372,7 +372,8 @@
   fprintf (f, " %d %d moveto %f rotate\n", X, Y, -angle);
 
-  ALLOCATE (segment, char, strlen (c)+2);
-  bzero (segment, strlen (c)+2);
   Nseg = 0;
+  NSEG = strlen(c) + 2;
+  ALLOCATE (segment, char, NSEG);
+  bzero (segment, NSEG);
 
   code = FALSE;
@@ -385,4 +386,5 @@
     /* check for special characters */
     if (!code) {
+      /* superscript character (^) */
       if (N == 94) {
 	PSDumpRotSegment (f, segment, &Nseg);
@@ -394,4 +396,5 @@
 	continue;
       }
+      /* subscript character (_) */
       if (N == 95) { 
 	PSDumpRotSegment (f, segment, &Nseg);
@@ -403,4 +406,5 @@
 	continue;
       }
+      /* end super/sub script (|) */
       if (N == 124) {
 	PSDumpRotSegment (f, segment, &Nseg);
@@ -411,8 +415,24 @@
 	continue;
       }
+      /* escape char (\) */
       if (N == 92) {
 	code = TRUE;
 	continue;
       } 
+      /* begin paren (insert \) */
+      if (N == 40) {
+	code = FALSE;
+	segment[Nseg] = 92;
+	Nseg ++;
+	CHECK_REALLOCATE (segment, char, NSEG, Nseg, 64);
+      }
+      /* end paren (insert \) */
+      if (N == 41) {
+	code = FALSE;
+	segment[Nseg] = 92;
+	Nseg ++;
+	CHECK_REALLOCATE (segment, char, NSEG, Nseg, 64);
+      }
+      /* font change character (&) */
       if (N == 38) {
 	PSDumpRotSegment (f, segment, &Nseg);
@@ -440,4 +460,5 @@
     segment[Nseg] = N;
     Nseg ++;
+    CHECK_REALLOCATE (segment, char, NSEG, Nseg, 64);
   }
   PSDumpRotSegment (f, segment, &Nseg);
@@ -447,6 +468,6 @@
 }
 
-
 void PSDumpRotSegment (FILE *f, char *segment, int *Nseg) {
+  segment[*Nseg] = 0;
   fprintf (f, "(%s) show\n", segment);
   bzero (segment, *Nseg);
