Hi Gerd

I've attached the Display patch - this was a quick hack global edit and
could be improved by using the relevant signed/unsigned get methods
instead of masking...  I'm happy to do this - let me know.

Yes to DEM changes. Also the nearby asserts can go now because put2s()
will check the range.

  // don't think needed:
could be changed to
  // not needed at moment:
but I think it is worth leaving these methods (getNs()/putNs())
commented in the ImgFile interface source.

Ticker


On Thu, 2018-03-15 at 10:12 +0000, Gerd Petermann wrote:
> Hi Ticker,
> 
> sorry, did not find the time to look at it until now.
> At least for DEM this would not be correct, some values should be
> written with the signed put versions.
> I've attached a corrected version of the patch.
> Besides that I'd prefer not to see comments like
> // don't think needed:
> 
> For further testing I'd need the patch for display tool as well.
> 
> Gerd
Index: build.xml
===================================================================
--- build.xml	(revision 529)
+++ build.xml	(working copy)
@@ -24,7 +24,8 @@
   <property name="top" value="."/>
 
 	<property file="${top}/external.properties"/>
-	<property name="mkgmap.dir" value="../mkgmap"/>
+	<!-- property name="mkgmap.dir" value="../mkgmap"/ -->
+	<property name="mkgmap.dir" value="../../svn/trunk"/>
 
 	<!-- ivy dependency support -->
 	<property name="ivy.version" value="2.2.0"/>
Index: src/test/check/NetCheck.java
===================================================================
--- src/test/check/NetCheck.java	(revision 529)
+++ src/test/check/NetCheck.java	(working copy)
@@ -97,7 +97,7 @@
 
 		reader.position(section.getStart());
 		for (int pos = 0; pos < end; pos += recordSize)
-			roadIndexes.add(reader.getu3() & 0x3fffff);
+			roadIndexes.add(reader.get3u() & 0x3fffff);
 
 		Collections.sort(roadIndexes);
 	}
@@ -128,7 +128,7 @@
 		String lastName = null;
 		int lastValue = 0;
 		for (int pos = 0; pos < end; pos += recordSize) {
-			int value = reader.getu3();
+			int value = reader.get3u();
 
 			int offset = value & 0x3fffff;
 			int strNumber = (value >>> 22) & 0x3;
@@ -207,7 +207,7 @@
 			int labnum = 0;
 			int labval;
 			do {
-				labval = reader.getu3();
+				labval = reader.get3u();
 				String labstr = fetchLabel(labval & ~0xc00000);
 				if (labstr != null)
 					roadNames.put(def.netoff + (labnum << 22), labstr);
@@ -220,7 +220,7 @@
 			} while ((labval & 0x800000) == 0);
 
 			int flags = reader.get() & 0xff; // flags
-			reader.getu3(); //road len
+			reader.get3u(); //road len
 
 			readLevelDivs(def);
 			if ((flags & RD_HAS_STREET_ADDRESS_INFO) == RD_HAS_STREET_ADDRESS_INFO) {
@@ -262,7 +262,7 @@
 
 							int lo = uflag & 0x3;
 							if ((uflag & U_FLAG_1) == 0) {
-								int idx = reader.getUint((uflag & 0x3)+1);
+								int idx = reader.getNu((uflag & 0x3)+1);
 								idx += (uflag>>>3);
 
 							} else {
@@ -455,12 +455,12 @@
 			return null;
 		case 2:
 			if (size == 2)
-				reader.getChar();
+				reader.get2u();
 			else
 				reader.get();
 			break;
 		case 1:
-			int n = reader.getChar();
+			int n = reader.get2u();
 			reader.get(n);
 			break;
 		case 0:
@@ -499,7 +499,7 @@
 				Div div = new Div();
 				div.level = i;
 				div.line = reader.get() & 0xff;
-				div.div = reader.getChar();
+				div.div = reader.get2u();
 				divs.add(div);
 			}
 		}
Index: src/test/display/CommonDisplay.java
===================================================================
--- src/test/display/CommonDisplay.java	(revision 529)
+++ src/test/display/CommonDisplay.java	(working copy)
@@ -99,7 +99,7 @@
 
 	protected void readHeaderLen() {
 		reader.position(headerPos);
-		headerLen = reader.getChar();
+		headerLen = reader.get2u();
 		reader.position(COMMON_HEADER_LEN);
 	}
 
@@ -238,7 +238,7 @@
 					} 
 					if (offsetPos >= 0) { 
 						gmpReader.position(offsetPos);
-						headerPos = gmpReader.getInt();
+						headerPos = gmpReader.get4();
 						if (headerPos == 0) {
 							// GMP doesn't contain requested file
 							break;
Index: src/test/display/Displayer.java
===================================================================
--- src/test/display/Displayer.java	(revision 529)
+++ src/test/display/Displayer.java	(working copy)
@@ -161,13 +161,13 @@
 
 	public DisplayItem charItem() {
 		DisplayItem item = item();
-		item.setBytes(reader.getChar());
+		item.setBytes((char)reader.get2u());
 		return item;
 	}
 
 	public short shortValue(String text) {
 		DisplayItem item = item();
-		item.setBytes(reader.getChar());
+		item.setBytes((char)reader.get2s());
 		short val = (short) item.getValue();
 		if (text != null)
 			item.addText(text, (short) val);
@@ -184,7 +184,7 @@
 
 	public DisplayItem intItem() {
 		DisplayItem item = item();
-		item.setBytes(reader.getInt());
+		item.setBytes(reader.get4());
 		return item;
 	}
 
@@ -195,13 +195,13 @@
 			item.setBytes(reader.get());
 			break;
 		case 2:
-			item.setBytes(reader.getChar());
+			item.setBytes((char)reader.get2u());
 			break;
 		case 3:
-			item.setBytes3(reader.get3());
+			item.setBytes3(reader.get3u());
 			break;
 		case 4:
-			item.setBytes(reader.getInt());
+			item.setBytes(reader.get4());
 			break;
 		}
 		return item;
@@ -234,7 +234,7 @@
 
 	public DisplayItem int3Item() {
 		DisplayItem item = item();
-		item.setBytes3(reader.get3());
+		item.setBytes3(reader.get3u());
 		return item;
 	}
 
Index: src/test/display/ImgDisplay.java
===================================================================
--- src/test/display/ImgDisplay.java	(revision 529)
+++ src/test/display/ImgDisplay.java	(working copy)
@@ -71,7 +71,7 @@
 		char bl = d.charValue("First block %d");
 
 		char last = 0;
-		for (int count = 0; bl != 0xffff && count < SLOTS_PER_ENTRY; bl = reader.getChar(), count++) {
+		for (int count = 0; bl != 0xffff && count < SLOTS_PER_ENTRY; bl = (char)reader.get2u(), count++) {
 			last = bl;
 		}
 
Index: src/test/display/LineSectDisplayer.java
===================================================================
--- src/test/display/LineSectDisplayer.java	(revision 529)
+++ src/test/display/LineSectDisplayer.java	(working copy)
@@ -48,21 +48,21 @@
 		// Get the types first as they have the offsets into the styles
 		// section that we will need later.
 		reader.position(0x3d);
-		long typestart = reader.getInt();
-		int itemsize = reader.getChar();
-		int size = reader.getInt();
+		long typestart = reader.get4();
+		int itemsize = reader.get2u();
+		int size = reader.get4();
 
 		// Now get the styles start, as needed
 		reader.position(0x1f);
-		int stylestart = reader.getInt();
+		int stylestart = reader.get4();
 
 		d = printTypes(typestart, itemsize, size);
 		d.print(outStream);
 
 		reader.position(0x1f);
-		stylestart = reader.getInt();
+		stylestart = reader.get4();
 
-		size = reader.getInt();
+		size = reader.get4();
 		d = printStyles(stylestart, size);
 		d.print(outStream);
 	}
@@ -160,7 +160,7 @@
 		for (long pos = typestart; pos < end; pos += itemsize) {
 			DisplayItem item = d.item();
 
-			int typ_id = reader.getChar();
+			int typ_id = reader.get2u();
 			item.setBytes((char) typ_id);
 			item.addText("type %x", (typ_id >> 5));
 
Index: src/test/display/MdrCheck.java
===================================================================
--- src/test/display/MdrCheck.java	(revision 529)
+++ src/test/display/MdrCheck.java	(working copy)
@@ -617,7 +617,7 @@
 		reader.position(start);
 		while (reader.position() < end) {
 
-			char type = reader.getChar();
+			char type = (char)reader.get2u();
 			int rec = read(psize);
 			TypeInfo ti = new TypeInfo();
 			ti.type = type;
@@ -1540,7 +1540,7 @@
 	private int readMapNumber() {
 		int mn;
 		if (numberOfMaps > 255)
-			mn = reader.getChar() & 0xffff;
+			mn = (char)reader.get2u() & 0xffff;
 		else
 			mn = reader.get() & 0xff;
 		if (mn > numberOfMaps) {
@@ -1552,9 +1552,9 @@
 	private String readString() {
 		int off;
 		if (getSection(15).getLen() > 0xffffff)
-			off = reader.getInt();
+			off = reader.get4();
 		else
-			off = reader.get3();
+			off = reader.get3u();
 
 		return mdrStrings.getTextString(off);
 	}
@@ -1564,11 +1564,11 @@
 		case 1:
 			return reader.get() & 0xff;
 		case 2:
-			return reader.getChar();
+			return (char)reader.get2u();
 		case 3:
-			return reader.getu3();
+			return reader.get3u();
 		case 4:
-			return reader.getInt();
+			return reader.get4();
 		}
 		throw new IllegalArgumentException("integer size must be 1 to 4");
 	}
@@ -1587,10 +1587,10 @@
 		int mapIndex = 0;
 		while (reader.position() < end) {
 			mapIndex++;
-			int mapid = reader.getInt();
+			int mapid = reader.get4();
 			int offset = 0;
 			if ((magic & 0x1) != 0) {
-				offset = reader.getInt();
+				offset = reader.get4();
 			}
 
 			// Read in the actual map tile and save enough information to help us
@@ -1605,7 +1605,7 @@
 	private void readHeader() {
 		readHeaderLen();
 
-		int codePage = reader.getChar();
+		int codePage = reader.get2u();
 
 		charSet = Sort.charsetFromCodepage(codePage);
 		Sort sort = SrtTextReader.sortForCodepage(codePage);
@@ -1612,9 +1612,9 @@
 		collator = sort.getCollator();
 		collator.setStrength(Collator.SECONDARY);
 
-		reader.getChar();
-		reader.getChar();
-		reader.getChar();
+		reader.get2u();
+		reader.get2u();
+		reader.get2u();
 
 		Section sect = readSection(1, true, true);
 		numberOfMaps = sect.getNumberOfRecords();
@@ -1676,17 +1676,17 @@
 	private Section readSection(int number, boolean hasRecSize, boolean hasMagic) {
 		assert number != 0;
 
-		int start = reader.getInt();
-		int len = reader.getInt();
+		int start = reader.get4();
+		int len = reader.get4();
 		Section section = new Section("", start, len);
 
 		if (hasRecSize) {
-			int recordSize = reader.getChar();
+			int recordSize = reader.get2u();
 			section.setRecordSize(recordSize);
 		}
 
 		if (hasMagic) {
-			int magic = reader.getInt();
+			int magic = reader.get4();
 			section.setMagic(magic);
 		}
 
Index: src/test/display/MdrDisplay.java
===================================================================
--- src/test/display/MdrDisplay.java	(revision 529)
+++ src/test/display/MdrDisplay.java	(working copy)
@@ -178,7 +178,7 @@
 
 		reader.position(s.getStart());
 		while (reader.position() < s.getEnd()) {
-			int record = reader.get3();
+			int record = reader.get3s();
 			DisplayItem item = d.item();
 			item.setBytes3(record);
 			item.addText("Type 0x%04x.  Unknown 0x%x",
@@ -420,13 +420,13 @@
 					c &= ~0x80;
 				}
 			} else if (nPoints < 0x8000) {
-				c = item.setBytes(reader.getChar()) & 0xffff;
+				c = item.setBytes(reader.get2u()) & 0xffff;
 				if ((c & 0x8000) != 0) {
 					isRepeat = false;
 					c &= ~0x8000;
 				}
 			} else {
-				c = item.setBytes3(reader.get3());
+				c = item.setBytes3(reader.get3s());
 				if ((c & 0x800000) != 0) {
 					isRepeat = false;
 					c &= ~0x800000;
@@ -448,11 +448,11 @@
 		int c;
 		switch (cityPtrSize) {
 		case 3:
-			c = item.setBytes3(reader.get3());
+			c = item.setBytes3(reader.get3s());
 			mask = 0x800000;
 			break;
 		default: // There is a min size of 2
-			c = item.setBytes(reader.getChar());
+			c = item.setBytes(reader.get2u());
 			mask = 0x8000;
 			break;
 		}
@@ -669,7 +669,7 @@
 			}
 			if ((peek & 7) == 4)
 			{
-				partlength = 0xffff & (int)reader.getChar();
+				partlength = 0xffff & (int)reader.get2u();
 				item.setBytes((char) partlength);
 				partlength <<= 8;
 				partlength += peek;
@@ -1203,9 +1203,9 @@
 		int off;
 
 		if (getSection(15).getLen() > 0xffffff)
-			off = item.setBytes(reader.getInt());
+			off = item.setBytes(reader.get4());
 		else
-			off = item.setBytes3(reader.get3());
+			off = item.setBytes3(reader.get3s());
 
 		String str = getTextString(off);
 		item.addText("Pointer to string: %s", str);
Index: src/test/display/MdrSummary.java
===================================================================
--- src/test/display/MdrSummary.java	(revision 529)
+++ src/test/display/MdrSummary.java	(working copy)
@@ -53,8 +53,8 @@
 
 		List<Integer> offsets = new ArrayList<Integer>();
 		while ((reader.position() < end)) {
-			reader.getInt();
-			int offset = reader.getInt();
+			reader.get4();
+			int offset = reader.get4();
 			offsets.add(offset);
 		}
 
@@ -61,18 +61,18 @@
 		Integer[] subtotals = new Integer[20];
 		for (int off : offsets) {
 			reader.position(off);
-			int len = reader.getChar();
+			int len = reader.get2u();
 
 			int sub = 0;
 			int lastLen = 0;
 			while (reader.position() < off + len) {
 				sub++;
-				reader.getInt();
+				reader.get4();
 				int sublen;
 				if (sub == 2)
 					sublen = lastLen;
 				else
-					sublen = reader.getInt();
+					sublen = reader.get4();
 				lastLen = sublen;
 				if (sublen > 0) {
 					if (subtotals[sub] == null)
@@ -110,11 +110,11 @@
 	}
 
 	private void readHeader() {
-		reader.getChar();
+		reader.get2u();
 
-		int unk1 = reader.getChar();
-		int unk2 = reader.getChar();
-		int unk3 = reader.getChar();
+		int unk1 = reader.get2u();
+		int unk2 = reader.get2u();
+		int unk3 = reader.get2u();
 		System.out.printf("initial values %4x %4x %4x\n", unk1, unk2, unk3);
 
 		addSection(1, true, true);
@@ -151,16 +151,16 @@
 	}
 
 	private Section addSection(int n, boolean withReclen, boolean withMagic) {
-		long start = reader.getInt();
-		int len = reader.getInt();
+		long start = reader.get4();
+		int len = reader.get4();
 
 		Section section = new Section("MDR " + n, start, len);
 		if (withReclen) {
-			int reclen = reader.getChar();
+			int reclen = reader.get2u();
 			section.setRecordSize(reclen);
 		}
 		if (withMagic) {
-			int magic = reader.getInt();
+			int magic = reader.get4();
 			section.setMagic(magic);
 		}
 
Index: src/test/display/NetDisplay.java
===================================================================
--- src/test/display/NetDisplay.java	(revision 529)
+++ src/test/display/NetDisplay.java	(working copy)
@@ -172,7 +172,7 @@
 			int labNum = 0;
 			do {
 				item = d.item();
-				labval = reader.get3();
+				labval = reader.get3s();
 
 				item.setBytes3(labval);
 				int laboff = labval & 0x3fffff;
@@ -199,7 +199,7 @@
 			item.addText("Flags %02x %s", flags, flagDesc);
 
 			item = d.item();
-			int rlen = reader.get3();
+			int rlen = reader.get3s();
 			item.setBytes3(rlen);
 
 			// this is possibly different on different maps, working with this
@@ -1061,7 +1061,7 @@
 			if (size == 1)
 				cnum = reader.get() & 0xff;
 			else if (size == 2)
-				cnum = reader.getChar();
+				cnum = reader.get2u();
 			else {
 				item.addText("Bad city/zip size " + size);
 				return 0;
Index: src/test/display/NodConvert.java
===================================================================
--- src/test/display/NodConvert.java	(revision 529)
+++ src/test/display/NodConvert.java	(working copy)
@@ -180,7 +180,7 @@
 
 		// Now do 'Table A' (segments)
 		for (int i = 0; i < n; i++) {
-			reader.get3();
+			reader.get3s();
 			int paramA = reader.get();
 			table.tableA.add((paramA & CLASS) >> 4);
 			reader.get();
@@ -189,7 +189,7 @@
 		// 'Table B' (inter-section pointers)
 		for (int i = 0; i < m; i++) {
 			System.err.println("adding table b entry " + i);
-			table.tableB.add(reader.get3());
+			table.tableB.add(reader.get3s());
 		}
 
 		// 'Table C' (restrictions)
@@ -200,9 +200,9 @@
 		} else if (restrbytes == 1) {
 			size = reader.get() & 0xff;
 		} else if (restrbytes == 2) {
-			size = reader.getChar() & 0xffff;
+			size = reader.get2u() & 0xffff;
 		} else if (restrbytes == 3) {
-			size = reader.getChar() & 0xffffff;
+			size = reader.get2u() & 0xffffff;  // %%% think mistake
 		} else {
 		}
 		if (size % 11 == 0) {
@@ -210,9 +210,9 @@
 			for (; size > 0; size -= 11) {
 				// turn restriction at second node from first node (via first segment)
 				// to third node (via second segment)
-				reader.get3();
+				reader.get3s();
 				for (int i = 0; i < 3; i++) {
-					reader.getChar();
+					reader.get2u();
 				}
 				reader.get();
 				reader.get();
@@ -232,10 +232,10 @@
 		short longoff;
 		short latoff;
 		if (bigoff) {
-			longoff = (short) reader.getChar();
-			latoff = (short) reader.getChar();
+			longoff = (short) reader.get2u();
+			latoff = (short) reader.get2u();
 		} else {
-			int latlon = reader.get3();
+			int latlon = reader.get3s();
 
 			latoff = (short) (latlon >> 12);
 			if ((latoff & 0x800) != 0)
@@ -324,7 +324,7 @@
 				int len1 = reader.get() & 0xff;
 				if ((len1 & 0x80) == 0x80) {
 					if ((len1 & 0x40) == 0x40) {
-						int len2 = reader.getChar();
+						int len2 = reader.get2u();
 						len = (len1 & 0x3f) | (len2 << 6); // 6+16 bits
 						curve = true;
 					} else {
@@ -369,7 +369,7 @@
 	}
 
 	private int latLongField() {
-		int l = reader.get3();
+		int l = reader.get3s();
 		if ((l & 0x800000) != 0)
 			l |= 0xff000000;
 		return l;
Index: src/test/display/NodDisplay.java
===================================================================
--- src/test/display/NodDisplay.java	(revision 529)
+++ src/test/display/NodDisplay.java	(working copy)
@@ -241,18 +241,18 @@
 		DisplayItem item;
 		if (bigoff) {
 			item = d.item();
-			short longoff = (short) reader.getChar();
+			short longoff = (short) reader.get2u();
 			item.setBytes((char) longoff);
 			item.addText("longitude %.5f %+d", Utils.toDegrees(longoff + currentTableHeader.getLon()), longoff);
 
 			item = d.item();
-			short latoff = (short) reader.getChar();
+			short latoff = (short) reader.get2u();
 			item.setBytes((char) latoff);
 			item.addText("latitude %.5f %+d", Utils.toDegrees(latoff + currentTableHeader.getLat()), latoff);
 
 		} else {
 			item = d.item();
-			int latlon = reader.get3();
+			int latlon = reader.get3s();
 
 			short latoff = (short) (latlon >> 12);
 			if ((latoff & 0x800) != 0)
@@ -360,7 +360,7 @@
 				if ((len1 & 0x80) == 0x80) {
 					if ((len1 & 0x40) == 0x40) {
 						item.addText("22 bit length + curve");
-						int len2 = item.setBytes(reader.getChar());
+						int len2 = item.setBytes(reader.get2u());
 						len = (len1 & 0x3f) | (len2 << 6); // 6+16 bits
 						curve = true;
 					} else {
@@ -492,7 +492,7 @@
 			d.item().addText("net pointer index %d %02x", i, i);
 
 			DisplayItem item = d.item();
-			int off = item.setBytes3(reader.get3());
+			int off = item.setBytes3(reader.get3s());
 			// top 2 bits of net pointer are access bits
 			int access = (off & 0xc00000) >> 8;
 			off &= 0x3fffff;
Index: src/test/display/PointDisplayer.java
===================================================================
--- src/test/display/PointDisplayer.java	(revision 529)
+++ src/test/display/PointDisplayer.java	(working copy)
@@ -44,18 +44,18 @@
 
 	private void printPointDefs() {
 		reader.position(0x33); // sect6
-		int start = reader.getInt();
-		int itemsize = reader.getChar();
-		int size = reader.getInt();
+		int start = reader.get4();
+		int itemsize = reader.get2u();
+		int size = reader.get4();
 
 		reader.position(0x17);
-		reader.getInt();
+		reader.get4();
 
 		printTypes(start, itemsize, size);
 
 		reader.position(0x17);
-		int stylestart = reader.getInt();
-		size = reader.getInt();
+		int stylestart = reader.get4();
+		size = reader.get4();
 
 		printStyles(stylestart, size);
 	}
Index: src/test/display/PolygonDisplayer.java
===================================================================
--- src/test/display/PolygonDisplayer.java	(revision 529)
+++ src/test/display/PolygonDisplayer.java	(working copy)
@@ -44,18 +44,18 @@
 
 	private void printPolygonDefs() {
 		reader.position(0x47); // sect4
-		int start = reader.getInt();
-		int itemsize = reader.getChar();
-		int size = reader.getInt();
+		int start = reader.get4();
+		int itemsize = reader.get2u();
+		int size = reader.get4();
 
 		reader.position(0x27); // sect1
-		reader.getInt();
+		reader.get4();
 
 		printTypes(start, itemsize, size);
 
 		reader.position(0x27);
-		int stylestart = reader.getInt();
-		size = reader.getInt();
+		int stylestart = reader.get4();
+		size = reader.get4();
 
 		printStyles(stylestart, size);
 	}
@@ -106,7 +106,7 @@
 		for (long pos = start; pos < end; pos += itemsize) {
 			DisplayItem item = d.item();
 
-			int typ_id = reader.getChar();
+			int typ_id = reader.get2u();
 			item.setBytes((char) typ_id);
 			item.addText("type %x", (typ_id >> 5));
 
Index: src/test/display/RgnDisplay.java
===================================================================
--- src/test/display/RgnDisplay.java	(revision 529)
+++ src/test/display/RgnDisplay.java	(working copy)
@@ -165,7 +165,7 @@
 				twoByteBitLength = true;
 			
 			item = d.item();
-			int labval = reader.get3();
+			int labval = reader.get3s();
 			item.setBytes3(labval);
 			int off = labval & MASK_LABEL;
 			boolean extra = (labval & FLAG_EXTRA) != 0;
@@ -295,7 +295,7 @@
 		while (reader.position() < pointers[count+1]) {
 			d.item().addText("Point #%d", num++);
 			d.byteValue("Type %x");
-			int val = reader.get3();
+			int val = reader.get3s();
 			DisplayItem item = d.item();
 			item.setBytes3(val);
 			boolean hasSubtype = false;
@@ -370,7 +370,7 @@
 		while (treader.position() < end) {
 			int level = treader.get();
 			int nbits = treader.get();
-			int ndivs = treader.getChar();
+			int ndivs = treader.get2u();
 			level &= 0x7f;
 
 			LevelInfo li = new LevelInfo(level, nbits);
@@ -384,7 +384,7 @@
 		treader.position(subdivs.getStart());
 
 		int subdivNumber = 1;
-		int lastRgnOffset = treader.get3();
+		int lastRgnOffset = treader.get3s();
 		for (int level = 23; level >=0; level--) {
 			Subdiv[] divs = divinfo[level];
 			if (divs == null)
@@ -393,15 +393,15 @@
 			int count = divs.length;
 			while (count-- > 0) {
 				int elem = treader.get();
-				int lon = treader.get3();
-				int lat = treader.get3();
-				treader.getChar();
-				treader.getChar();
+				int lon = treader.get3s();
+				int lat = treader.get3s();
+				treader.get2u();
+				treader.get2u();
 
 				if (level > lowestLevel)
-					treader.getChar();
+					treader.get2u();
 
-				int endRgnOffset = treader.getu3();
+				int endRgnOffset = treader.get3u();
 
 				Subdiv subdiv = new Subdiv();
 				divs[divs.length - count - 1] = subdiv;
Index: src/test/display/SrtDisplay.java
===================================================================
--- src/test/display/SrtDisplay.java	(revision 529)
+++ src/test/display/SrtDisplay.java	(working copy)
@@ -318,7 +318,7 @@
 		CharPosition c = new CharPosition(charValue);
 
 		if (posLength == 2) {
-			int rec = reader.getChar();
+			int rec = reader.get2u();
 			item.setBytes((char) rec);
 
 			c.first = rec & 0xff;
@@ -325,13 +325,13 @@
 			c.second = (rec >> 8) & 0xf;
 			c.third = (rec >> 12) & 0xf;
 		} else if (posLength == 3) {
-			int rec = reader.getu3();
+			int rec = reader.get3u();
 			item.setBytes3(rec);
 			c.first = rec & 0xff;
 			c.second = (rec >> 8) & 0xff;
 			c.third = (rec >> 16) & 0xff;
 		} else if (posLength == 4) {
-			int rec = reader.getInt();
+			int rec = reader.get4();
 			item.setBytes(rec);
 
 			c.first = rec & 0xffff;
Index: src/test/display/StackingDisplayer.java
===================================================================
--- src/test/display/StackingDisplayer.java	(revision 529)
+++ src/test/display/StackingDisplayer.java	(working copy)
@@ -42,9 +42,9 @@
 
 		// Find the details of the section
 		reader.position(0x51);
-		long start = reader.getInt();
-		int itemsize = reader.getChar();
-		int size = reader.getInt();
+		long start = reader.get4();
+		int itemsize = reader.get2u();
+		int size = reader.get4();
 
 		d = printOrder(start, itemsize, size);
 		d.print(outStream);
@@ -73,4 +73,4 @@
 		}
 		return d;
 	}
-}
\ No newline at end of file
+}
Index: src/test/display/TableHeader.java
===================================================================
--- src/test/display/TableHeader.java	(revision 529)
+++ src/test/display/TableHeader.java	(working copy)
@@ -40,8 +40,8 @@
         reader.position(offset);
         reader.get();
 
-		lon = reader.get3();
-		lat = reader.get3();
+		lon = reader.get3s();
+		lat = reader.get3s();
 
         int na = reader.get() & 0xff;
         int nb = reader.get() & 0xff;
@@ -48,13 +48,13 @@
 
 		// Read in Table A
 	    for (int i = 0; i < na; i++) {
-			roads.add(reader.getu3() & 0x3fffff);
+			roads.add(reader.get3u() & 0x3fffff);
 		    reader.get(tabAReclen - 3);
 	    }
 
 		// Read in Table B
         for (int i = 0; i < nb; i++)
-			links.add(reader.getu3());
+			links.add(reader.get3u());
 
         reader.position(orig);
     }
Index: src/test/display/TreCalc.java
===================================================================
--- src/test/display/TreCalc.java	(revision 529)
+++ src/test/display/TreCalc.java	(working copy)
@@ -55,7 +55,7 @@
 		// Print the map id out in various ways
 		DisplayItem item = d.item();
 		reader.position(0x74);
-		int mapId = reader.getInt();
+		int mapId = reader.get4();
 		item.setStartPos(reader.position());
 		item.setBytes(mapId);
 		item.addText("Map ID   %08d", mapId)
@@ -351,4 +351,4 @@
 			return mapId.extractNibble(n);
 		}
 	}
-}
\ No newline at end of file
+}
Index: src/test/display/check/SubsectionList.java
===================================================================
--- src/test/display/check/SubsectionList.java	(revision 529)
+++ src/test/display/check/SubsectionList.java	(working copy)
@@ -34,7 +34,7 @@
 
 	public void read(ImgFileReader reader, int map, int offset) {
 		reader.position(offset);
-		int headLen = reader.getChar();
+		int headLen = reader.get2u();
 		// sect 2 does not have a length
 		int nsect = 3 + (headLen - 12) / 8;
 
@@ -44,9 +44,9 @@
 			Subsection sub = new Subsection();
 			sub.setStart(offset);
 			subsection[n] = sub;
-			sub.setOffset(reader.getInt());
+			sub.setOffset(reader.get2u());
 			if (n != 2)
-				sub.setLength(reader.getInt());
+				sub.setLength(reader.get4());
 		}
 
 		subsection[2].setLength(subsection[1].getLength());
Index: src/test/files/ByteImgFileReader.java
===================================================================
--- src/test/files/ByteImgFileReader.java	(revision 529)
+++ src/test/files/ByteImgFileReader.java	(working copy)
@@ -54,17 +54,31 @@
 		return bytes[offset++];
 	}
 
+	public int get1u() throws ReadFailedException {
+		return bytes[offset++] & 0xff;
+	}
+
+	public int get1s() throws ReadFailedException {
+		return bytes[offset++];
+	}
+
 	/**
 	 * Read in two bytes.  Done in the correct byte order.
 	 *
 	 * @return The 2 byte integer that was read.
 	 */
-	public char getChar() throws ReadFailedException {
+	public int get2u() throws ReadFailedException {
 		byte b1 = bytes[offset++];
 		byte b2 = bytes[offset++];
 		return (char) (((b2 & 0xff) << 8) + (b1 & 0xff));
 	}
 
+	public int get2s() throws ReadFailedException {
+		byte b1 = bytes[offset++];
+		byte b2 = bytes[offset++];
+		return (b2 << 8) | (b1 & 0xff);
+	}
+
 	/**
 	 * Get a 3byte signed quantity.
 	 *
@@ -71,8 +85,8 @@
 	 * @return The value read.
 	 * @throws ReadFailedException When the file cannot be read.
 	 */
-	public int get3() throws ReadFailedException {
-		int val = getu3();
+	public int get3s() throws ReadFailedException {
+		int val = get3u();
 		if ((val & 0x800000) != 0)
 			val |= 0xff000000;
 		return val;
@@ -84,7 +98,7 @@
 	 * @return The value read.
 	 * @throws ReadFailedException When the file cannot be read.
 	 */
-	public int getu3() throws ReadFailedException {
+	public int get3u() throws ReadFailedException {
 		byte b1 = bytes[offset++];
 		byte b2 = bytes[offset++];
 		byte b3 = bytes[offset++];
@@ -96,7 +110,7 @@
 	 *
 	 * @return A 4 byte integer.
 	 */
-	public int getInt() throws ReadFailedException {
+	public int get4() throws ReadFailedException {
 		throw new UnsupportedOperationException();
 	}
 
@@ -107,7 +121,7 @@
 	 * @return The integer which will not be sign extended if it is less
 	 * than 4 bytes long.
 	 */
-	public int getUint(int n) throws ReadFailedException {
+	public int getNu(int n) throws ReadFailedException {
 		throw new UnsupportedOperationException();
 	}
 
Index: src/test/files/NetFile.java
===================================================================
--- src/test/files/NetFile.java	(revision 529)
+++ src/test/files/NetFile.java	(working copy)
@@ -70,7 +70,7 @@
 
 		readLabels(road);
 		byte netFlags = reader.get();
-		road.setLength(reader.getu3());
+		road.setLength(reader.get3u());
 		road.setOneway((netFlags & 0x2) != 0);
 
 		int[] counts = new int[24];
@@ -86,7 +86,7 @@
 			int c = counts[level];
 			for (int j = 0; j < c; j++) {
 				int idx = reader.get();
-				int div = reader.getChar();
+				int div = reader.get2u();
 				if (level == 0) {
 					Segment seg = new Segment();
 					seg.setDiv(div);
@@ -97,7 +97,7 @@
 		}
 
 		if ((netFlags & RoadDef.NET_FLAG_ADDRINFO) != 0) {
-			char flags2 = reader.getChar();
+			char flags2 = (char)reader.get2u();
 
 			int zipFlag = (flags2 >> 10) & 0x3;
 			int cityFlag = (flags2 >> 12) & 0x3;
@@ -113,7 +113,7 @@
 			int nodFlags = reader.get();
 			int nbytes = nodFlags & 0x3;
 			if (nbytes > 0) {
-				int offsetNod2 = reader.getUint(nbytes + 1);
+				int offsetNod2 = reader.getNu(nbytes + 1);
 				road.setOffsetNod2(offsetNod2);
 			}
 		}
@@ -132,7 +132,7 @@
 		T item = null;
 		if (flag == 2) {
 			// fetch city/zip index
-			int ind = (size == 2) ? reader.getChar() : (reader.get() & 0xff);
+			int ind = (size == 2) ? reader.get2u() : (reader.get() & 0xff);
 			if (ind != 0)
 				item = list.get(ind - 1);
 		} else if (flag == 3) {
@@ -142,7 +142,7 @@
 			reader.get(reader.get() & 0xff);
 		} else if (flag == 1) {
 			// Skip over these
-			int n = reader.getChar();
+			int n = reader.get2u();
 			reader.get(n);
 		} else {
 			assert false : "flag is " + flag;
@@ -161,7 +161,7 @@
 		if (numberFlag == 0) {
 			n = reader.get() & 0xff;
 		} else if (numberFlag == 1) {
-			n = reader.getChar();
+			n = reader.get2u();
 		} else if (numberFlag == 3) {
 			// There is no block
 			return;
@@ -175,7 +175,7 @@
 
 	private void readLabels(RoadData road) {
 		for (int i = 0; i < 4; i++) {
-			int lab = reader.getu3();
+			int lab = reader.get3u();
 			assert labels!=null;
 			Label label = labels.fetchLabel(lab & 0x7fffff);
 			road.addLabel(label);
Index: src/test/files/NodFile.java
===================================================================
--- src/test/files/NodFile.java	(revision 529)
+++ src/test/files/NodFile.java	(working copy)
@@ -211,7 +211,7 @@
 			int ptrSize = center.getCPointerSize();
 			int topbit = 0x80 << (8 * (ptrSize - 1));
 			while (!done) {
-				int off = reader.getUint(ptrSize);
+				int off = reader.getNu(ptrSize);
 				done = (off & topbit) != 0;
 				int val = off & (topbit-1);
 				RouteCenter.Restriction restr = center.getRestriction(val);
@@ -308,7 +308,7 @@
                 if ((len1 & 0x80) == 0x80) {
                     if ((len1 & 0x40) == 0x40) {
                         //d.item().addText("22 bit length + curve");
-                        int len2 = reader.getChar();
+                        int len2 = reader.get2u();
                         len = (len1 & 0x3f) | (len2 << 6); // 6+16 bits
                         curve = true;
                     } else {
@@ -373,14 +373,14 @@
 
 		reader.position(section.getPosition());
 		while (reader.position() < section.getEndPos()) {
-			int lng = reader.getu3();
+			int lng = reader.get3u();
 			if ((lng & 0x800000) != 0)
 				lng += 0xff000000;
-			int lat = reader.getu3();
+			int lat = reader.get3u();
 			if ((lat & 0x800000) != 0)
 				lat += 0xff000000;
 			Coord coord = new Coord(lat, lng);
-			int off = reader.getu3() << ptrShift;
+			int off = reader.get3u() << ptrShift;
 			RouteNode node = getNode(off);
 			if (node == null) {
 				Log.error("Node:%x: on boundary, does not exist", off);
@@ -401,9 +401,9 @@
 
 		reader.position(section.getPosition());
 		while (reader.position() < section.getEndPos()) {
-			reader.getu3();
-			reader.getu3();
-			int off = reader.getu3() << ptrShift;
+			reader.get3u();
+			reader.get3u();
+			int off = reader.get3u() << ptrShift;
 			RouteNode node = getNode(off);
 			if (node == null) {
 				Log.error("Node:%x: on boundary, does not exist", off);
@@ -418,10 +418,10 @@
 		short longoff;
 		short latoff;
 		if (bigoff) {
-			longoff = (short) reader.getChar();
-			latoff = (short) reader.getChar();
+			longoff = (short) reader.get2u();
+			latoff = (short) reader.get2u();
 		} else {
-			int latlon = reader.get3();
+			int latlon = reader.get3s();
 
 			latoff = (short) (latlon >> 12);
 			if ((latoff & 0x800) != 0)
@@ -472,11 +472,11 @@
 		byte flags = reader.get();
 		info.setFlags(flags);
 
-		int offsetNod1 = reader.getu3() << ptrShift;
+		int offsetNod1 = reader.get3u() << ptrShift;
 		//System.out.printf("nod2=%x, nod1=%x size %d\n", offset, offsetNod1, allNodes.size());
 		info.setNode(getNode(offsetNod1));
 
-		int bitLen = reader.getChar();
+		int bitLen = reader.get2u();
 		int nstream = (bitLen + 7) / 8;
 		byte[] bytes = reader.get(nstream);
 		info.setBitStream(bytes);
@@ -497,7 +497,7 @@
 					reader.get();
 				}
 				if ((extraFormat & 0x08) != 0) {
-					reader.getChar();
+					reader.get2u();
 				}
 			} else {
 				int len = reader.get() & 0xff;
Index: src/test/files/RgnFile.java
===================================================================
--- src/test/files/RgnFile.java	(revision 529)
+++ src/test/files/RgnFile.java	(working copy)
@@ -97,7 +97,7 @@
 			Point p = new Point(sd);
 
 			byte t = reader.get();
-			int val = reader.getu3();
+			int val = reader.get3u();
 			boolean hasSubtype = false;
 			if ((val & 0x800000) != 0)
 				hasSubtype = true;
@@ -120,8 +120,8 @@
 			}
 			p.setLabel(l);
 
-			p.setDeltaLong((short)reader.getChar());
-			p.setDeltaLat((short)reader.getChar());
+			p.setDeltaLong((short)reader.get2u());
+			p.setDeltaLat((short)reader.get2u());
 
 			if (hasSubtype) {
 				byte st = reader.get();
@@ -192,7 +192,7 @@
 		byte type = reader.get();
 		line.setType(type & 0x3f);
 
-		int labelOffset = reader.getu3();
+		int labelOffset = reader.get3u();
 		boolean extra = (labelOffset & FLAG_EXTRA) != 0;
 		line.setNodeFlags(extra);
 		Label label;
@@ -207,10 +207,10 @@
 		}
 		line.setLabel(label);
 
-		short dlon = (short) reader.getChar();
+		short dlon = (short) reader.get2u();
 		line.setDeltaLong(dlon);
 
-		short dlat = (short) reader.getChar();
+		short dlat = (short) reader.get2u();
 		line.setDeltaLat(dlat);
 
 		int currLon = fixDelta(div, div.getLongitude(), dlon);
@@ -220,7 +220,7 @@
 		if ((type & 0x80) == 0)
 			len = reader.get() & 0xff;
 		else
-			len = reader.getChar();
+			len = reader.get2u();
 
 		int base = reader.get() & 0xff;
 
@@ -377,17 +377,17 @@
 			pointOffset = 0;
 
 			if (sd.needsIndPointPtr()) {
-				indPointOffset = reader.getChar();
+				indPointOffset = reader.get2u();
 				headerLen += 2;
 			}
 
 			if (sd.needsPolylinePtr()) {
-				lineOffset = reader.getChar();
+				lineOffset = reader.get2u();
 				headerLen += 2;
 			}
 
 			if (sd.needsPolygonPtr()) {
-				polygonOffset = reader.getChar();
+				polygonOffset = reader.get2u();
 				headerLen += 2;
 			}
 
Index: src/test/files/RouteCenter.java
===================================================================
--- src/test/files/RouteCenter.java	(revision 529)
+++ src/test/files/RouteCenter.java	(working copy)
@@ -113,7 +113,7 @@
         // 'Table B' (inter-section pointers)
         for (int i = 0; i < nTabB; i++) {
             TableB b = new TableB();
-            b.setNodOffset(r.get3() << ptrShift);
+            b.setNodOffset(r.get3s() << ptrShift);
             tableB.add(b);
         }
 
@@ -122,7 +122,7 @@
         if ((restrformat & 1) != 0) {
             size = r.get() & 0xff;
         } else if ((restrformat & 2) != 0) {
-            size = r.getChar() & 0xffff;
+            size = r.get2u() & 0xffff;
         }
 
 		tableC.setPtrSize(size > 127? 2: 1);
@@ -203,7 +203,7 @@
 
 			// The list of nodes that are involved
 			for (int i = 0; i < numItems + 1; i++) {
-				int off = r.getChar();
+				int off = r.get2u();
 				int nodeOffset;
 				if ((off & 0x8000) == 0) {
 					int tabB = off & 0x00ff;
@@ -231,7 +231,7 @@
 					//d.byteValue("??");
 					r.get();
 				} else if (b == 0x8c) {
-					r.getChar();
+					r.get2u();
 				} else if (b == 0x8d) {
 					//d.intValue(3, "??");
 					//d.byteValue("??");
@@ -240,7 +240,7 @@
 					if ((f1 & 0x80) == 0) {
 						r.get();
 					} else {
-						r.getChar();
+						r.get2u();
 					}
 
 				} else if (b == 0x08 || b == 0x0c) {
@@ -263,7 +263,7 @@
 		TableA a = new TableA();
 
 		// Get the NET pointer.
-		int off = r.get3();
+		int off = r.get3s();
 
 		// top 2 bits of net pointer are access bits
 		int access = off & 0xc0_00_00;
@@ -285,7 +285,7 @@
 	}
 
     private int latLongField(ImgFileReader r) {
-        int l = r.get3();
+        int l = r.get3s();
         if ((l & 0x800000) != 0)
             l |= 0xff000000;
 
_______________________________________________
mkgmap-dev mailing list
[email protected]
http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev

Reply via email to