X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Ffiledumper.c;h=c1c67ec48e4ebaa59d4bc646fc5bbdcd2c4ceda3;hb=a5b34ad069a52ff6cf981f01667d102292988811;hp=463ab19a52d4f213c5edd5f3a8d66375ec144991;hpb=20283c6cf5c6951cc1f2787492c67a7fb72aee9a;p=routino diff --git a/src/filedumper.c b/src/filedumper.c index 463ab19..c1c67ec 100644 --- a/src/filedumper.c +++ b/src/filedumper.c @@ -1,5 +1,5 @@ /*************************************** - $Header: /home/amb/routino/src/RCS/filedumper.c,v 1.43 2010/05/30 12:52:16 amb Exp $ + $Header: /home/amb/routino/src/RCS/filedumper.c,v 1.54 2010/09/15 18:19:36 amb Exp $ Memory file dumper. @@ -30,11 +30,12 @@ #include #include "types.h" -#include "functions.h" -#include "visualiser.h" #include "nodes.h" #include "segments.h" #include "ways.h" + +#include "files.h" +#include "visualiser.h" #include "xmlparse.h" @@ -51,7 +52,7 @@ static void print_tail_osm(void); static char *RFC822Date(time_t t); -static void print_usage(int detail); +static void print_usage(int detail,const char *argerr,const char *err); /*++++++++++++++++++++++++++++++++++++++ @@ -78,7 +79,7 @@ int main(int argc,char** argv) for(arg=1;argnumber); - printf("Number(super)=%9d\n",OSMNodes->snumber); + printf("Number =%9d\n",OSMNodes->file.number); + printf("Number(super)=%9d\n",OSMNodes->file.snumber); printf("\n"); - printf("Lat bins= %4d\n",OSMNodes->latbins); - printf("Lon bins= %4d\n",OSMNodes->lonbins); + printf("Lat bins= %4d\n",OSMNodes->file.latbins); + printf("Lon bins= %4d\n",OSMNodes->file.lonbins); printf("\n"); - printf("Lat zero=%5d (%8.4f deg)\n",OSMNodes->latzero,radians_to_degrees(latlong_to_radians(bin_to_latlong(OSMNodes->latzero)))); - printf("Lon zero=%5d (%8.4f deg)\n",OSMNodes->lonzero,radians_to_degrees(latlong_to_radians(bin_to_latlong(OSMNodes->lonzero)))); + printf("Lat zero=%5d (%8.4f deg)\n",OSMNodes->file.latzero,radians_to_degrees(latlong_to_radians(bin_to_latlong(OSMNodes->file.latzero)))); + printf("Lon zero=%5d (%8.4f deg)\n",OSMNodes->file.lonzero,radians_to_degrees(latlong_to_radians(bin_to_latlong(OSMNodes->file.lonzero)))); /* Examine the segments */ @@ -219,9 +211,9 @@ int main(int argc,char** argv) printf("\n"); printf("sizeof(Segment)=%9d Bytes\n",sizeof(Segment)); - printf("Number(total) =%9d\n",OSMSegments->number); - printf("Number(super) =%9d\n",OSMSegments->snumber); - printf("Number(normal) =%9d\n",OSMSegments->nnumber); + printf("Number(total) =%9d\n",OSMSegments->file.number); + printf("Number(super) =%9d\n",OSMSegments->file.snumber); + printf("Number(normal) =%9d\n",OSMSegments->file.nnumber); /* Examine the ways */ @@ -231,15 +223,15 @@ int main(int argc,char** argv) printf("\n"); printf("sizeof(Way) =%9d Bytes\n",sizeof(Way)); - printf("Number(compacted)=%9d\n",OSMWays->number); - printf("Number(original) =%9d\n",OSMWays->onumber); + printf("Number(compacted)=%9d\n",OSMWays->file.number); + printf("Number(original) =%9d\n",OSMWays->file.onumber); printf("\n"); - printf("Total names =%9ld Bytes\n",(long)buf.st_size-sizeof(Ways)-OSMWays->number*sizeof(Way)); + printf("Total names =%9ld Bytes\n",(long)buf.st_size-sizeof(Ways)-OSMWays->file.number*sizeof(Way)); printf("\n"); - printf("Included transports: %s\n",AllowedNameList(OSMWays->allow)); - printf("Included properties: %s\n",PropertiesNameList(OSMWays->props)); + printf("Included transports: %s\n",AllowedNameList(OSMWays->file.allow)); + printf("Included properties: %s\n",PropertiesNameList(OSMWays->file.props)); } /* Print out internal data */ @@ -251,45 +243,45 @@ int main(int argc,char** argv) for(arg=1;argnumber;item++) + for(item=0;itemfile.number;item++) print_node(OSMNodes,item); } else if(!strncmp(argv[arg],"--node=",7)) { item=atoi(&argv[arg][7]); - if(item>=0 && itemnumber) + if(item>=0 && itemfile.number) print_node(OSMNodes,item); else - printf("Invalid node number; minimum=0, maximum=%d.\n",OSMNodes->number-1); + printf("Invalid node number; minimum=0, maximum=%d.\n",OSMNodes->file.number-1); } else if(!strcmp(argv[arg],"--segment=all")) { - for(item=0;itemnumber;item++) + for(item=0;itemfile.number;item++) print_segment(OSMSegments,item); } else if(!strncmp(argv[arg],"--segment=",10)) { item=atoi(&argv[arg][10]); - if(item>=0 && itemnumber) + if(item>=0 && itemfile.number) print_segment(OSMSegments,item); else - printf("Invalid segment number; minimum=0, maximum=%d.\n",OSMSegments->number-1); + printf("Invalid segment number; minimum=0, maximum=%d.\n",OSMSegments->file.number-1); } else if(!strcmp(argv[arg],"--way=all")) { - for(item=0;itemnumber;item++) + for(item=0;itemfile.number;item++) print_way(OSMWays,item); } else if(!strncmp(argv[arg],"--way=",6)) { item=atoi(&argv[arg][6]); - if(item>=0 && itemnumber) + if(item>=0 && itemfile.number) print_way(OSMWays,item); else - printf("Invalid way number; minimum=0, maximum=%d.\n",OSMWays->number-1); + printf("Invalid way number; minimum=0, maximum=%d.\n",OSMWays->file.number-1); } } @@ -298,52 +290,53 @@ int main(int argc,char** argv) if(option_dump_osm) { if(coordcount>0 && coordcount!=4) - { - fprintf(stderr,"The --dump-osm option must have all of --latmin, --latmax, --lonmin, --lonmax or none.\n"); - exit(1); - } + print_usage(0,NULL,"The --dump-osm option must have all of --latmin, --latmax, --lonmin, --lonmax or none.\n"); print_head_osm(); if(coordcount) { - int32_t latminbin=latlong_to_bin(radians_to_latlong(latmin))-OSMNodes->latzero; - int32_t latmaxbin=latlong_to_bin(radians_to_latlong(latmax))-OSMNodes->latzero; - int32_t lonminbin=latlong_to_bin(radians_to_latlong(lonmin))-OSMNodes->lonzero; - int32_t lonmaxbin=latlong_to_bin(radians_to_latlong(lonmax))-OSMNodes->lonzero; + int32_t latminbin=latlong_to_bin(radians_to_latlong(latmin))-OSMNodes->file.latzero; + int32_t latmaxbin=latlong_to_bin(radians_to_latlong(latmax))-OSMNodes->file.latzero; + int32_t lonminbin=latlong_to_bin(radians_to_latlong(lonmin))-OSMNodes->file.lonzero; + int32_t lonmaxbin=latlong_to_bin(radians_to_latlong(lonmax))-OSMNodes->file.lonzero; int latb,lonb,llbin; - index_t node; + index_t item,index1,index2; /* Loop through all of the nodes. */ for(latb=latminbin;latb<=latmaxbin;latb++) for(lonb=lonminbin;lonb<=lonmaxbin;lonb++) { - llbin=lonb*OSMNodes->latbins+latb; + llbin=lonb*OSMNodes->file.latbins+latb; - if(llbin<0 || llbin>(OSMNodes->latbins*OSMNodes->lonbins)) + if(llbin<0 || llbin>(OSMNodes->file.latbins*OSMNodes->file.lonbins)) continue; - for(node=OSMNodes->offsets[llbin];nodeoffsets[llbin+1];node++) + index1=LookupNodeOffset(OSMNodes,llbin); + index2=LookupNodeOffset(OSMNodes,llbin+1); + + for(item=index1;itemlatzero+latb)+off_to_latlong(OSMNodes->nodes[node].latoffset)); - double lon=latlong_to_radians(bin_to_latlong(OSMNodes->lonzero+lonb)+off_to_latlong(OSMNodes->nodes[node].lonoffset)); + Node *node=LookupNode(OSMNodes,item,1); + double lat=latlong_to_radians(bin_to_latlong(OSMNodes->file.latzero+latb)+off_to_latlong(node->latoffset)); + double lon=latlong_to_radians(bin_to_latlong(OSMNodes->file.lonzero+lonb)+off_to_latlong(node->lonoffset)); if(lat>latmin && latlonmin && lonOtherNode(segment,node)) + if(item>OtherNode(segment,item)) if(!option_no_super || IsNormalSegment(segment)) print_segment_osm(OSMSegments,IndexSegment(OSMSegments,segment),OSMWays); - segment=NextSegment(OSMSegments,segment,node); + segment=NextSegment(OSMSegments,segment,item); } } } @@ -353,11 +346,11 @@ int main(int argc,char** argv) { index_t item; - for(item=0;itemnumber;item++) + for(item=0;itemfile.number;item++) print_node_osm(OSMNodes,item); - for(item=0;itemnumber;item++) - if(!option_no_super || IsNormalSegment(LookupSegment(OSMSegments,item))) + for(item=0;itemfile.number;item++) + if(!option_no_super || IsNormalSegment(LookupSegment(OSMSegments,item,1))) print_segment_osm(OSMSegments,item,OSMWays); } @@ -378,14 +371,15 @@ int main(int argc,char** argv) static void print_node(Nodes* nodes,index_t item) { - Node *node=LookupNode(nodes,item); + Node *node=LookupNode(nodes,item,1); double latitude,longitude; GetLatLong(nodes,item,&latitude,&longitude); printf("Node %d\n",item); - printf(" firstseg=%d\n",SEGMENT(node->firstseg)); + printf(" firstseg=%d\n",node->firstseg); printf(" latoffset=%d lonoffset=%d (latitude=%.6f longitude=%.6f)\n",node->latoffset,node->lonoffset,radians_to_degrees(latitude),radians_to_degrees(longitude)); + printf(" allow=%02x (%s)\n",node->allow,AllowedNameList(node->allow)); if(IsSuperNode(nodes,item)) printf(" Super-Node\n"); } @@ -401,7 +395,7 @@ static void print_node(Nodes* nodes,index_t item) static void print_segment(Segments *segments,index_t item) { - Segment *segment=LookupSegment(segments,item); + Segment *segment=LookupSegment(segments,item,1); printf("Segment %d\n",item); printf(" node1=%d node2=%d\n",segment->node1,segment->node2); @@ -429,10 +423,11 @@ static void print_segment(Segments *segments,index_t item) static void print_way(Ways *ways,index_t item) { - Way *way=LookupWay(ways,item); + Way *way=LookupWay(ways,item,1); printf("Way %d\n",item); - printf(" name=%s\n",WayNameHighway(ways,way)); + if(*WayName(ways,way)) + printf(" name=%s\n",WayName(ways,way)); printf(" type=%02x (%s%s%s)\n",way->type,HighwayName(HIGHWAY(way->type)),way->type&Way_OneWay?",One-Way":"",way->type&Way_Roundabout?",Roundabout":""); printf(" allow=%02x (%s)\n",way->allow,AllowedNameList(way->allow)); if(way->props) @@ -471,14 +466,22 @@ static void print_head_osm(void) static void print_node_osm(Nodes* nodes,index_t item) { + Node *node=LookupNode(nodes,item,1); double latitude,longitude; GetLatLong(nodes,item,&latitude,&longitude); if(IsSuperNode(nodes,item)) { + int i; + printf(" \n",(unsigned long)item+1,radians_to_degrees(latitude),radians_to_degrees(longitude)); printf(" \n"); + + for(i=1;iallow & ALLOWED(i))) + printf(" \n",TransportName(i)); + printf(" \n"); } else @@ -498,8 +501,8 @@ static void print_node_osm(Nodes* nodes,index_t item) static void print_segment_osm(Segments *segments,index_t item,Ways *ways) { - Segment *segment=LookupSegment(segments,item); - Way *way=LookupWay(ways,segment->way); + Segment *segment=LookupSegment(segments,item,1); + Way *way=LookupWay(ways,segment->way,1); int i; printf(" \n",(unsigned long)item+1); @@ -527,8 +530,8 @@ static void print_segment_osm(Segments *segments,index_t item,Ways *ways) printf(" \n",HighwayName(HIGHWAY(way->type))); - if(IsNormalSegment(segment) && WayNamed(ways,way)) - printf(" \n",ParseXML_Encode_Safe_XML(WayNameHighway(ways,way))); + if(IsNormalSegment(segment) && *WayName(ways,way)) + printf(" \n",ParseXML_Encode_Safe_XML(WayName(ways,way))); for(i=1;iallow & ALLOWED(i)) @@ -612,9 +615,13 @@ static char *RFC822Date(time_t t) Print out the usage information. int detail The level of detail to use - 0 = low, 1 = high. + + const char *argerr The argument that gave the error (if there is one). + + const char *err Other error message (if there is one). ++++++++++++++++++++++++++++++++++++++*/ -static void print_usage(int detail) +static void print_usage(int detail,const char *argerr,const char *err) { fprintf(stderr, "Usage: filedumper [--help]\n" @@ -630,6 +637,16 @@ static void print_usage(int detail) " [--latmin= --latmax=\n" " --lonmin= --lonmax=]]\n"); + if(argerr) + fprintf(stderr, + "\n" + "Error with command line parameter: %s\n",argerr); + + if(err) + fprintf(stderr, + "\n" + "Error: %s\n",err); + if(detail) fprintf(stderr, "\n"