source: tags/1.2/disparmmain.cpp @ 5

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

willem

File size: 4.1 KB
Line 
1#include <iostream>
2#include <getopt.h>
3#include <stdlib.h>
4#include <libgen.h>
5#include "tofromstring.h"
6#include "disparm.h"
7#include "version.h"
8
9void usage()
10{
11  disparm d=disparm();
12  std::cerr << "Usage:" << std::endl;
13
14  std::cerr << programname << " -h,--help : this message" << std::endl;
15  std::cerr << programname << " -c,--create [-p,--pool POOL] [-i,--input   INPUTFILE]" << std::endl;
16  std::cerr << programname << " -n,--next   [-p,--pool POOL] [-d --lockdir LOCKDIR  ] [-k,--key KEY] [-m,--max MAX]" << std::endl;
17  std::cerr << programname << " -r,--ready  [-p,--pool POOL] [-d --lockdir LOCKDIR  ] [-k,--key KEY]" << std::endl;
18  std::cerr << programname << " -s,--stats  [-p,--pool POOL] [-d --lockdir LOCKDIR  ]" << std::endl;
19  std::cerr << programname << " -u,--unhandled  [-p,--pool POOL] [-d --lockdir LOCKDIR  ]" << std::endl;
20  std::cerr << programname << " -v,--version" << std::endl;
21  std::cerr << "Defaults:" << std::endl;
22  std::cerr << "  POOL     : " << d.defpath_pool << std::endl;
23  std::cerr << "  LOCKDIR  : " << d.defpath_lockdir  << std::endl;
24  std::cerr << "  MAX      : " << "1" << std::endl;
25  std::cerr << "  INPUTFILE: " << d.definputfilename;
26  if (d.definputfilename == "-")
27    std::cerr << " (standard input)";
28  std::cerr << std::endl;
29}
30
31int main(int argc, char*argv[])
32{
33  disparm disparmthing=disparm();
34  bool nextflag       = 0;
35  bool createflag     = 0;
36  bool readyflag      = 0;
37  bool REMOVEFLAG     = 0;
38  bool statsflag      = 0;
39  bool unhandledflag  = 0;
40  bool lockdirset     = 0;
41
42  disparmthing.setarg(argc,argv);
43
44  while(1)
45  {
46    static struct option long_options[] =
47    {
48      {"help",     0, 0, 'h'},
49      {"pool",     1, 0, 'p'},
50      {"create",   0, 0, 'c'},
51      {"input",    1, 0, 'i'},
52      {"next",     0, 0, 'n'},
53      {"max",      1, 0, 'm'},
54      {"ready",    0, 0, 'r'},
55      {"stats",    0, 0, 's'},
56      {"lockdir",  1, 0, 'd'},
57      {"key",      1, 0, 'k'},
58      {"REMOVE",   0, 0, 'R'},
59      {"unhandled",0, 0, 'u'},
60      {"debug",    0, 0, 'D'},
61      {"version",  0, 0, 'v'},
62      {0,          0, 0, 0}
63    };
64    int c = getopt_long(argc,argv,"hp:ci:nm:rsuDvd:k:R",long_options,0);
65    if (c == -1)
66    {
67      if (optind < argc)  // unexpected extra argument
68      {
69        std::cerr << programname << ": Unexpected argument:" << argv[optind] << std::endl;
70        return 1;
71      }
72      break;
73    }
74    if ( c == '?' || c == ':' )
75    {
76      std::cerr << "Invalid parameter, try "<< argv[0]<<" --help " <<std::endl;
77      return 1;
78    }
79    switch(c)
80    {
81      case 'h':
82        usage();
83        break;
84      case 'p':
85        disparmthing.setpath_pool(std::string(optarg));
86        if (!lockdirset)
87        {
88          std::string d = dirname(optarg);
89          int rc = disparmthing.setpath_lockdir(d);
90          if (rc != 0)
91          {
92            std::cerr << programname << ": Cannot create directory '"<< d << "'" << std::endl;
93            return 1;
94          }
95        }
96        break;
97      case 'c':
98        createflag = 1;
99        break;
100      case 'k':
101        disparmthing.setkey(from_string <long long>(optarg));
102        break;
103      case 'i':
104         disparmthing.setinputfilename(std::string(optarg));
105        break;
106      case 'n':
107        nextflag = 1;
108        break;
109      case 'm':
110        disparmthing.setmaxiter(atoi(optarg));
111        break;
112      case 'r':
113        readyflag = 1;
114        break;
115      case 'R':
116        REMOVEFLAG = 1;
117        break;
118      case 's':
119        statsflag = 1;
120        break;
121      case 'd':
122        {
123          int rc = disparmthing.setpath_lockdir(std::string(optarg));
124          if (rc != 0)
125          {
126            std::cerr << programname << ": Cannot create directory '"<<optarg<<"'"<<std::endl;
127            return 1;
128          }
129        }
130        lockdirset = 1;
131        break;
132      case 'u':
133        unhandledflag = 1;
134        break;
135      case 'D':
136        disparmthing.setdebug();
137        break;
138      case 'v':
139        std::cerr << programversion << std::endl;
140        break;
141    }
142  }
143
144  int rc=0;
145  if(createflag)
146  {
147    std::string s;
148    rc |= disparmthing.create(s);
149    std::cout << s;
150    if (rc != 0)
151      exit(1);
152  }
153  if(nextflag)
154  {
155    std::string s;
156    rc |= disparmthing.next(s);
157    std::cout << s;
158  }
159  if(readyflag)
160  {
161    rc |= disparmthing.ready();
162  }
163  if(REMOVEFLAG)
164  {
165    rc |= disparmthing.REMOVE();
166  }
167  if(statsflag)
168  {
169    std::cerr << disparmthing << std::endl;
170  }
171  if(unhandledflag)
172  {
173    rc |=disparmthing.echounhandled();
174  }
175  return rc;
176}
Note: See TracBrowser for help on using the repository browser.