ReactOS  0.4.14-dev-1296-g56aa513
options.c
Go to the documentation of this file.
1 /*
2  * ReactOS log2lines
3  * Written by Jan Roeloffzen
4  *
5  * - Option init and parsing
6  */
7 
8 #include <stdio.h>
9 #include <stdlib.h>
10 #include <string.h>
11 #include <getopt.h>
12 
13 #include "util.h"
14 #include "compat.h"
15 #include "config.h"
16 #include "help.h"
17 #include "log2lines.h"
18 #include "options.h"
19 
20 char *optchars = "bcd:fFhl:L:mMP:rsS:tTuUvz:";
21 int opt_buffered = 0; // -b
22 int opt_help = 0; // -h
23 int opt_force = 0; // -f
24 int opt_exit = 0; // -e
25 int opt_verbose = 0; // -v
26 int opt_console = 0; // -c
27 int opt_mark = 0; // -m
28 int opt_Mark = 0; // -M
29 char *opt_Pipe = NULL; // -P
30 int opt_quit = 0; // -q (cli only)
31 int opt_cli = 0; // (cli internal)
32 int opt_raw = 0; // -r
33 int opt_stats = 0; // -s
34 int opt_Source = 0; // -S <opt_Source>[+<opt_SrcPlus>][,<sources_path>]
35 int opt_SrcPlus = 0; // -S <opt_Source>[+<opt_SrcPlus>][,<sources_path>]
36 int opt_twice = 0; // -t
37 int opt_Twice = 0; // -T
38 int opt_undo = 0; // -u
39 int opt_redo = 0; // -U
40 char opt_dir[PATH_MAX]; // -d <opt_dir>
41 char opt_logFile[PATH_MAX]; // -l|L <opt_logFile>
42 char *opt_mod = NULL; // -mod for opt_logFile
43 char opt_7z[PATH_MAX]; // -z <opt_7z>
44 char opt_scanned[LINESIZE]; // all scanned options
45 char opt_SourcesPath[LINESIZE]; //sources path
46 
47 /* optionInit returns 0 for normal operation, and -1 in case just "loglines.exe" was written.
48 In such case, the help is shown */
49 
50 int optionInit(int argc, const char **argv)
51 {
52  int i;
53  char *s;
54 
55  opt_mod = "a";
56  strcpy(opt_dir, "");
57  strcpy(opt_logFile, "");
60  if ((s = getenv(SOURCES_ENV)))
62 
63  strcpy(opt_scanned, "");
64 
65  //The user introduced "log2lines.exe" or "log2lines.exe /?"
66  //Let's help the user
67  if ((argc == 1) ||
68  ((argc == 2) && (argv[1][0] == '/') && (argv[1][1] == '?')))
69  {
70  opt_help++;
71  usage(1);
72  return -1;
73  }
74 
75  for (i = 1; i < argc; i++)
76  {
77 
78  if ((argv[i][0] == '-') && (i+1 < argc))
79  {
80  //Because these arguments can contain spaces we cant use getopt(), a known bug:
81  switch (argv[i][1])
82  {
83  case 'd':
84  strcpy(opt_dir, argv[i+1]);
85  break;
86  case 'L':
87  opt_mod = "w";
88  //fall through
89  case 'l':
90  strcpy(opt_logFile, argv[i+1]);
91  break;
92  case 'P':
93  if (!opt_Pipe)
95  strcpy(opt_Pipe, argv[i+1]);
96  break;
97  case 'z':
98  strcpy(opt_7z, argv[i+1]);
99  break;
100  }
101  }
102 
104  strcat(opt_scanned, " ");
105  }
106 
107  l2l_dbg(4,"opt_scanned=[%s]\n",opt_scanned);
108 
109  return 0;
110 }
111 
112 int optionParse(int argc, const char **argv)
113 {
114  int i;
115  int optCount = 0;
116  int opt;
117 
118  while (-1 != (opt = getopt(argc, (char **const)argv, optchars)))
119  {
120  switch (opt)
121  {
122  case 'b':
123  opt_buffered++;
124  break;
125  case 'c':
126  opt_console++;
127  break;
128  case 'd':
129  optCount++;
130  //just count, see optionInit()
131  break;
132  case 'f':
133  opt_force++;
134  break;
135  case 'h':
136  opt_help++;
137  usage(1);
138  return -1;
139  break;
140  case 'F':
141  opt_exit++;
142  opt_force++;
143  break;
144  case 'l':
145  optCount++;
146  //just count, see optionInit()
147  break;
148  case 'm':
149  opt_mark++;
150  break;
151  case 'M':
152  opt_Mark++;
153  break;
154  case 'r':
155  opt_raw++;
156  break;
157  case 'P':
158  optCount++;
159  //just count, see optionInit()
160  break;
161  case 's':
162  opt_stats++;
163  break;
164  case 'S':
165  optCount++;
166  i = sscanf(optarg, "%d+%d,%s", &opt_Source, &opt_SrcPlus, opt_SourcesPath);
167  if (i == 1)
168  sscanf(optarg, "%*d,%s", opt_SourcesPath);
169  l2l_dbg(3, "Sources option parse result: %d+%d,\"%s\"\n", opt_Source, opt_SrcPlus, opt_SourcesPath);
170  if (opt_Source)
171  {
172  /* need to retranslate for source info: */
173  opt_undo++;
174  opt_redo++;
175  }
176  break;
177  case 't':
178  opt_twice++;
179  break;
180  case 'T':
181  opt_twice++;
182  opt_Twice++;
183  break;
184  case 'u':
185  opt_undo++;
186  break;
187  case 'U':
188  opt_undo++;
189  opt_redo++;
190  break;
191  case 'v':
192  opt_verbose++;
193  break;
194  case 'z':
195  optCount++;
196  strcpy(opt_7z, optarg);
197  break;
198  default:
199  usage(0);
200  return -2;
201  break;
202  }
203  optCount++;
204  }
205  if(opt_console)
206  {
207  l2l_dbg(2, "Note: use 's' command in console mode. Statistics option disabled\n");
208  opt_stats = 0;
209  }
210  if (opt_SourcesPath[0])
211  {
213  }
214  if (!opt_dir[0])
215  {
218  }
219 
220  return optCount;
221 }
222 
223 /* EOF */
int opt_Twice
Definition: options.c:37
int optionInit(int argc, const char **argv)
Definition: options.c:50
int opt_twice
Definition: options.c:36
static int argc
Definition: ServiceArgs.c:12
char * strcat(char *DstString, const char *SrcString)
Definition: utclib.c:568
int opt_Mark
Definition: options.c:28
int opt_buffered
Definition: options.c:21
int opt_undo
Definition: options.c:38
int opt_raw
Definition: options.c:32
#define SOURCES_ENV
Definition: config.h:9
#define CMD_7Z
Definition: config.h:18
int opt_mark
Definition: options.c:27
char opt_logFile[PATH_MAX]
Definition: options.c:41
#define argv
Definition: mplay32.c:18
char * opt_mod
Definition: options.c:42
char opt_scanned[LINESIZE]
Definition: options.c:44
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
int opt_SrcPlus
Definition: options.c:35
#define l2l_dbg(level,...)
Definition: util.h:35
int opt_redo
Definition: options.c:39
int opt_force
Definition: options.c:23
smooth NULL
Definition: ftsmooth.c:416
char * opt_Pipe
Definition: options.c:29
_Check_return_ _CRTIMP int __cdecl sscanf(_In_z_ const char *_Src, _In_z_ _Scanf_format_string_ const char *_Format,...)
int opt_stats
Definition: options.c:33
char opt_7z[PATH_MAX]
Definition: options.c:43
int opt_exit
Definition: options.c:24
int optionParse(int argc, const char **argv)
Definition: options.c:112
#define PATH_MAX
Definition: types.h:280
int opt_Source
Definition: options.c:34
int getopt(int nargc, char *const *nargv, const char *ostr)
Definition: getopt.c:55
char * optchars
Definition: options.c:20
GLsizeiptr const GLvoid GLenum usage
Definition: glext.h:5919
GLdouble s
Definition: gl.h:2039
_Check_return_ char *__cdecl getenv(_In_z_ const char *_VarName)
const char * optarg
Definition: getopt.c:49
int opt_verbose
Definition: options.c:25
#define LINESIZE
Definition: chargen.c:18
int opt_cli
Definition: options.c:31
int opt_console
Definition: options.c:26
char * strcpy(char *DstString, const char *SrcString)
Definition: utclib.c:388
int opt_quit
Definition: options.c:30
#define malloc
Definition: debug_ros.c:4
int opt_help
Definition: options.c:22
#define PATH_STR
Definition: compat.h:27
char opt_dir[PATH_MAX]
Definition: options.c:40
#define DEF_OPT_DIR
Definition: config.h:8
char opt_SourcesPath[LINESIZE]
Definition: options.c:45