diff options
Diffstat (limited to 'grus.go')
-rw-r--r-- | grus.go | 94 |
1 files changed, 59 insertions, 35 deletions
diff --git a/grus.go b/grus.go index f84d9a1..24714c4 100644 --- a/grus.go +++ b/grus.go @@ -16,11 +16,40 @@ func grus() { version := "v0.2.1" + // Print version if first argument is version. if os.Args[1] == "version" { fmt.Printf("Grus %s\n", version) os.Exit(0) } + // Define default environment variables. + envVar := make(map[string]bool) + envVar["GRUS_SEARCH_ALL"] = false + envVar["GRUS_ANAGRAMS"] = true + envVar["GRUS_STRICT_UNJUMBLE"] = false + envVar["GRUS_PRINT_PATH"] = false + + // Check environment variables. + for k, _ := range envVar { + env := os.Getenv(k) + if env == "false" || + env == "0" { + envVar[k] = false + } else if env == "true" || + env == "1" { + envVar[k] = true + } + } + + // Print environment variables if first argument is env. + if os.Args[1] == "env" { + for k, v := range envVar { + fmt.Printf("%s: %t\n", k, v) + } + os.Exit(0) + } + + // Define default dictionaries. dicts := []string{ "/usr/local/share/dict/words", "/usr/local/share/dict/web2", @@ -36,31 +65,10 @@ func grus() { dicts = append(os.Args[2:], dicts...) } - // Check if user has asked to search in all dictionaries. - searchAll := false - searchAllEnv := os.Getenv("GRUS_SEARCH_ALL") - if searchAllEnv == "true" || - searchAllEnv == "1" { - searchAll = true - } - - // Check if user wants anagrams. - anagrams := false - anagramsEnv := os.Getenv("GRUS_ANAGRAMS") - if anagramsEnv == "true" || - anagramsEnv == "1" { - anagrams = true - } + // We use this to record if the word was unjumbled. + unjumbled := false - // Check if user wants to print dictionary path. - printPath := false - printPathEnv := os.Getenv("GRUS_PRINT_PATH") - if printPathEnv == "true" || - printPathEnv == "1" { - printPath = true - } - - for _, dict := range dicts { + for k, dict := range dicts { if _, err := os.Stat(dict); err != nil && !os.IsNotExist(err) { // Error is not nil & also it's not path @@ -75,16 +83,15 @@ func grus() { } // Print path to dictionary if printPath is true. - if printPath { + if envVar["GRUS_PRINT_PATH"] { + if k != 0 { + fmt.Println() + } fmt.Println(dict) } file, err := os.Open(dict) panicOnErr(err) - defer file.Close() - - // We use this to record if the word was unjumbled. - unjumbled := false scanner := bufio.NewScanner(file) for scanner.Scan() { @@ -96,21 +103,38 @@ func grus() { fmt.Println(scanner.Text()) // If the user doesn't want anagrams // then exit the program. - if !anagrams { + if !envVar["GRUS_ANAGRAMS"] { os.Exit(0) } unjumbled = true } } panicOnErr(scanner.Err()) + file.Close() + + // If the user has asked to strictly unjumble then we + // cannot exit till it's unjumbled. + if envVar["GRUS_STRICT_UNJUMBLE"] && + !unjumbled { + // If user has asked to strictly unjumble & we + // haven't done that yet & this is the last + // dictionary then we've failed to unjumble it + // & the program must exit with a non-zero + // exit code. + if k == len(dicts)-1 { + os.Exit(1) + } - // If word was unjumbled & user hasn't asked to search - // in all dictionaries then exit the program otherwise - // keep searching in other dictionaries. - if unjumbled && - !searchAll { + // Cannot exit, must search next dictionary. + continue + } + + // If user hasn't asked to search all dictionaries + // then exit the program. + if !envVar["GRUS_SEARCH_ALL"] { os.Exit(0) } + } } |