diff options
-rw-r--r-- | navit/data.h | 9 | ||||
-rw-r--r-- | navit/map/mg/mg.h | 13 | ||||
-rw-r--r-- | navit/map/mg/street.c | 10 | ||||
-rw-r--r-- | navit/map/mg/town.c | 6 |
4 files changed, 27 insertions, 11 deletions
diff --git a/navit/data.h b/navit/data.h index 97663e191..19ce00708 100644 --- a/navit/data.h +++ b/navit/data.h @@ -53,6 +53,15 @@ get_u24(unsigned char **p) { static inline unsigned int +get_u24_unal(unsigned char **p) { + unsigned long ret; + ret=get_u16_unal(p); + ret|=*((*p)++) << 16; + return ret; +} + + +static inline unsigned int get_u32(unsigned char **p) { unsigned long ret; ret=*((unsigned int *)*p); diff --git a/navit/map/mg/mg.h b/navit/map/mg/mg.h index dd283b150..22270f999 100644 --- a/navit/map/mg/mg.h +++ b/navit/map/mg/mg.h @@ -151,6 +151,11 @@ struct street_name_numbers { int tmp_len; unsigned char *tmp_data; }; +static inline void street_name_numbers_get_coord(struct street_name_numbers * str, struct coord * c) { + unsigned char *p=(unsigned char *)str->c; + c->x=get_u32_unal(&p); + c->y=get_u32_unal(&p); +} struct street_name_number { int len; @@ -240,10 +245,12 @@ struct block_priv { }; struct block_offset { - unsigned short offset; - unsigned short block; +/* unsigned short offset; + unsigned short block;*/ + unsigned char p[4]; }; - +static inline unsigned short block_offset_get_offset(struct block_offset * blk) { unsigned char *p = blk->p; return get_u16_unal(&p); } +static inline unsigned short block_offset_get_block(struct block_offset * blk) { unsigned char *p = blk->p+2; return get_u16_unal(&p); } struct tree_search_node { struct tree_hdr *hdr; diff --git a/navit/map/mg/street.c b/navit/map/mg/street.c index e99413b91..6d7c565af 100644 --- a/navit/map/mg/street.c +++ b/navit/map/mg/street.c @@ -52,8 +52,8 @@ street_name_numbers_get(struct street_name_numbers *name_numbers, unsigned char name_numbers->dist=get_u32_unal(p); name_numbers->country=get_u32_unal(p); name_numbers->c=coord_get(p); - name_numbers->first=get_u24(p); - name_numbers->last=get_u24(p); + name_numbers->first=get_u24_unal(p); + name_numbers->last=get_u24_unal(p); name_numbers->segment_count=get_u32_unal(p); name_numbers->segments=(struct street_name_segment *)(*p); (*p)+=sizeof(struct street_name_segment)*name_numbers->segment_count; @@ -71,8 +71,8 @@ street_name_number_get(struct street_name_number *name_number, unsigned char **p name_number->len=get_u16_unal(p); name_number->tag=get_u8(p); name_number->c=coord_get(p); - name_number->first=get_u24(p); - name_number->last=get_u24(p); + name_number->first=get_u24_unal(p); + name_number->last=get_u24_unal(p); name_number->segment=(struct street_name_segment *)p; *p=start+name_number->len; } @@ -632,7 +632,7 @@ street_name_coord_get(void *priv_data, struct coord *c, int count) dbg(1,"aux_data=%p\n", p); if (count) { street_name_numbers_get(&snns, &p); - *c=*(snns.c); + street_name_numbers_get_coord(&snns, c); return 1; } diff --git a/navit/map/mg/town.c b/navit/map/mg/town.c index aedf34a09..e22b8d3ae 100644 --- a/navit/map/mg/town.c +++ b/navit/map/mg/town.c @@ -275,9 +275,9 @@ town_search_get_item(struct map_rect_priv *mr) } if (! mr->search_blk_count) return NULL; - dbg(1,"block 0x%x offset 0x%x\n", mr->search_blk_off->block, mr->search_blk_off->offset); - block_get_byindex(mr->m->file[mr->current_file], mr->search_blk_off->block, &mr->b); - mr->b.p=mr->b.block_start+mr->search_blk_off->offset; + dbg(1,"block 0x%x offset 0x%x\n", block_offset_get_block(mr->search_blk_off), block_offset_get_offset(mr->search_blk_off)); + block_get_byindex(mr->m->file[mr->current_file], block_offset_get_block(mr->search_blk_off), &mr->b); + mr->b.p=mr->b.block_start+block_offset_get_offset(mr->search_blk_off); town_get(mr, &mr->town, &mr->item); mr->search_blk_off++; mr->search_blk_count--; |