From 72733e8203654cd26464c8c5a6c955b025102cca Mon Sep 17 00:00:00 2001 From: Stefan Majewsky Date: Tue, 2 May 2017 21:22:20 +0200 Subject: restructure rtree into gofu (with rtree as the first applet) --- pkg/util/util.go | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 pkg/util/util.go (limited to 'pkg/util/util.go') diff --git a/pkg/util/util.go b/pkg/util/util.go new file mode 100644 index 0000000..3c5e724 --- /dev/null +++ b/pkg/util/util.go @@ -0,0 +1,90 @@ +/******************************************************************************* +* +* Copyright 2017 Stefan Majewsky +* +* This program is free software: you can redistribute it and/or modify it under +* the terms of the GNU General Public License as published by the Free Software +* Foundation, either version 3 of the License, or (at your option) any later +* version. +* +* This program is distributed in the hope that it will be useful, but WITHOUT ANY +* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +* A PARTICULAR PURPOSE. See the GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License along with +* this program. If not, see . +* +*******************************************************************************/ + +package util + +import ( + "bufio" + "fmt" + "os" + "sort" + "strings" +) + +//ShowSorted sorts the given lines and prints them on stdout. +func ShowSorted(lines []string) { + sort.Strings(lines) + fmt.Println(strings.Join(lines, "\n")) +} + +//ShowError prints the given error on stderr if it is non-nil, or returns false otherwise. +func ShowError(err error) bool { + if err == nil { + return false + } + fmt.Fprintf(os.Stderr, "ERROR: %s\n", err.Error()) + return true +} + +//FatalIfError prints the given error on stderr and exits with an error code. +func FatalIfError(err error) { + if err != nil { + fmt.Fprintf(os.Stderr, "FATAL: %s\n", err.Error()) + os.Exit(255) + } +} + +var stdin = bufio.NewReader(os.Stdin) + +//Prompt prints the question, then waits for the user to press one of the +//possible answer keys. Answer keys will automatically be converted to lower +//case and returned as such. +// +// choice := Prompt("(y)es or (n)o", []string{"y","n"}) +// //choice is either "y" or "n" +func Prompt(question string, answers []string) string { + for idx, answer := range answers { + answers[idx] = strings.ToLower(answer) + } + + os.Stdout.Write([]byte(">> " + strings.TrimSpace(question) + " ")) + for { + input, err := stdin.ReadString('\n') + FatalIfError(err) + input = strings.TrimSpace(input) + for _, answer := range answers { + if strings.ToLower(input) == answer { + return answer + } + } + + //user typed gibberish - ask again + os.Stdout.Write([]byte("Please type ")) + for idx, answer := range answers { + if idx > 0 { + if idx == len(answers)-1 { + os.Stdout.Write([]byte(" or ")) + } else { + os.Stdout.Write([]byte(", ")) + } + } + os.Stdout.Write([]byte("'" + answer + "'")) + } + os.Stdout.Write([]byte(": ")) + } +} -- cgit v1.3.1