package main
import (
"errors"
"fmt"
"strconv"
"strings"
)
func ParseArgs(argv []string) (int, int, string, bool, error) {
length := 30
lines := 10
pattern := "a-zA-Z0-9"
help := false
var err error
set := 0
for i := 0; i < len(argv) && err == nil; i++ {
if (set&0b001) == 0 && argv[i][0:2] == "-s" {
set |= 0b001
if len(argv[i]) > 2 {
if argv[i][2] == '=' {
length, lines, err = parseLength(argv[i][3:])
} else {
length, lines, err = parseLength(argv[i][2:])
}
} else {
if i+1 == len(argv) {
err = errors.New("no argument specified for option -s")
} else {
length, lines, err = parseLength(argv[i+1])
i++
}
}
} else if (set&0b100) == 0 && (argv[i] == "-h" || argv[i] == "--help") {
set |= 0b100
help = true
} else if (set & 0b010) == 0 {
set |= 0b010
pattern = argv[i]
} else {
err = errors.New(fmt.Sprintf("unexpected argument %v", argv[i]))
}
}
if err != nil {
help = true
}
return length, lines, pattern, help, err
}
func parseLength(param string) (int, int, error) {
param = strings.ToLower(param)
if !strings.Contains(param, "x") {
param += "x1"
}
s := strings.Split(param, "x")
f := false
length, e := strconv.Atoi(s[0])
if e != nil {
f = true
}
lines, e := strconv.Atoi(s[1])
if e != nil || length < 1 || lines < 1 {
f = true
}
var err error
if f {
err = errors.New("invalid argument specified for option -s")
}
return length, lines, err
}