[sosi2osm] 28/30: Add optional output file
Ruben Undheim
rubund-guest at moszumanska.debian.org
Sat Oct 4 13:07:57 UTC 2014
This is an automated email from the git hooks/post-receive script.
rubund-guest pushed a commit to branch upstream
in repository sosi2osm.
commit b8107c908ca3d72c9fdccfd1891fa125f25a71f0
Author: Knut Karevoll <gnonthgol at gmail.com>
Date: Thu Oct 2 11:21:52 2014 +0200
Add optional output file
---
node.cpp | 8 ++++----
sosi2osm.cpp | 47 ++++++++++++++++++++++++++++++-----------------
sosi2osm.h | 4 ++--
tag.cpp | 4 ++--
4 files changed, 38 insertions(+), 25 deletions(-)
diff --git a/node.cpp b/node.cpp
index 21155fa..0b2df95 100644
--- a/node.cpp
+++ b/node.cpp
@@ -83,15 +83,15 @@ long int createNodes(long int** ids) {
return size;
}
-void outputNode() {
+void outputNode(FILE* output) {
long int size;
double *lat, *lon;
getCoords(&size, &lat, &lon);
for (int i = 0; i < size; i++) {
- printf("<node id=\"%ld\" lat=\"%.7f\" lon=\"%.7f\" version=\"1\" visible=\"true\">\n", nodeId--, lat[i], lon[i]);
- outputTags();
- printf("</node>\n");
+ fprintf(output, "<node id=\"%ld\" lat=\"%.7f\" lon=\"%.7f\" version=\"1\" visible=\"true\">\n", nodeId--, lat[i], lon[i]);
+ outputTags(output);
+ fprintf(output, "</node>\n");
}
free(lat);
diff --git a/sosi2osm.cpp b/sosi2osm.cpp
index 10ae604..e6d7bda 100644
--- a/sosi2osm.cpp
+++ b/sosi2osm.cpp
@@ -6,7 +6,7 @@
char* execname;
void usage() {
- fprintf(stderr,"Usage: sosi2osm [sosi file] [lua file]\n");
+ fprintf(stderr,"Usage: sosi2osm <sosi file> <lua file> [output file]\n");
}
void handleHead() {
@@ -21,25 +21,25 @@ void handleHead() {
}
}
-void outputWay() {
+void outputWay(FILE* output) {
long int* nd;
long int size = createNodes(&nd);
- printf("<way id=\"%ld\" version=\"1\" visible=\"true\">", -getSOSIId());
- outputTags();
+ fprintf(output, "<way id=\"%ld\" version=\"1\" visible=\"true\">", -getSOSIId());
+ outputTags(output);
for (int i = 0; i < size; i++) {
- printf("<nd ref=\"%ld\" />", nd[i]);
+ fprintf(output, "<nd ref=\"%ld\" />", nd[i]);
}
- printf("</way>\n");
+ fprintf(output, "</way>\n");
free(nd);
}
-void outputRelation() {
- printf("<relation id=\"%ld\" version=\"1\" visible=\"true\">", -getSOSIId());
- outputTags();
+void outputRelation(FILE* output) {
+ fprintf(output, "<relation id=\"%ld\" version=\"1\" visible=\"true\">", -getSOSIId());
+ outputTags(output);
bool outer = true;
long refsLen = getSOSIRefsSize();
@@ -50,22 +50,34 @@ void outputRelation() {
else if (refs[i] == SLUTT_OY)
outer = true;
else
- printf("<member ref=\"%d\" role=\"%s\" type=\"way\"/>", -abs(refs[i]), outer?"outer":"inner");
+ fprintf(output, "<member ref=\"%d\" role=\"%s\" type=\"way\"/>", -abs(refs[i]), outer?"outer":"inner");
}
free(refs);
- printf("</relation>\n");
+ fprintf(output, "</relation>\n");
}
int main(int argc, char** args) {
- if (argc != 3) {
+ if (argc < 3 || argc > 4) {
usage();
return 1;
}
execname = args[0];
char* input_filename = args[1];
+ char* output_filename = "-";
+ if (argc > 3) output_filename = args[3];
+
+ FILE* output;
+ if (strcmp(output_filename, "-") == 0)
+ output = stdout;
+ else
+ output = fopen(output_filename, "w");
+ if (output == NULL) {
+ fprintf(stderr, "Could not open file for output '%s'\n", output_filename);
+ return 1;
+ }
loadLua(args[2]);
@@ -74,7 +86,7 @@ int main(int argc, char** args) {
return 1;
}
- printf("<?xml version=\"1.0\"?>\n"
+ fprintf(output, "<?xml version=\"1.0\"?>\n"
"<osm version=\"0.6\" upload=\"false\" generator=\"sosi2osm\">\n");
while (nextSOSIObject()) {
@@ -84,24 +96,25 @@ int main(int argc, char** args) {
handleHead();
break;
case L_FLATE:
- outputRelation();
+ outputRelation(output);
break;
case L_PUNKT:
case L_SYMBOL:
case L_TEKST:
- outputNode();
+ outputNode(output);
break;
case L_KURVE:
case L_LINJE:
case L_BUEP:
- outputWay();
+ outputWay(output);
break;
}
}
- printf("</osm>\n");
+ fprintf(output, "</osm>\n");
closeSOSI();
+ fclose(output);
return 0;
}
diff --git a/sosi2osm.h b/sosi2osm.h
index a23bbcf..82f6aab 100644
--- a/sosi2osm.h
+++ b/sosi2osm.h
@@ -20,11 +20,11 @@ long getSOSIRefsSize();
extern char* execname;
void setEncoding(char* encoding);
void loadLua(char* filename);
-void outputTags();
+void outputTags(FILE* output);
// Node
void setProjection(const char* proj);
long int createNodes(long int** ids);
-void outputNode();
+void outputNode(FILE* output);
diff --git a/tag.cpp b/tag.cpp
index b45ce3e..6fddc1d 100644
--- a/tag.cpp
+++ b/tag.cpp
@@ -117,7 +117,7 @@ void loadLua(char* filename) {
lua_setglobal(state, "getTagsFromInfoTable");
}
-void outputTags() {
+void outputTags(FILE* output) {
lua_getglobal(state, "getTagsFromInfoTable");
lua_newtable(state);
int size = 0;
@@ -144,7 +144,7 @@ void outputTags() {
}
const char* key = lua_tostring(state, -2);
const char* value = lua_tostring(state, -1);
- printf("<tag k=\"%s\" v=\"%s\"/>", key, value);
+ fprintf(output, "<tag k=\"%s\" v=\"%s\"/>", key, value);
lua_pop(state, 1);
}
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/sosi2osm.git
More information about the Pkg-grass-devel
mailing list