Package: tunnelx
Version: 20160713-3
Severity: normal
Tags: patch

I'm too lazy to type decimal points, so my Survex data files have

/--------
| *units tape 0.001 metres
| *units compass clino 0.1 degrees
\--------

When I import this as centreline, Tunnel does nothing, but prints an
exception to its output.  It will only accept angle units that are
exactly 1.0 of the known measures.

I've written a patch to permit angle units of any size.  As I couldn't
find any unit tests in the source package, it's just been tested with my
own data files (as above), and I don't use grads or percent, so those
are tested only by inspection.  However, the patch is probably still
suitable for forwarding upstream.

Index: tunnelx-20160713/src/LegLineFormat.java
===================================================================
--- tunnelx-20160713.orig/src/LegLineFormat.java
+++ tunnelx-20160713/src/LegLineFormat.java
@@ -28,9 +28,10 @@ import java.util.ArrayList;
 //
 public class LegLineFormat// implements Cloneable
 {
-	static int DEGREES = 0;
-	static int GRADS = 1; 
-	static int PERCENT = 2;
+	// angular units are positive for degrees; negative for percent
+	static final float DEGREES = 1;
+	static final float GRADS = 400F / 360F; 
+	static final float PERCENT = 1;
 
 	static float TAPEFAC_M = 1.0F; 
 	static float TAPEFAC_CM = 0.01F;
@@ -57,12 +58,13 @@ public class LegLineFormat// implements
 	float compassnegoffset = 0.0F;
 	float backcompassnegoffset = 0.0F;
 	float compassnegoffsetdeclination = 0.0F; // a secondary offset value (separates the calibration from the magnetic wandering (declination))
-	int compassfac = DEGREES;
+	float compassfac = DEGREES;
 
 	int clinoindex = 4;
 	int backclinoindex = -1;
 	float clinonegoffset = 0.0F;
-	int clinofac = DEGREES;
+	float clinofac = DEGREES;
+	boolean clinopercent = false;
 
 	int dxindex = -1;
 	int dyindex = -1;
@@ -331,8 +333,7 @@ public class LegLineFormat// implements
 			return OneLeg.INVALID_COMPASSCLINO; 
 
 		float compass = GetFLval(acompass) - (bback ? backcompassnegoffset : compassnegoffset) - compassnegoffsetdeclination;
-		if (compassfac == GRADS)
-			compass *= 360.0F / 400.0F;
+                compass *= compassfac;
 
         while (compass < 0.0F)
             compass += 360.0F;
@@ -359,9 +360,8 @@ public class LegLineFormat// implements
 		{
 			clino = GetFLval(aclino);
 			clino -= clinonegoffset;   // is there a different setting for backclino?
-			if (clinofac == GRADS)
-				clino *= 360.0F / 400.0F;
-			if (clinofac == PERCENT)
+                        clino *= clinofac;
+			if (clinopercent)
 				clino = (float)TN.percentdeg(clino);
 		}
 		return clino; 
@@ -618,25 +618,28 @@ public class LegLineFormat// implements
 
 		else if (sunitype.equalsIgnoreCase("bearing") || sunitype.equalsIgnoreCase("compass")) 
 		{
-			assert sunitval2.equals("") || (fac == 1.0); 
+			assert sunitval2.equals("") || (fac != 0); 
 			if (sunitval.equalsIgnoreCase("degrees")) 
-				compassfac = DEGREES;
+				compassfac = DEGREES * fac;
 			else if (sunitval.equalsIgnoreCase("grads")) 
-				compassfac = GRADS; 
+				compassfac = GRADS * fac; 
 			else 
 				TN.emitWarning("don't know *Units bearing " + sunitval1 + "," + sunitval2); 
 		}
 
 		else if (sunitype.equalsIgnoreCase("gradient") || sunitype.equalsIgnoreCase("clino"))
 		{
-			assert sunitval2.equals("") || (fac == 1.0); 
-			if (sunitval.equalsIgnoreCase("degrees")) 
-				clinofac = DEGREES;
-			else if (sunitval.equalsIgnoreCase("grads"))
-				clinofac = GRADS;
-			else if (sunitval.equalsIgnoreCase("percent"))
-				clinofac = PERCENT;
-			else 
+			assert sunitval2.equals("") || (fac != 0); 
+			if (sunitval.equalsIgnoreCase("degrees")) {
+				clinopercent = false;
+				clinofac = DEGREES * fac;
+			} else if (sunitval.equalsIgnoreCase("grads")) {
+				clinopercent = false;
+				clinofac = GRADS * fac;
+			} else if (sunitval.equalsIgnoreCase("percent")) {
+				clinopercent = true;
+				clinofac = PERCENT * fac;
+			} else 
 				TN.emitWarning("don't know *Units gradient " + sunitval1 + "," + sunitval2);
 		}
 

-- System Information:
Debian Release: 9.0
  APT prefers testing
  APT policy: (900, 'testing'), (900, 'stable'), (400, 'unstable')
Architecture: amd64 (x86_64)
Foreign Architectures: i386, armel

Kernel: Linux 3.16.7-ckt2-balti (SMP w/8 CPU cores; PREEMPT)
Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: sysvinit (via /sbin/init)

Versions of packages tunnelx depends on:
ii  default-jre [java8-runtime]    2:1.8-58
ii  gcj-4.8-jre [java5-runtime]    4.8.5-4
ii  jarwrapper                     0.59
ii  openjdk-8-jre [java8-runtime]  8u111-b14-3

tunnelx recommends no packages.

tunnelx suggests no packages.

-- no debconf information

Reply via email to