3 * Written by Jan Roeloffzen
5 * - Option init and parsing
17 #include "log2lines.h"
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
49 /* optionInit returns 0 for normal operation, and -1 in case just "loglines.exe" was written.
50 In such case, the help is shown */
52 int optionInit(int argc
, const char **argv
)
59 strcpy(opt_logFile
, "");
60 strcpy(opt_7z
, CMD_7Z
);
61 strcpy(opt_SourcesPath
, "");
62 if ((s
= getenv(SOURCES_ENV
)))
63 strcpy(opt_SourcesPath
, s
);
64 revinfo
.rev
= getRevision(NULL
, 1);
65 revinfo
.range
= DEF_RANGE
;
66 revinfo
.buildrev
= getTBRevision(opt_dir
);
67 l2l_dbg(1, "Trunk build revision: %d\n", revinfo
.buildrev
);
69 strcpy(opt_scanned
, "");
71 //The user introduced "log2lines.exe" or "log2lines.exe /?"
74 ((argc
== 2) && (argv
[1][0] == '/') && (argv
[1][1] == '?')))
81 for (i
= 1; i
< argc
; i
++)
84 if ((argv
[i
][0] == '-') && (i
+1 < argc
))
86 //Because these arguments can contain spaces we cant use getopt(), a known bug:
90 strcpy(opt_dir
, argv
[i
+1]);
96 strcpy(opt_logFile
, argv
[i
+1]);
100 opt_Pipe
= malloc(LINESIZE
);
101 strcpy(opt_Pipe
, argv
[i
+1]);
104 strcpy(opt_7z
, argv
[i
+1]);
109 strcat(opt_scanned
, argv
[i
]);
110 strcat(opt_scanned
, " ");
113 l2l_dbg(4,"opt_scanned=[%s]\n",opt_scanned
);
118 int optionParse(int argc
, const char **argv
)
124 while (-1 != (opt
= getopt(argc
, (char **const)argv
, optchars
)))
136 //just count, see optionInit()
152 //just count, see optionInit()
165 //just count, see optionInit()
170 opt_Revision
= malloc(LINESIZE
);
171 sscanf(optarg
, "%s", opt_Revision
);
172 if (strcmp(opt_Revision
, "check") == 0)
173 opt_Revision_check
++;
180 i
= sscanf(optarg
, "%d+%d,%s", &opt_Source
, &opt_SrcPlus
, opt_SourcesPath
);
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
);
186 /* need to retranslate for source info: */
189 opt_Revision_check
++;
211 strcpy(opt_7z
, optarg
);
222 l2l_dbg(2, "Note: use 's' command in console mode. Statistics option disabled\n");
225 if (opt_SourcesPath
[0])
227 strcat(opt_SourcesPath
, PATH_STR
);
231 strcpy(opt_dir
, opt_SourcesPath
);
232 strcat(opt_dir
, DEF_OPT_DIR
);