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