3 * Written by Jan Roeloffzen
5 * - Option init and parsing
17 #include "log2lines.h"
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
47 /* optionInit returns 0 for normal operation, and -1 in case just "loglines.exe" was written.
48 In such case, the help is shown */
50 int optionInit(int argc
, const char **argv
)
57 strcpy(opt_logFile
, "");
58 strcpy(opt_7z
, CMD_7Z
);
59 strcpy(opt_SourcesPath
, "");
60 if ((s
= getenv(SOURCES_ENV
)))
61 strcpy(opt_SourcesPath
, s
);
63 strcpy(opt_scanned
, "");
65 //The user introduced "log2lines.exe" or "log2lines.exe /?"
68 ((argc
== 2) && (argv
[1][0] == '/') && (argv
[1][1] == '?')))
75 for (i
= 1; i
< argc
; i
++)
78 if ((argv
[i
][0] == '-') && (i
+1 < argc
))
80 //Because these arguments can contain spaces we cant use getopt(), a known bug:
84 strcpy(opt_dir
, argv
[i
+1]);
90 strcpy(opt_logFile
, argv
[i
+1]);
94 opt_Pipe
= malloc(LINESIZE
);
95 strcpy(opt_Pipe
, argv
[i
+1]);
98 strcpy(opt_7z
, argv
[i
+1]);
103 strcat(opt_scanned
, argv
[i
]);
104 strcat(opt_scanned
, " ");
107 l2l_dbg(4,"opt_scanned=[%s]\n",opt_scanned
);
112 int optionParse(int argc
, const char **argv
)
118 while (-1 != (opt
= getopt(argc
, (char **const)argv
, optchars
)))
130 //just count, see optionInit()
146 //just count, see optionInit()
159 //just count, see optionInit()
166 i
= sscanf(optarg
, "%d+%d,%s", &opt_Source
, &opt_SrcPlus
, opt_SourcesPath
);
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
);
172 /* need to retranslate for source info: */
196 strcpy(opt_7z
, optarg
);
207 l2l_dbg(2, "Note: use 's' command in console mode. Statistics option disabled\n");
210 if (opt_SourcesPath
[0])
212 strcat(opt_SourcesPath
, PATH_STR
);
216 strcpy(opt_dir
, opt_SourcesPath
);
217 strcat(opt_dir
, DEF_OPT_DIR
);