-
Notifications
You must be signed in to change notification settings - Fork 0
/
options.c
88 lines (81 loc) · 2.41 KB
/
options.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <getopt.h>
#include "password.h"
static void printHelp(FILE *std) {
fprintf(std,
"Usage: mm2pwd [option]\n\n"
"[--etanks <number>]\n\n"
"Defeated robot master:\n"
"\t[--airman]\n"
"\t[--bubbleman]\n"
"\t[--crashman]\n"
"\t[--flashman]\n"
"\t[--heatman]\n"
"\t[--metalman]\n"
"\t[--quickman]\n"
"\t[--woodman]\n\n"
"--debug\t Print password as hex integer only\n"
"--help\t Print help text\n"
);
}
int main(int argc, char** argv) {
struct options config = {
.etanks = 2,
// beaten = 0, alive = 1
.airman = 1,
.bubbleman = 1,
.crashman = 1,
.flashman = 1,
.heatman = 1,
.metalman = 1,
.woodman = 1,
.quickman = 1,
.debug = 0
};
struct option longopts[] = { // FIXME get_longopt is non-POSIX
{ "airman", no_argument, &config.airman, 0 },
{ "bubbleman", no_argument, &config.bubbleman, 0 }, // no_argument == 0
{ "crashman", no_argument, &config.crashman, 0 },
{ "flashman", no_argument, &config.flashman, 0 },
{ "heatman", no_argument, &config.heatman, 0 },
{ "metalman", no_argument, &config.metalman, 0 },
{ "quickman", no_argument, &config.quickman, 0 },
{ "woodman", no_argument, &config.woodman, 0 },
{ "etanks", required_argument, NULL, 'e' },
{ "debug", no_argument, NULL, 'd' },
{ "help", no_argument, NULL, 'h' },
{ 0, 0, 0, 0 }
};
char ch;
while ( (ch = getopt_long(argc, argv, "", longopts, NULL)) != -1) {
switch (ch) {
case 'd':
config.debug = 1;
break;
case 'e':
config.etanks = atoi(optarg);
break;
case 'h':
printHelp(stdout);
return 0;
case '?':
printHelp(stderr);
return -1;
break;
case 0: // getopt_long set a variable, just keep going
break;
}
}
if (argc == 1) {
printHelp(stderr);
return -1;
}
if (config.etanks > MAX_ETANKS || config.etanks < MIN_ETANKS) {
fprintf(stderr, "Invalid number of etanks: 0-4 allowed\n");
return -1;
}
generatePassword(&config);
return 0;
}