source: trunk/disparmmain.cpp @ 4

Last change on this file since 4 was 4, checked in by willem, 11 years ago

willem

File size: 4.7 KB
Line 
1/*
2   Copyright 2012 Willem Vermin, SARA
3
4   Licensed under the Apache License, Version 2.0 (the "License");
5   you may not use this file except in compliance with the License.
6   You may obtain a copy of the License at
7
8       http://www.apache.org/licenses/LICENSE-2.0
9
10   Unless required by applicable law or agreed to in writing, software
11   distributed under the License is distributed on an "AS IS" BASIS,
12   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   See the License for the specific language governing permissions and
14   limitations under the License.
15 */
16
17#include <iostream>
18#include <getopt.h>
19#include <stdlib.h>
20#include <libgen.h>
21#include "tofromstring.h"
22#include "disparm.h"
23#include "version.h"
24
25void usage()
26{
27  disparm d=disparm();
28  std::cerr << "Usage:" << std::endl;
29
30  std::cerr << programname << " -h,--help : this message" << std::endl;
31  std::cerr << programname << " -c,--create [-p,--pool POOL] [-i,--input   INPUTFILE]" << std::endl;
32  std::cerr << programname << " -n,--next   [-p,--pool POOL] [-d --lockdir LOCKDIR  ] [-k,--key KEY] [-m,--max MAX]" << std::endl;
33  std::cerr << programname << " -r,--ready  [-p,--pool POOL] [-d --lockdir LOCKDIR  ] [-k,--key KEY]" << std::endl;
34  std::cerr << programname << " -s,--stats  [-p,--pool POOL] [-d --lockdir LOCKDIR  ]" << std::endl;
35  std::cerr << programname << " -u,--unhandled  [-p,--pool POOL] [-d --lockdir LOCKDIR  ]" << std::endl;
36  std::cerr << programname << " -v,--version" << std::endl;
37  std::cerr << "Defaults:" << std::endl;
38  std::cerr << "  POOL     : " << d.defpath_pool << std::endl;
39  std::cerr << "  LOCKDIR  : " << d.defpath_lockdir  << std::endl;
40  std::cerr << "  MAX      : " << "1" << std::endl;
41  std::cerr << "  INPUTFILE: " << d.definputfilename;
42  if (d.definputfilename == "-")
43    std::cerr << " (standard input)";
44  std::cerr << std::endl;
45}
46
47int main(int argc, char*argv[])
48{
49  disparm disparmthing=disparm();
50  bool nextflag       = 0;
51  bool createflag     = 0;
52  bool readyflag      = 0;
53  bool REMOVEFLAG     = 0;
54  bool statsflag      = 0;
55  bool unhandledflag  = 0;
56  bool lockdirset     = 0;
57
58  disparmthing.setarg(argc,argv);
59
60  while(1)
61  {
62    static struct option long_options[] =
63    {
64      {"help",     0, 0, 'h'},
65      {"pool",     1, 0, 'p'},
66      {"create",   0, 0, 'c'},
67      {"input",    1, 0, 'i'},
68      {"next",     0, 0, 'n'},
69      {"max",      1, 0, 'm'},
70      {"ready",    0, 0, 'r'},
71      {"stats",    0, 0, 's'},
72      {"lockdir",  1, 0, 'd'},
73      {"key",      1, 0, 'k'},
74      {"REMOVE",   0, 0, 'R'},
75      {"unhandled",0, 0, 'u'},
76      {"debug",    0, 0, 'D'},
77      {"version",  0, 0, 'v'},
78      {0,          0, 0, 0}
79    };
80    int c = getopt_long(argc,argv,"hp:ci:nm:rsuDvd:k:R",long_options,0);
81    if (c == -1)
82    {
83      if (optind < argc)  // unexpected extra argument
84      {
85        std::cerr << programname << ": Unexpected argument:" << argv[optind] << std::endl;
86        return 1;
87      }
88      break;
89    }
90    if ( c == '?' || c == ':' )
91    {
92      std::cerr << "Invalid parameter, try "<< argv[0]<<" --help " <<std::endl;
93      return 1;
94    }
95    switch(c)
96    {
97      case 'h':
98        usage();
99        break;
100      case 'p':
101        disparmthing.setpath_pool(std::string(optarg));
102        if (!lockdirset)
103        {
104          std::string d = dirname(optarg);
105          int rc = disparmthing.setpath_lockdir(d);
106          if (rc != 0)
107          {
108            std::cerr << programname << ": Cannot create directory '"<< d << "'" << std::endl;
109            return 1;
110          }
111        }
112        break;
113      case 'c':
114        createflag = 1;
115        break;
116      case 'k':
117        disparmthing.setkey(from_string <long long>(optarg));
118        break;
119      case 'i':
120         disparmthing.setinputfilename(std::string(optarg));
121        break;
122      case 'n':
123        nextflag = 1;
124        break;
125      case 'm':
126        disparmthing.setmaxiter(atoi(optarg));
127        break;
128      case 'r':
129        readyflag = 1;
130        break;
131      case 'R':
132        REMOVEFLAG = 1;
133        break;
134      case 's':
135        statsflag = 1;
136        break;
137      case 'd':
138        {
139          int rc = disparmthing.setpath_lockdir(std::string(optarg));
140          if (rc != 0)
141          {
142            std::cerr << programname << ": Cannot create directory '"<<optarg<<"'"<<std::endl;
143            return 1;
144          }
145        }
146        lockdirset = 1;
147        break;
148      case 'u':
149        unhandledflag = 1;
150        break;
151      case 'D':
152        disparmthing.setdebug();
153        break;
154      case 'v':
155        std::cerr << programversion << std::endl;
156        break;
157    }
158  }
159
160  int rc=0;
161  if(createflag)
162  {
163    std::string s;
164    rc |= disparmthing.create(s);
165    std::cout << s;
166    if (rc != 0)
167      exit(1);
168  }
169  if(nextflag)
170  {
171    std::string s;
172    rc |= disparmthing.next(s);
173    std::cout << s;
174  }
175  if(readyflag)
176  {
177    rc |= disparmthing.ready();
178  }
179  if(REMOVEFLAG)
180  {
181    rc |= disparmthing.REMOVE();
182  }
183  if(statsflag)
184  {
185    std::cerr << disparmthing << std::endl;
186  }
187  if(unhandledflag)
188  {
189    rc |=disparmthing.echounhandled();
190  }
191  return rc;
192}
Note: See TracBrowser for help on using the repository browser.