ReactOS  0.4.14-dev-323-g6fe6a88
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:rR:sS: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_Revision = NULL; // -R
41 int opt_Revision_check = 0; // -R check
42 char opt_dir[PATH_MAX]; // -d <opt_dir>
43 char opt_logFile[PATH_MAX]; // -l|L <opt_logFile>
44 char *opt_mod = NULL; // -mod for opt_logFile
45 char opt_7z[PATH_MAX]; // -z <opt_7z>
46 char opt_scanned[LINESIZE]; // all scanned options
47 char opt_SourcesPath[LINESIZE]; //sources path
48 
49 /* optionInit returns 0 for normal operation, and -1 in case just "loglines.exe" was written.
50 In such case, the help is shown */
51 
52 int optionInit(int argc, const char **argv)
53 {
54  int i;
55  char *s;
56 
57  opt_mod = "a";
58  strcpy(opt_dir, "");
59  strcpy(opt_logFile, "");
62  if ((s = getenv(SOURCES_ENV)))
67  l2l_dbg(1, "Trunk build revision: %d\n", revinfo.buildrev);
68 
69  strcpy(opt_scanned, "");
70 
71  //The user introduced "log2lines.exe" or "log2lines.exe /?"
72  //Let's help the user
73  if ((argc == 1) ||
74  ((argc == 2) && (argv[1][0] == '/') && (argv[1][1] == '?')))
75  {
76  opt_help++;
77  usage(1);
78  return -1;
79  }
80 
81  for (i = 1; i < argc; i++)
82  {
83 
84  if ((argv[i][0] == '-') && (i+1 < argc))
85  {
86  //Because these arguments can contain spaces we cant use getopt(), a known bug:
87  switch (argv[i][1])
88  {
89  case 'd':
90  strcpy(opt_dir, argv[i+1]);
91  break;
92  case 'L':
93  opt_mod = "w";
94  //fall through
95  case 'l':
96  strcpy(opt_logFile, argv[i+1]);
97  break;
98  case 'P':
99  if (!opt_Pipe)
101  strcpy(opt_Pipe, argv[i+1]);
102  break;
103  case 'z':
104  strcpy(opt_7z, argv[i+1]);
105  break;
106  }
107  }
108 
110  strcat(opt_scanned, " ");
111  }
112 
113  l2l_dbg(4,"opt_scanned=[%s]\n",opt_scanned);
114 
115  return 0;
116 }
117 
118 int optionParse(int argc, const char **argv)
119 {
120  int i;
121  int optCount = 0;
122  int opt;
123 
124  while (-1 != (opt = getopt(argc, (char **const)argv, optchars)))
125  {
126  switch (opt)
127  {
128  case 'b':
129  opt_buffered++;
130  break;
131  case 'c':
132  opt_console++;
133  break;
134  case 'd':
135  optCount++;
136  //just count, see optionInit()
137  break;
138  case 'f':
139  opt_force++;
140  break;
141  case 'h':
142  opt_help++;
143  usage(1);
144  return -1;
145  break;
146  case 'F':
147  opt_exit++;
148  opt_force++;
149  break;
150  case 'l':
151  optCount++;
152  //just count, see optionInit()
153  break;
154  case 'm':
155  opt_mark++;
156  break;
157  case 'M':
158  opt_Mark++;
159  break;
160  case 'r':
161  opt_raw++;
162  break;
163  case 'P':
164  optCount++;
165  //just count, see optionInit()
166  break;
167  case 'R':
168  optCount++;
169  if (!opt_Revision)
171  sscanf(optarg, "%s", opt_Revision);
172  if (strcmp(opt_Revision, "check") == 0)
174  break;
175  case 's':
176  opt_stats++;
177  break;
178  case 'S':
179  optCount++;
180  i = sscanf(optarg, "%d+%d,%s", &opt_Source, &opt_SrcPlus, opt_SourcesPath);
181  if (i == 1)
182  sscanf(optarg, "%*d,%s", opt_SourcesPath);
183  l2l_dbg(3, "Sources option parse result: %d+%d,\"%s\"\n", opt_Source, opt_SrcPlus, opt_SourcesPath);
184  if (opt_Source)
185  {
186  /* need to retranslate for source info: */
187  opt_undo++;
188  opt_redo++;
190  }
191  break;
192  case 't':
193  opt_twice++;
194  break;
195  case 'T':
196  opt_twice++;
197  opt_Twice++;
198  break;
199  case 'u':
200  opt_undo++;
201  break;
202  case 'U':
203  opt_undo++;
204  opt_redo++;
205  break;
206  case 'v':
207  opt_verbose++;
208  break;
209  case 'z':
210  optCount++;
211  strcpy(opt_7z, optarg);
212  break;
213  default:
214  usage(0);
215  return -2;
216  break;
217  }
218  optCount++;
219  }
220  if(opt_console)
221  {
222  l2l_dbg(2, "Note: use 's' command in console mode. Statistics option disabled\n");
223  opt_stats = 0;
224  }
225  if (opt_SourcesPath[0])
226  {
228  }
229  if (!opt_dir[0])
230  {
233  }
234 
235  return optCount;
236 }
237 
238 /* EOF */
int opt_Twice
Definition: options.c:37
int optionInit(int argc, const char **argv)
Definition: options.c:52
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:13
#define CMD_7Z
Definition: config.h:22
int opt_mark
Definition: options.c:27
int getRevision(char *fileName, int lastChanged)
Definition: revision.c:61
char opt_logFile[PATH_MAX]
Definition: options.c:43
#define argv
Definition: mplay32.c:18
char * opt_mod
Definition: options.c:44
char opt_scanned[LINESIZE]
Definition: options.c:46
int opt_Revision_check
Definition: options.c:41
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
REVINFO revinfo
Definition: log2lines.c:37
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:45
int opt_exit
Definition: options.c:24
int optionParse(int argc, const char **argv)
Definition: options.c:118
char * opt_Revision
Definition: options.c:40
#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
#define DEF_RANGE
Definition: config.h:10
_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 getTBRevision(char *fileName)
Definition: revision.c:96
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
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
#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:42
#define DEF_OPT_DIR
Definition: config.h:12
char opt_SourcesPath[LINESIZE]
Definition: options.c:47