source: subversion/applications/utils/import/srtm2wayinfo/settings.cpp

Last change on this file was 16915, checked in by herm, 8 years ago

Support for different memory managment systems.

File size: 4.0 KB
Line 
1/* Copyright (c) 2009 Hermann Kraus
2 * This software is available under a "MIT Style" license
3 * (see COPYING).
4 */
5/** \file
6  * Handles command line parsing and stores the options.
7  */
8#include "settings.h"
9#include <getopt.h>
10#include <QDebug>
11
12/** Settings are global for the whole program. */
13Settings global_settings;
14
15/** Show usage instructions. */
16void Settings::usage()
17{
18    qWarning() <<
19    "Usage: srtm2wayinfo [OPTION]...\n"
20    "Add information about altitude differences to OSM data.\n"
21    "By default data is read from stdin and output goes to stdout.\n\n"
22   
23    "Example: bzcat planet.osm.bz2 | srtm2wayinfo | bzip2 > altitude.osm.bz2\n\n"
24   
25    "Mandatory arguments to long options are mandatory for short options too.\n"
26    "  -s, --srtm-server=URL      Changes the SRTM server's location.\n"
27    "                                You need to delete the cache dir first.\n"
28    "  -i, --input=FILE           Read data from file (default: stdin)\n"
29    "  -o, --output=FILE          Write data to file (default: stdout)\n"
30    "  -k, --keep                 Keep uncompressed SRTM tiles on disk\n"
31    "                                (uses more diskspace but less cpu time)\n"
32    "  -c, --cache=DIRECTORY      Directory in which the downloaded SRTM tiles\n"
33    "                                are cached.\n"
34    "  -S, --size=SIZE            Optimize data structures for a certain\n"
35    "                                size of the dataset. SIZE can be\n"
36    "                                - \"small\" (default, best for files < 300 MB)\n"
37    "                                - \"medium\" (300 MB - 2 GB)\n"
38    "                                - \"large\" (> 2 GB)\n";
39}
40
41/** Parses the command line and fills the settings structure.
42  *
43  * This function uses the getopt functions provided by glibc
44  * and has GNU style option handling.
45  */
46void Settings::parseSettings(int argc, char **argv)
47{
48    static struct option long_options[] =
49            {
50            {"srtm-server", required_argument, 0, 's'},
51            {"input",       required_argument, 0, 'i'},
52            {"output",      required_argument, 0, 'd'},
53            {"cache",       required_argument, 0, 'c'},
54            {"keep",        no_argument,       0, 'k'},
55            {"help",        no_argument,       0, 'h'},
56            {"size",        required_argument, 0, 'S'},
57            {0, 0, 0, 0}
58            };
59    while (1) {
60        int option_index = 0;
61        int c = getopt_long(argc, argv, "s:i:o:kzS:", long_options, &option_index);
62        if (c == -1) break;
63        switch (c) {
64            case 0:
65                break;
66            case '?':
67                usage();
68                exit(1);
69                break;
70            case 's':
71                srtm_server = optarg;
72                qDebug() << "Using SRTM server at" << srtm_server;
73                break;
74            case 'i':
75                input = optarg;
76                break;
77            case 'o':
78                output = optarg;
79                break;
80            case 'c':
81                cache_dir = optarg;
82                break;
83            case 'k':
84                store_uncompressed = true;
85                break;
86            case 'h':
87                usage();
88                exit(0);
89                break;
90            case 'S':
91                if (!strcasecmp(optarg, "large")) {
92                    size = size_large;
93                } else if (!strcmp(optarg, "medium")) {
94                    size = size_medium;
95                } else if (!strcmp(optarg, "small")) {
96                    size = size_small;
97                } else {
98                    qWarning() << "Size must be either \"small\", \"medium\" or \"large\"";
99                    usage();
100                    exit(1);
101                }
102                break;
103            default:
104                qCritical() << "Unhandled option" << c;
105        }
106    }
107    if (optind < argc) {
108        qCritical() << "Too many arguments.";
109        //Some arguments left
110        usage();
111        exit(1);
112    }
113}
Note: See TracBrowser for help on using the repository browser.