ReactOS 0.4.15-dev-7942-gd23573b
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
20char *optchars = "bcd:fFhl:L:mMP:rsS:tTuUvz:";
21int opt_buffered = 0; // -b
22int opt_help = 0; // -h
23int opt_force = 0; // -f
24int opt_exit = 0; // -e
25int opt_verbose = 0; // -v
26int opt_console = 0; // -c
27int opt_mark = 0; // -m
28int opt_Mark = 0; // -M
29char *opt_Pipe = NULL; // -P
30int opt_quit = 0; // -q (cli only)
31int opt_cli = 0; // (cli internal)
32int opt_raw = 0; // -r
33int opt_stats = 0; // -s
34int opt_Source = 0; // -S <opt_Source>[+<opt_SrcPlus>][,<sources_path>]
35int opt_SrcPlus = 0; // -S <opt_Source>[+<opt_SrcPlus>][,<sources_path>]
36int opt_twice = 0; // -t
37int opt_Twice = 0; // -T
38int opt_undo = 0; // -u
39int opt_redo = 0; // -U
40char opt_dir[PATH_MAX]; // -d <opt_dir>
41char opt_logFile[PATH_MAX]; // -l|L <opt_logFile>
42char *opt_mod = NULL; // -mod for opt_logFile
43char opt_7z[PATH_MAX]; // -z <opt_7z>
44char opt_scanned[LINESIZE]; // all scanned options
45char opt_SourcesPath[LINESIZE]; //sources path
46
47/* optionInit returns 0 for normal operation, and -1 in case just "loglines.exe" was written.
48In such case, the help is shown */
49
50int optionInit(int argc, const char **argv)
51{
52 int i;
53 char *s;
54
55 opt_mod = "a";
56 strcpy(opt_dir, "");
60 if ((s = getenv(SOURCES_ENV)))
62
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':
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
112int 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++;
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++;
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 */
static int argc
Definition: ServiceArgs.c:12
char * strcat(char *DstString, const char *SrcString)
Definition: utclib.c:568
char * strcpy(char *DstString, const char *SrcString)
Definition: utclib.c:388
#define PATH_MAX
Definition: types.h:280
int getopt(int nargc, char *const *nargv, const char *ostr)
Definition: getopt.c:55
const char * optarg
Definition: getopt.c:49
#define LINESIZE
Definition: chargen.c:18
#define malloc
Definition: debug_ros.c:4
#define NULL
Definition: types.h:112
GLdouble s
Definition: gl.h:2039
GLsizeiptr const GLvoid GLenum usage
Definition: glext.h:5919
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
_Check_return_ _CRTIMP int __cdecl sscanf(_In_z_ const char *_Src, _In_z_ _Scanf_format_string_ const char *_Format,...)
_Check_return_ char *__cdecl getenv(_In_z_ const char *_VarName)
#define argv
Definition: mplay32.c:18
#define PATH_STR
Definition: compat.h:31
#define SOURCES_ENV
Definition: config.h:9
#define DEF_OPT_DIR
Definition: config.h:8
#define CMD_7Z
Definition: config.h:18
int opt_undo
Definition: options.c:38
char opt_SourcesPath[LINESIZE]
Definition: options.c:45
int opt_cli
Definition: options.c:31
char * opt_Pipe
Definition: options.c:29
int opt_help
Definition: options.c:22
char * opt_mod
Definition: options.c:42
int opt_redo
Definition: options.c:39
int opt_SrcPlus
Definition: options.c:35
int opt_raw
Definition: options.c:32
int opt_verbose
Definition: options.c:25
char * optchars
Definition: options.c:20
int optionParse(int argc, const char **argv)
Definition: options.c:112
int opt_force
Definition: options.c:23
char opt_scanned[LINESIZE]
Definition: options.c:44
int opt_quit
Definition: options.c:30
char opt_dir[PATH_MAX]
Definition: options.c:40
int opt_mark
Definition: options.c:27
int opt_Mark
Definition: options.c:28
int opt_twice
Definition: options.c:36
char opt_7z[PATH_MAX]
Definition: options.c:43
int optionInit(int argc, const char **argv)
Definition: options.c:50
int opt_console
Definition: options.c:26
int opt_stats
Definition: options.c:33
int opt_buffered
Definition: options.c:21
char opt_logFile[PATH_MAX]
Definition: options.c:41
int opt_exit
Definition: options.c:24
int opt_Source
Definition: options.c:34
int opt_Twice
Definition: options.c:37
#define l2l_dbg(level,...)
Definition: util.h:35