[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

sparky problems resolved



    Just in case anyone is interested, I have resolved the problems
of building a usable python version of sparky with debian ppc sid by
patching it to build under gcc 3.2.2. Interestingly the gcc 2.95.4
build segfaults but a gcc 3.2.2 build works fine. Since sparky uses
its own __tkinter.so with threads disabled I am able to build against
tcl8.3 even though sid's python 2.1 is built against tcl8.4. The
attached patch has been sent upstream.
                                      Jack
diff -uNr sparky/c++/assignguess.cc sparky.works/c++/assignguess.cc
--- sparky/c++/assignguess.cc	1999-11-09 11:38:31.000000000 -0500
+++ sparky.works/c++/assignguess.cc	2002-12-23 18:20:01.000000000 -0500
@@ -144,7 +144,7 @@
 	    {
 	      double pos = interval_mod(r->frequency(),
 					alias_onto.min[a], alias_onto.max[a]);
-	      dev += abs(pos - center[a]) / threshold;
+	      dev += myabs(pos - center[a]) / threshold;
 	    }
 	}
       }
diff -uNr sparky/c++/brukerfile.cc sparky.works/c++/brukerfile.cc
--- sparky/c++/brukerfile.cc	2000-05-26 23:10:55.000000000 -0400
+++ sparky.works/c++/brukerfile.cc	2002-12-23 18:20:01.000000000 -0500
@@ -30,7 +30,11 @@
 // SW_h = sweep width in Hz = SFO1 * SW (4587.155342)
 //
 
+#if __GNUC__ >= 3
+#include <fstream>
+#else
 #include <fstream.h>		// Use ifstream
+#endif
 #include <stdio.h>		// Use FILE *
 #include <stdlib.h>		// Use atoi()
 #include <string.h>		// Use strchr()
diff -uNr sparky/c++/contour.cc sparky.works/c++/contour.cc
--- sparky/c++/contour.cc	1999-12-14 12:36:12.000000000 -0500
+++ sparky.works/c++/contour.cc	2002-12-23 18:20:01.000000000 -0500
@@ -127,12 +127,12 @@
 	// Should really use floor() and ceil() here but it creates
 	// off by one rounding problems.
 
-	index_region.min[a] = round(sp->map(r.max[a], a, PPM, INDEX));
-	index_region.max[a] = round(sp->map(r.min[a], a, PPM, INDEX));
+	index_region.min[a] = myround(sp->map(r.max[a], a, PPM, INDEX));
+	index_region.max[a] = myround(sp->map(r.min[a], a, PPM, INDEX));
       }
     else
       {
-	int center = round(sp->map(r.center(a), a, PPM, INDEX));
+	int center = myround(sp->map(r.center(a), a, PPM, INDEX));
 	index_region.min[a] = center;
 	index_region.max[a] = center;
       }
diff -uNr sparky/c++/format.cc sparky.works/c++/format.cc
--- sparky/c++/format.cc	2001-11-13 16:46:31.000000000 -0500
+++ sparky.works/c++/format.cc	2002-12-23 18:20:01.000000000 -0500
@@ -1,6 +1,10 @@
 // ----------------------------------------------------------------------------
 //
+#if __GNUC__ >= 3
+#include <iostream>
+#else
 #include <iostream.h>		// Use ostream, istream
+#endif
 #include <stdio.h>		// Use sprintf(), fputc(), ...
 #include <string.h>		// Use strchr(), strcmp()
 #include <ctype.h>		// Use isspace(), isalpha()
@@ -3530,7 +3534,7 @@
 		    fprintf(fp, "extraPeakPlanes");
 		    for (i = 0; i < sp->dimension(); i++) {
 		      double d = sp->scale(v->visible_depth(i), i, PPM, INDEX);
-		      fprintf(fp, " %d", max(0, round(d-1)));
+		      fprintf(fp, " %d", max(0, myround(d-1)));
 		    }
 		    fputc('\n', fp);
 		}
diff -uNr sparky/c++/format.h sparky.works/c++/format.h
--- sparky/c++/format.h	1999-11-24 15:43:07.000000000 -0500
+++ sparky.works/c++/format.h	2002-12-23 18:20:01.000000000 -0500
@@ -4,8 +4,13 @@
 #ifndef FORMAT_HEADER_INCLUDED
 #define FORMAT_HEADER_INCLUDED
 
+#if __GNUC__ >= 3
+#include <iosfwd>
+using namespace std;
+#else
 class istream;
 class ostream;
+#endif
 
 class Condition;
 class Object_Table;
diff -uNr sparky/c++/integrate.cc sparky.works/c++/integrate.cc
--- sparky/c++/integrate.cc	1999-12-10 16:59:54.000000000 -0500
+++ sparky.works/c++/integrate.cc	2002-12-23 18:20:01.000000000 -0500
@@ -309,7 +309,7 @@
 	for (int row = 0; row < h; row++) {
 		for (int col = 0; col < w; col++) {
 			double weighted_height = (*dp++) * (*wp++);
-			double abs_height = abs(weighted_height);
+			double abs_height = myabs(weighted_height);
 			integral += weighted_height;
 			abs_integral += abs_height;
 			comx += col * abs_height;
@@ -542,7 +542,7 @@
 		Peak *pk2 = (Peak *) overlapped[pi2];
 		bool close = true;
 		for (int a = 0 ; a < sp->dimension() ; ++a)
-		  if (abs(pk1->position()[a] - pk2->position()[a])
+		  if (myabs(pk1->position()[a] - pk2->position()[a])
 		      > sp->mIntegrate.grouping_dist[a])
 		    close = false;
 		if (close)
diff -uNr sparky/c++/label.cc sparky.works/c++/label.cc
--- sparky/c++/label.cc	2001-12-06 19:28:36.000000000 -0500
+++ sparky.works/c++/label.cc	2002-12-23 18:20:01.000000000 -0500
@@ -15,6 +15,7 @@
 #include "mathconst.h"		// use MC_PI
 #include "memalloc.h"		// use new()
 #include "notifier.h"	// use Notifier
+#include <math.h>
 #include "num.h"
 #include "peakgp.h"
 #include "peak.h"
@@ -602,12 +603,12 @@
 		pointerLab1Y = labelCenterY + deltaY - labelYDelta * factor;
 		pointerLab2Y = labelCenterY - deltaY - labelYDelta * factor;
 	}
-	else if (is_between(abs(aOL), 135, 180)
-		 && is_between(abs(aOR), 135, 180)) {
+	else if (is_between(myabs(aOL), 135, 180)
+		 && is_between(myabs(aOR), 135, 180)) {
 		/*
 		 * case C, label left of peak
 		 */
-		factor = (aOR / abs(aOR)) * (180 - abs(aOR)) / 45;
+		factor = (aOR / myabs(aOR)) * (180 - myabs(aOR)) / 45;
 		factor = labelCenterY > peakCenterY
 			? max(factor, 0.0) : min(factor, 0.0);
 
diff -uNr sparky/c++/line.cc sparky.works/c++/line.cc
--- sparky/c++/line.cc	1999-12-01 13:08:59.000000000 -0500
+++ sparky.works/c++/line.cc	2002-12-23 18:20:01.000000000 -0500
@@ -29,7 +29,7 @@
 
   SPoint delta = r1 - r2;
   for (int a = 1 ; a < sp->dimension() ; ++a)
-    if (abs(delta[a]) > abs(delta[long_axis]))
+    if (myabs(delta[a]) > myabs(delta[long_axis]))
       long_axis = a;
 
   SPoint center = (r1 + r2) * .5;
diff -uNr sparky/c++/linefit.cc sparky.works/c++/linefit.cc
--- sparky/c++/linefit.cc	2001-12-06 19:30:08.000000000 -0500
+++ sparky.works/c++/linefit.cc	2002-12-23 18:20:01.000000000 -0500
@@ -248,7 +248,7 @@
 
 	double	vol = fit_volume();
 	double fe = (vol != 0 ?
-		     npoints * sqrt(residual / npoints) / abs(vol) :
+		     npoints * sqrt(residual / npoints) / myabs(vol) :
 		     0);
 
 	SPoint	pos = sp->map(position(), INDEX, PPM);
diff -uNr sparky/c++/lusolve.cc sparky.works/c++/lusolve.cc
--- sparky/c++/lusolve.cc	2000-02-08 11:43:03.000000000 -0500
+++ sparky.works/c++/lusolve.cc	2002-12-23 18:20:01.000000000 -0500
@@ -19,7 +19,7 @@
 	for (i=1;i<=n;i++) {
 		big=0.0;
 		for (j=1;j<=n;j++)
-			if ((temp=abs(a[i][j])) > big) big=temp;
+			if ((temp=myabs(a[i][j])) > big) big=temp;
 		if (big == 0.0)
 			return false;
 		vv[i]=1.0/big;
@@ -36,7 +36,7 @@
 			for (k=1;k<j;k++)
 				sum -= a[i][k]*a[k][j];
 			a[i][j]=sum;
-			if ( (dum=vv[i]*abs(sum)) >= big) {
+			if ( (dum=vv[i]*myabs(sum)) >= big) {
 				big=dum;
 				imax=i;
 			}
diff -uNr sparky/c++/memalloc.cc sparky.works/c++/memalloc.cc
--- sparky/c++/memalloc.cc	2000-08-09 14:11:53.000000000 -0400
+++ sparky.works/c++/memalloc.cc	2002-12-23 18:20:01.000000000 -0500
@@ -2,7 +2,11 @@
 // Replace new and delete with versions that keep track of all allocated
 // blocks for debugging memory leaks.
 //
+#if __GNUC__ >= 3
+#include <iostream>
+#else
 #include <iostream.h>	// use cerr
+#endif
 #include <stdlib.h>	// use malloc(), free()
 #include <string.h>	// use strcmp()
 
@@ -11,8 +15,10 @@
 #include "table.h"	// use Table
 #include "utility.h"	// use fatal_error()
 
+#if __GNUC__ < 3
 #undef new
 #undef delete
+#endif
 
 // ----------------------------------------------------------------------------
 //
@@ -40,6 +46,9 @@
 // ----------------------------------------------------------------------------
 //
 void *operator new(size_t size)
+#if __GNUC__ >= 3
+   throw(std::bad_alloc)
+#endif
 {
   void *value = allocate(size);
   if (tracking_memory)
@@ -73,6 +82,9 @@
 // ----------------------------------------------------------------------------
 //
 void *operator new[](size_t size)
+#if __GNUC__ >= 3
+   throw(std::bad_alloc)
+#endif
 {
   void *value = allocate(size);
   if (tracking_memory)
@@ -92,6 +104,9 @@
 // ----------------------------------------------------------------------------
 //
 void operator delete(void *p)
+#if __GNUC__ >= 3
+   throw()
+#endif
 {
   if (tracking_memory)
     forget(p);
@@ -101,6 +116,9 @@
 // ----------------------------------------------------------------------------
 //
 void operator delete[](void *p)
+#if __GNUC__ >= 3
+   throw()
+#endif
 {
   if (tracking_memory)
     forget(p);
diff -uNr sparky/c++/memalloc.h sparky.works/c++/memalloc.h
--- sparky/c++/memalloc.h	2000-02-07 21:34:12.000000000 -0500
+++ sparky.works/c++/memalloc.h	2002-12-23 18:20:01.000000000 -0500
@@ -19,11 +19,16 @@
 
 #include <stddef.h>	// use size_t
 
+#if __GNUC__ >= 3
+#include <new>
+using namespace std;
+#else 
 void *operator new(size_t size);
 void operator delete(void *p);
 
 void *operator new[](size_t size);
 void operator delete[](void *p);
+#endif
 
 // ----------------------------------------------------------------------------
 // The lines below are for tracking all memory allocated with new.
diff -uNr sparky/c++/nmrdata.cc sparky.works/c++/nmrdata.cc
--- sparky/c++/nmrdata.cc	2001-11-15 17:04:04.000000000 -0500
+++ sparky.works/c++/nmrdata.cc	2002-12-23 18:20:01.000000000 -0500
@@ -2,7 +2,11 @@
 // NMR data file reading and writing.
 //
 
+#if __GNUC__ >= 3
+#include <iostream>
+#else
 #include <iostream.h>		// use ostream
+#endif
 #include <math.h>		// use fabs()
 
 #include "blockfile.h"		// Use Block_File, block_region()
diff -uNr sparky/c++/nmrdata.h sparky.works/c++/nmrdata.h
--- sparky/c++/nmrdata.h	2001-11-15 16:57:33.000000000 -0500
+++ sparky.works/c++/nmrdata.h	2002-12-23 18:20:01.000000000 -0500
@@ -9,7 +9,12 @@
 #include "spoint.h"		// Use SPoint, IPoint, IRegion
 #include "stringc.h"		// Use Stringy
 
+#if __GNUC__ >= 3
+#include <iosfwd>
+using namespace std;
+#else
 class ostream;
+#endif
 
 class Block_File;
 
diff -uNr sparky/c++/num.cc sparky.works/c++/num.cc
--- sparky/c++/num.cc	1999-01-29 05:07:03.000000000 -0500
+++ sparky.works/c++/num.cc	2002-12-23 18:20:01.000000000 -0500
@@ -27,9 +27,11 @@
 
 // ----------------------------------------------------------------------------
 //
-long abs(long a)
+int myabs(int a)
   { return a >= 0 ? a : -a; }
-double abs(double a)
+long myabs(long a)
+  { return a >= 0 ? a : -a; }
+double myabs(double a)
   { return a >= 0 ? a : -a; }
 
 // ----------------------------------------------------------------------------
@@ -50,7 +52,7 @@
 
 // ----------------------------------------------------------------------------
 //
-int round(double x)
+int myround(double x)
   { return (int) (x >= 0 ? x + .5 : x - .5); }
 
 // ----------------------------------------------------------------------------
@@ -58,7 +60,7 @@
 //
 double round_multiple(double x, double unit)
 {
-  return round(x / unit) * unit;
+  return myround(x / unit) * unit;
 }
 
 // ----------------------------------------------------------------------------
diff -uNr sparky/c++/num.h sparky.works/c++/num.h
--- sparky/c++/num.h	1999-01-29 05:07:13.000000000 -0500
+++ sparky.works/c++/num.h	2002-12-23 18:20:01.000000000 -0500
@@ -18,13 +18,14 @@
 unsigned int max(unsigned int a, unsigned int b);
 double max(double a, double b);
 
-long abs(long a);
-double abs(double a);
+int myabs(int a);
+long myabs(long a);
+double myabs(double a);
 
 double floor(double x, double step);
 double floor(double x, double a, double b);
 double ceil(double x, double step);
-int round(double x);
+int myround(double x);
 double round_multiple(double x, double unit);
 double interval_mod(double x, double a, double b);
 
diff -uNr sparky/c++/peak.cc sparky.works/c++/peak.cc
--- sparky/c++/peak.cc	2001-12-06 19:31:04.000000000 -0500
+++ sparky.works/c++/peak.cc	2002-12-23 18:20:01.000000000 -0500
@@ -109,7 +109,7 @@
 
 double Peak::SignalToNoise() const
 {
-	return abs(DataHeight()) / spectrum()->noise_level();
+	return myabs(DataHeight()) / spectrum()->noise_level();
 }
 
 //
diff -uNr sparky/c++/peakgp.cc sparky.works/c++/peakgp.cc
--- sparky/c++/peakgp.cc	1999-12-01 13:08:58.000000000 -0500
+++ sparky.works/c++/peakgp.cc	2002-12-23 18:20:01.000000000 -0500
@@ -196,7 +196,7 @@
 	  double vol;
 	  if (pk->volume(&vol))
 	    {
-	      vol = abs(vol);
+	      vol = myabs(vol);
 	      volume_sum += vol;
 	      freq += pk->frequency() * vol;
 	    }
diff -uNr sparky/c++/peakpick.cc sparky.works/c++/peakpick.cc
--- sparky/c++/peakpick.cc	1999-11-24 16:08:36.000000000 -0500
+++ sparky.works/c++/peakpick.cc	2002-12-23 18:20:01.000000000 -0500
@@ -306,11 +306,11 @@
 //
 static int separation(const IPoint &p1, const IPoint &p2)
 {
-  int max = abs(p1[0] - p2[0]);
+  int max = myabs(p1[0] - p2[0]);
   
   for (int i = 1; i < p1.dimension(); i++)
     {
-      int sep = abs(p1[i] - p2[i]);
+      int sep = myabs(p1[i] - p2[i]);
       if (sep > max)
 	max = sep;
     }
diff -uNr sparky/c++/print.cc sparky.works/c++/print.cc
--- sparky/c++/print.cc	2001-10-02 14:12:06.000000000 -0400
+++ sparky.works/c++/print.cc	2002-12-23 18:20:01.000000000 -0500
@@ -239,11 +239,11 @@
       height = inch_to_cm(height);
 
       double x_page_size = vp->scale(po.fixed_scales[0], X, PPM, u) * width;
-      double x_size = abs(layout.start[0]-layout.end[0]);
+      double x_size = myabs(layout.start[0]-layout.end[0]);
       layout.pages[0] = (x_page_size > 0 ? (int) ceil(x_size/x_page_size) : 1);
 
       double y_page_size = vp->scale(po.fixed_scales[1], Y, PPM, u) * height;
-      double y_size = abs(layout.start[1]-layout.end[1]);
+      double y_size = myabs(layout.start[1]-layout.end[1]);
       layout.pages[1] = (y_page_size > 0 ? (int) ceil(y_size/y_page_size) : 1);
     }
   else
@@ -282,7 +282,7 @@
 {
 	int ticks = 5;			/* the default value */
 
-	incr = abs(incr);
+	incr = myabs(incr);
 
 	if (incr == 0)
 	  return ticks;
@@ -514,8 +514,8 @@
   if (opt.fixed_scale) {
     double scx = vp->scale(max(opt.fixed_scales[0], .001), X, PPM, u);
     double scy = vp->scale(max(opt.fixed_scales[1], .001), Y, PPM, u);
-    width = cm_to_inch(abs(bl_x - tr_x) / scx);
-    height = cm_to_inch(abs(bl_y - tr_y) / scy);
+    width = cm_to_inch(myabs(bl_x - tr_x) / scx);
+    height = cm_to_inch(myabs(bl_y - tr_y) / scy);
   }
 
   //
@@ -788,7 +788,7 @@
   /*
    * Initialize the font
    */
-  int font_size = round(72 * font_height * scale / dpi); // Point size
+  int font_size = myround(72 * font_height * scale / dpi); // Point size
   fprintf(fp, "/XfR /%s bindFont XfR\n", RESFONTNAME);
   fprintf(fp, "/resScale %d SC def\n", font_size);
 //  fprintf(fp, "/resScale %d SC def\n", RESFONTSIZE);
@@ -901,7 +901,7 @@
 	fprintf(to, "/SparkyMajorVersion %d def\n",  SPARKY_VERSION);
 	fprintf(to, "/SparkyMinorVersion %d def\n",  SPARKY_RELEASE);
 	fprintf(to, "/SCALE %f def\n", (double) UPI / DPI);
-	fprintf(to, "/PEAKLINEWIDTH %d def\n", round(0.015 * DPI));
+	fprintf(to, "/PEAKLINEWIDTH %d def\n", myround(0.015 * DPI));
 
 	/*
 	 * Set up the color array which maps pixels to colors.
@@ -1229,14 +1229,14 @@
    * Print the moveto point. The "M" PostScript operator
    * does a "moveto".
    */
-  int px1 = round((x[0] - index_xoffset) * index_xscale);
-  int py1 = round((y[0] - index_yoffset) * index_yscale);
+  int px1 = myround((x[0] - index_xoffset) * index_xscale);
+  int py1 = myround((y[0] - index_yoffset) * index_yscale);
   fprintf(fp, "%d %d M\n", px1, py1);
 
   for (int s = 1 ; s < len ; ++s)
     {
-      int px = round((x[2*s] - index_xoffset) * index_xscale);
-      int py = round((y[2*s] - index_yoffset) * index_yscale);
+      int px = myround((x[2*s] - index_xoffset) * index_xscale);
+      int py = myround((y[2*s] - index_yoffset) * index_yscale);
       fprintf(fp, "%d %d L\n", px, py);
     }
 
@@ -1297,7 +1297,7 @@
 static int decimals_after_point(double step)
 {
   int prec = 0;
-  for (step = abs(step) ; step < .999 && prec <= 8 ; step *= 10)
+  for (step = myabs(step) ; step < .999 && prec <= 8 ; step *= 10)
     prec += 1;
 
   return prec;
diff -uNr sparky/c++/python.cc sparky.works/c++/python.cc
--- sparky/c++/python.cc	2001-11-15 17:04:29.000000000 -0500
+++ sparky.works/c++/python.cc	2002-12-23 18:20:01.000000000 -0500
@@ -26,7 +26,12 @@
 // 
 
 #include <stdio.h>		// use FILE
+
+#if __GNUC__ >= 3
+#include <fstream>
+#else
 #include <fstream.h>		// use ofstream, ifstream
+#endif
 
 #include <Python.h>		// Use PyObject
 #include <tcl.h>		// Use Tcl_Interp
diff -uNr sparky/c++/rectangle.cc sparky.works/c++/rectangle.cc
--- sparky/c++/rectangle.cc	1999-01-29 05:07:03.000000000 -0500
+++ sparky.works/c++/rectangle.cc	2002-12-23 18:20:01.000000000 -0500
@@ -2,7 +2,11 @@
 // Rectangles in the plane.
 //
 
+#if __GNUC__ >= 3
+#include <iostream>
+#else
 #include <iostream.h>
+#endif
 #include <math.h>		// Use fabs()
 
 #include "list.h"		// use List
diff -uNr sparky/c++/rectangle.h sparky.works/c++/rectangle.h
--- sparky/c++/rectangle.h	1999-01-29 05:07:15.000000000 -0500
+++ sparky.works/c++/rectangle.h	2002-12-23 18:20:01.000000000 -0500
@@ -6,7 +6,12 @@
 #define RECTANGLE_HEADER_INCLUDED
 
 class List;
+#if __GNUC__ >= 3
+#include <iosfwd>
+using namespace std;
+#else
 class ostream;
+#endif
 
 enum Axis {X, Y, NOT_XY};
 
diff -uNr sparky/c++/resonance.cc sparky.works/c++/resonance.cc
--- sparky/c++/resonance.cc	2000-06-12 18:47:05.000000000 -0400
+++ sparky.works/c++/resonance.cc	2002-12-23 18:20:01.000000000 -0500
@@ -379,7 +379,7 @@
   double pos1 = interval_mod(r1->frequency(), alias_min, alias_max);
   double pos2 = interval_mod(r2->frequency(), alias_min, alias_max);
 
-  return compare_doubles(abs(pos1 - center), abs(pos2 - center));
+  return compare_doubles(myabs(pos1 - center), myabs(pos2 - center));
 }
 
 // ----------------------------------------------------------------------------
diff -uNr sparky/c++/savefile.cc sparky.works/c++/savefile.cc
--- sparky/c++/savefile.cc	2000-03-03 13:27:33.000000000 -0500
+++ sparky.works/c++/savefile.cc	2002-12-23 18:20:01.000000000 -0500
@@ -7,7 +7,11 @@
  * Resonance files.
  *
  */
+#if __GNUC__ >= 3
+#include <fstream>
+#else
 #include <fstream.h>		// Use ofstream
+#endif
 #include <string.h>		// use strstr()
 
 #include "memalloc.h"		// use new()
diff -uNr sparky/c++/savefile.h sparky.works/c++/savefile.h
--- sparky/c++/savefile.h	1999-11-24 17:54:17.000000000 -0500
+++ sparky.works/c++/savefile.h	2002-12-23 18:20:01.000000000 -0500
@@ -9,7 +9,13 @@
 #include "list.h"		// Use List
 #include "stringc.h"		// Use Stringy
 
+#if __GNUC__ >= 3
+#include <iosfwd>
+using namespace std;
+#else
 class ostream;
+#endif
+
 class Session;
 
 enum SAVEFILE_TYPE {
diff -uNr sparky/c++/session.cc sparky.works/c++/session.cc
--- sparky/c++/session.cc	2002-01-17 22:16:11.000000000 -0500
+++ sparky.works/c++/session.cc	2002-12-23 18:20:01.000000000 -0500
@@ -1,7 +1,11 @@
 // ----------------------------------------------------------------------------
 //
 #include <stdlib.h>		// Use exit()
+#if __GNUC__ >= 3
+#include <fstream>
+#else
 #include <fstream.h>		// use ifstream
+#endif
 
 #include "command.h"		// Use Command_Dispatcher
 #include "contour.h"		// close_contour_cache()
diff -uNr sparky/c++/simplex.cc sparky.works/c++/simplex.cc
--- sparky/c++/simplex.cc	1999-11-24 17:19:08.000000000 -0500
+++ sparky.works/c++/simplex.cc	2002-12-23 18:20:01.000000000 -0500
@@ -115,8 +115,8 @@
 	  int lo, hi, nexthi;
 	  get_high_low(y, mpts, &lo, &hi, &nexthi);
 
-	  double denom = abs(y[hi]) + abs(y[lo]);
-	  double rtol = (denom == 0 ? 0 : 2.0 * abs(y[hi] - y[lo]) / denom);
+	  double denom = myabs(y[hi]) + myabs(y[lo]);
+	  double rtol = (denom == 0 ? 0 : 2.0 * myabs(y[hi] - y[lo]) / denom);
 	  if (rtol < ftol)
 	    {
 	      *best = lo;
diff -uNr sparky/c++/spectrumdata.cc sparky.works/c++/spectrumdata.cc
--- sparky/c++/spectrumdata.cc	2000-12-12 17:26:49.000000000 -0500
+++ sparky.works/c++/spectrumdata.cc	2002-12-23 18:20:01.000000000 -0500
@@ -699,7 +699,7 @@
   float *values = new float[sample_count];
   IRegion r = sp->index_range();
   for (int k = 0 ; k < sample_count ; ++k)
-    values[k] = abs(sp->height_at_index(r.random_point()));
+    values[k] = myabs(sp->height_at_index(r.random_point()));
   sort_floats(values, sample_count);
   double median = values[sample_count/2];
   delete values;
diff -uNr sparky/c++/spoint.cc sparky.works/c++/spoint.cc
--- sparky/c++/spoint.cc	2000-01-18 18:27:59.000000000 -0500
+++ sparky.works/c++/spoint.cc	2002-12-23 18:20:01.000000000 -0500
@@ -58,7 +58,7 @@
 {
   int e[DIM];
   for (int d = 0 ; d < dimension() ; ++d)
-    e[d] = round((*this)[d]);
+    e[d] = myround((*this)[d]);
   return IPoint(dimension(), e);
 }
 
diff -uNr sparky/c++/stringc.cc sparky.works/c++/stringc.cc
--- sparky/c++/stringc.cc	2000-03-03 13:27:32.000000000 -0500
+++ sparky.works/c++/stringc.cc	2002-12-23 18:20:01.000000000 -0500
@@ -1,6 +1,10 @@
 // ----------------------------------------------------------------------------
 //
+#if __GNUC__ >= 3
+#include <iostream>
+#else
 #include <iostream.h>	// Use ostream, istream
+#endif
 #include <stdarg.h>	// use va_start()
 #include <stdlib.h>	// use atoi()
 #include <stdio.h>	// Use sprintf()
diff -uNr sparky/c++/stringc.h sparky.works/c++/stringc.h
--- sparky/c++/stringc.h	1999-11-24 16:53:21.000000000 -0500
+++ sparky.works/c++/stringc.h	2002-12-23 18:20:01.000000000 -0500
@@ -8,8 +8,14 @@
 #undef NULL		// Fix bad define in stddef.h gnu distribution.
 #define NULL 0L
 
+#if __GNUC__ >= 3
+#include <iosfwd>
+using namespace std;
+#else
 class istream;
 class ostream;
+#endif
+
 class List;
 
 class Stringy
diff -uNr sparky/c++/ucsffile.cc sparky.works/c++/ucsffile.cc
--- sparky/c++/ucsffile.cc	2000-12-12 14:26:24.000000000 -0500
+++ sparky.works/c++/ucsffile.cc	2002-12-23 18:20:01.000000000 -0500
@@ -13,6 +13,7 @@
 #include "blockfile.h"		// Use Block_File
 #include "memalloc.h"		// use new()
 #include "nmrdata.h"		// Use NMR_Data
+#include <math.h>
 #include "num.h"		// Use round(), min(), max()
 #include "spoint.h"		// Use IPoint, IRegion
 #include "system.h"		// Use file_owner(), get_username()
@@ -693,22 +694,22 @@
 		hdr->date[24] = '\0';
 		hdr->axis = new NMR_AXIS [2];
 		memset(hdr->axis, 0, 2 * sizeof(NMR_AXIS));
-		hdr->axis[T1].bsize = hdr->axis[T2].bsize = round(p.t1t2) - 1;
+		hdr->axis[T1].bsize = hdr->axis[T2].bsize = myround(p.t1t2) - 1;
 		if (p.t1t2 == 2.0) {
-			hdr->axis[T1].npoints = round(p.nypoints);
-			hdr->axis[T2].npoints = round(p.nxpoints);
+			hdr->axis[T1].npoints = myround(p.nypoints);
+			hdr->axis[T2].npoints = myround(p.nxpoints);
 		}
 		else {
-			hdr->axis[T1].npoints = round(p.nxpoints);
-			hdr->axis[T2].npoints = round(p.nypoints);
+			hdr->axis[T1].npoints = myround(p.nxpoints);
+			hdr->axis[T2].npoints = myround(p.nypoints);
 		}
 
 		/*
 		 * fill in original axis sizes. May not be originally defined.
 		 */
-		if ((hdr->axis[T1].size = round(p.w1.size)) == 0.0)
+		if ((hdr->axis[T1].size = myround(p.w1.size)) == 0.0)
 			hdr->axis[T1].size = hdr->axis[T1].npoints;
-		if ((hdr->axis[T2].size = round(p.w2.size)) == 0.0)
+		if ((hdr->axis[T2].size = myround(p.w2.size)) == 0.0)
 			hdr->axis[T2].size = hdr->axis[T2].npoints;
 
 
@@ -726,15 +727,15 @@
 			b->apo.p1.shift = a->shift;
 			b->apo.p1.line_broad = a->lb;
 			b->apo.p2.gaussian = a->gn;
-			b->flags.nfills = round(a->n_zero_fills);
+			b->flags.nfills = myround(a->n_zero_fills);
 			b->zero_order = a->zero_order;
 			b->first_order = a->first_order;
-			b->flags.dc_offset = round(a->offset_correct);
-			b->flags.ft_code = round(a->ft_code);
-			b->flags.spectrum_reverse = round(a->spectrum_reverse);
-			b->flags.absolute_value = round(a->abs_val_code);
-			b->flags.baseline_fit = round(a->baseline_correct);
-			b->flags.baseline_offset = round(a->ridge_subtract);
+			b->flags.dc_offset = myround(a->offset_correct);
+			b->flags.ft_code = myround(a->ft_code);
+			b->flags.spectrum_reverse = myround(a->spectrum_reverse);
+			b->flags.absolute_value = myround(a->abs_val_code);
+			b->flags.baseline_fit = myround(a->baseline_correct);
+			b->flags.baseline_offset = myround(a->ridge_subtract);
 			b->status.transformed = (unsigned) p.processed[i];
 			b->spectral_shift = (short) (p.xp.right_shift[i] -
 						     p.xp.left_shift[i]);
diff -uNr sparky/c++/uicontour.cc sparky.works/c++/uicontour.cc
--- sparky/c++/uicontour.cc	2001-10-09 14:59:15.000000000 -0400
+++ sparky.works/c++/uicontour.cc	2002-12-23 18:20:01.000000000 -0500
@@ -4,6 +4,7 @@
 #include "color.h"		// use Color
 #include "memalloc.h"		// use new()
 #include "notifier.h"		// use Notifier
+#include <math.h>
 #include "num.h"		// Use round()
 #include "session.h"		// use Session
 #include "stringc.h"		// Use Stringy
@@ -179,13 +180,13 @@
 {
   Contour_Parameters pos(true);
   pos.levels.lowest = ws.numeric_text_field(ws.table_element(table,1,1));
-  pos.levels.levels = round(ws.numeric_text_field(ws.table_element(table,1,2)));
+  pos.levels.levels = myround(ws.numeric_text_field(ws.table_element(table,1,2)));
   pos.levels.factor = ws.numeric_text_field(ws.table_element(table,1,3));
   pos.set_color_scheme(ws.option_selected(ws.table_element(table,1,4)));
 
   Contour_Parameters neg(false);
   neg.levels.lowest = ws.numeric_text_field(ws.table_element(table,2,1));
-  neg.levels.levels = round(ws.numeric_text_field(ws.table_element(table,2,2)));
+  neg.levels.levels = myround(ws.numeric_text_field(ws.table_element(table,2,2)));
   neg.levels.factor = ws.numeric_text_field(ws.table_element(table,2,3));
   neg.set_color_scheme(ws.option_selected(ws.table_element(table,2,4)));
 
diff -uNr sparky/c++/uidrawing.cc sparky.works/c++/uidrawing.cc
--- sparky/c++/uidrawing.cc	2001-12-11 19:20:33.000000000 -0500
+++ sparky.works/c++/uidrawing.cc	2002-12-23 18:20:01.000000000 -0500
@@ -393,7 +393,7 @@
 //
 void Drawing::update_font_height()
 {
-  int pixel_height = bounded(1, round(font_height / pixel_size(Y)), 100);
+  int pixel_height = bounded(1, myround(font_height / pixel_size(Y)), 100);
   c->set_font_height(pixel_height);
 }
 
@@ -459,8 +459,8 @@
 //
 void Drawing::paint_coordinates(double x, double y, int *px, int *py)
 {
-  *px = round(.5 * vw - (x - x_center) / x_pixel_size);
-  *py = round(.5 * vh + (y - y_center) / y_pixel_size);
+  *px = myround(.5 * vw - (x - x_center) / x_pixel_size);
+  *py = myround(.5 * vh + (y - y_center) / y_pixel_size);
 }
 
 // ----------------------------------------------------------------------------
@@ -476,16 +476,16 @@
 int Drawing::paint_coordinate(double d, Axis a)
 {
   return (a == X ?
-	  round(.5 * vw - (d - x_center) / x_pixel_size) :
-	  round(.5 * vh + (d - y_center) / y_pixel_size));
+	  myround(.5 * vw - (d - x_center) / x_pixel_size) :
+	  myround(.5 * vh + (d - y_center) / y_pixel_size));
 }
 
 // ----------------------------------------------------------------------------
 //
 void Drawing::translate_view(double delta_x, double delta_y)
 {
-  int dx = round(delta_x / pixel_size(X));
-  int dy = round(delta_y / pixel_size(Y));
+  int dx = myround(delta_x / pixel_size(X));
+  int dy = myround(delta_y / pixel_size(Y));
 
 // This is used before changing the mapping between X window coordinates
 // and the image coordinates in translate_view().  If pretranslation exposure
diff -uNr sparky/c++/uiepanel.cc sparky.works/c++/uiepanel.cc
--- sparky/c++/uiepanel.cc	2000-02-09 21:00:09.000000000 -0500
+++ sparky.works/c++/uiepanel.cc	2002-12-23 18:20:01.000000000 -0500
@@ -141,7 +141,7 @@
 //
 void edge_panel::translate(double delta)
 {
-  int d = round(delta / pixel_size());
+  int d = myround(delta / pixel_size());
 
   if (d != 0)
     {
@@ -312,11 +312,11 @@
     {
       double h = thickness();
       *px = paint_position(x);
-      *py = round((h - y) / pixel_size());
+      *py = myround((h - y) / pixel_size());
     }
   else
     {
-      *px = round(x / pixel_size());
+      *px = myround(x / pixel_size());
       *py = paint_position(y);
     }
 }
@@ -325,7 +325,7 @@
 //
 int edge_panel::paint_position(double x)
 {
-  return round((is_horizontal() ? b - x : x - a) / pixel_size());
+  return myround((is_horizontal() ? b - x : x - a) / pixel_size());
 }
 
 // ----------------------------------------------------------------------------
diff -uNr sparky/c++/uipreference.cc sparky.works/c++/uipreference.cc
--- sparky/c++/uipreference.cc	2000-05-30 14:55:26.000000000 -0400
+++ sparky.works/c++/uipreference.cc	2002-12-23 18:20:01.000000000 -0500
@@ -1,6 +1,7 @@
 // ----------------------------------------------------------------------------
 //
 #include "memalloc.h"		// use new()
+#include <math.h>
 #include "num.h"		// Use round()
 #include "project.h"		// use Project
 #include "session.h"		// use Session
@@ -127,11 +128,11 @@
     ((View *) vlist[vi])->set_contour_graying(pref.contour_graying);
 
   double seconds = ws.numeric_edit_value(keytimeout);
-  pref.key_timeout_interval = round(seconds * 1000);
+  pref.key_timeout_interval = myround(seconds * 1000);
 
   double minutes = ws.numeric_edit_value(autobackup);
-  proj.set_auto_backup(round(minutes * 60));
+  proj.set_auto_backup(myround(minutes * 60));
 
   double mbytes = ws.numeric_edit_value(cachesize);
-  proj.set_cache_size(round(mbytes));
+  proj.set_cache_size(myround(mbytes));
 }
diff -uNr sparky/c++/uirpanel.cc sparky.works/c++/uirpanel.cc
--- sparky/c++/uirpanel.cc	2000-12-12 14:24:54.000000000 -0500
+++ sparky.works/c++/uirpanel.cc	2002-12-23 18:20:01.000000000 -0500
@@ -377,7 +377,7 @@
   for (int psi = 0 ; psi < panel_strings.size() ; ++psi)
     {
       Panel_String *ps = (Panel_String *) panel_strings[psi];
-      double sep = abs(ps->tick_position - freq_ppm);
+      double sep = myabs(ps->tick_position - freq_ppm);
       if (closest == NULL || sep < min_sep)
 	{
 	  min_sep = sep;
diff -uNr sparky/c++/uiscale.cc sparky.works/c++/uiscale.cc
--- sparky/c++/uiscale.cc	1999-12-02 19:29:39.000000000 -0500
+++ sparky.works/c++/uiscale.cc	2002-12-23 18:20:01.000000000 -0500
@@ -138,7 +138,7 @@
   double x1 = scale_value(a);
   double x2 = scale_value(b);
   double minimum_spacing =
-    4 * abs(scale_value(label_spacing()) - scale_value(0));
+    4 * myabs(scale_value(label_spacing()) - scale_value(0));
 
   *spacing = graph_scale(minimum_spacing);
   *first = round_multiple(min(x1, x2), *spacing);
diff -uNr sparky/c++/uislice.cc sparky.works/c++/uislice.cc
--- sparky/c++/uislice.cc	2001-01-04 20:51:11.000000000 -0500
+++ sparky.works/c++/uislice.cc	2002-12-23 18:20:01.000000000 -0500
@@ -73,7 +73,7 @@
   int x, y;
   if (s->dragging && s->ws.event_xy(event, &x, &y))
     {
-      int motion = (abs(x - s->last_x) >= abs(y - s->last_y) ?
+      int motion = (myabs(x - s->last_x) >= myabs(y - s->last_y) ?
 		    x - s->last_x : y - s->last_y);
       s->last_x = x;
       s->last_y = y;
@@ -252,8 +252,8 @@
 			   float **spectrum_data, float **peak_fit,
 			   float **selected_peak, float **difference) const
 {
-  *d1 = round(view->map(p2, axis, PPM, INDEX));
-  *d2 = round(view->map(p1, axis, PPM, INDEX));
+  *d1 = myround(view->map(p2, axis, PPM, INDEX));
+  *d2 = myround(view->map(p1, axis, PPM, INDEX));
 
   IRegion region = slice_region(*d1, *d2);
   int size = region.volume();
diff -uNr sparky/c++/uiview.cc sparky.works/c++/uiview.cc
--- sparky/c++/uiview.cc	2001-12-11 19:21:26.000000000 -0500
+++ sparky.works/c++/uiview.cc	2002-12-23 18:20:01.000000000 -0500
@@ -181,7 +181,7 @@
     return *(Color *) colors[0];
 
   double e = log(r) / log(levels.factor);
-  int i = round(colors.size() * e / levels.levels);
+  int i = myround(colors.size() * e / levels.levels);
   if (i < 0)
     i = 0;
   else if (i >= colors.size())
@@ -1077,8 +1077,8 @@
 void View::drag(double x, double y)
 {
 	if (!pick.down ||		// We didn't get button down event.
-	    (abs(x - pick.downX) < DRAGMIN * pixel_size(X) &&
-	     abs(y - pick.downY) < DRAGMIN * pixel_size(Y)))
+	    (myabs(x - pick.downX) < DRAGMIN * pixel_size(X) &&
+	     myabs(y - pick.downY) < DRAGMIN * pixel_size(Y)))
 	  return;
 
 	if (pick.drag)
@@ -2113,7 +2113,7 @@
     {
       int zaxis = v->axis_order()[2];
       double z = sp->map(p[zaxis], zaxis, PPM, INDEX);
-      double z_display = round(sp->map(v->center(zaxis), zaxis, PPM, INDEX));
+      double z_display = myround(sp->map(v->center(zaxis), zaxis, PPM, INDEX));
       if (z - z_display > .5)
 	plane = 1;
       else if (z - z_display < -.5)
@@ -2470,8 +2470,8 @@
 	dxdata = pick.lastX - pick.downX;
 	dydata = pick.lastY - pick.downY;
 
-	if (abs(dxdata) < MINMOVE * pixel_size(X) &&
-	    abs(dydata) < MINMOVE * pixel_size(Y))
+	if (myabs(dxdata) < MINMOVE * pixel_size(X) &&
+	    myabs(dydata) < MINMOVE * pixel_size(Y))
 		return;
 
 	//

Reply to: