source: tags/1.0/disparmmain.cpp @ 5

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

willem

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