-
Notifications
You must be signed in to change notification settings - Fork 1
/
args.v
63 lines (53 loc) · 1.12 KB
/
args.v
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
module main
import os
import os.cmdline
const all_options = [
'-b',
'-e',
'-n',
'-s',
'-t',
'-u',
'-h',
'-v',
]
fn handle_args() ([]string, Settings) {
// extract options and filenames
args := os.args.clone()[1..] // raw args
// filenames, includes '-' (stdin)
filenames := args.filter(!(it.starts_with('-') && it.bytes().len > 1))
// options, not including '-'
options_tmp := cmdline.only_options(args).filter(it != '-')
mut options := []string{}
// split '-eab' into '-e' '-'a', '-b'..
for option in options_tmp {
if option.len > 1 {
for o in option.split('')[1..] {
options.prepend('-$o')
}
}
}
// check for correct options
for option in options {
if option in all_options {
continue
} else {
panic('Unkown option $option')
}
}
// help, exit
if '-h' in options {
println('$help_text')
exit(0)
}
settings := Settings{
number_non_blank_lines: '-b' in options
print_dollar: '-e' in options
number_all: '-n' in options
squeze_blank_lines: '-s' in options
print_tab: '-t' in options
unbuffered: '-u' in options
non_printing: '-v' in options
}
return filenames, settings
}