summaryrefslogtreecommitdiff
path: root/utils.go
diff options
context:
space:
mode:
Diffstat (limited to 'utils.go')
-rw-r--r--utils.go308
1 files changed, 172 insertions, 136 deletions
diff --git a/utils.go b/utils.go
index 0d22813..9d6fc91 100644
--- a/utils.go
+++ b/utils.go
@@ -1,180 +1,216 @@
package main
import (
- "fmt"
- "bufio"
- "os"
- "os/exec"
- "math"
- "strings"
- "strconv"
- "runtime"
+ "bufio"
+ "fmt"
+ "math"
+ "os"
+ "os/exec"
+ "runtime"
+ "strconv"
+ "strings"
+ "unicode/utf8"
)
+const (
+ framewidth int = 40
+ li = "\u2501"
+ mli = "\u2501\u252f\u2501\u2501" //Masterline -T-
+ sli = " \u251c\u2500 " //Slave Line L_
+ nli = " \u2502 " //noone Line |
+ fli = " \u2515\u2501\u2501" //Footer Line L
+)
+
+func frame(text string, head bool) (out string) {
+ if head {
+ out = mli + text
+ }else{
+ out = fli + text
+ }
+ n := utf8.RuneCountInString(out)
+ r := framewidth - n
+ if r < 1 {
+ out = out + li
+ }else{
+ out = out + strings.Repeat(li,r)
+ }
+ if head {
+ out = "\n" + out
+ }else{
+ out = out + "\n"
+ }
+ return
+}
+
func getGitTag() string {
- var (
- cmdOut []byte
- err error
- )
- cmd := "git"
- args := []string{"tag","--points-at","HEAD"}
- if cmdOut,err = exec.Command(cmd,args...).Output(); err != nil {
- panic(err)
- }
- return string(cmdOut)
+ var (
+ cmdOut []byte
+ err error
+ )
+ cmd := "git"
+ args := []string{"tag", "--points-at", "HEAD"}
+ if cmdOut, err = exec.Command(cmd, args...).Output(); err != nil {
+ panic(err)
+ }
+ return string(cmdOut)
}
//Remove a string from a []string and the int number of strings afterwards
-func removeStringFromArray(arr []string,rem string,after int) (out []string) {
- found := false
- i := 0
- for _,st := range arr {
- if found {
- if i < after {
- i++
- }else{
- found = false
- }
- }else{
- if st == rem {
- found = true
- }else{
- out = append(out,st)
- }
- }
- }
- return
+func removeStringFromArray(arr []string, rem string, after int) (out []string) {
+ found := false
+ i := 0
+ for _, st := range arr {
+ if found {
+ if i < after {
+ i++
+ } else {
+ found = false
+ }
+ } else {
+ if st == rem {
+ found = true
+ } else {
+ out = append(out, st)
+ }
+ }
+ }
+ return
}
+//Ask a Question an read the answer
func isSure(quest string) bool {
- fmt.Printf("%s (type 'y/Y/yes' to confirm) : ",quest)
- in := bufio.NewReader(os.Stdin)
- line, err := in.ReadString('\n')
- if(runtime.GOOS == "windows"){
- line = strings.TrimSuffix(line, "\r\n") //for Windows
- }else{
- line = strings.TrimSuffix(line, "\n")
- }
- checkErr(err)
-
- if ( line == "yes" || line == "y" || line == "Y") {
- return true
- } else {
- return false
- }
+ fmt.Printf("%s (type 'y/Y/yes' to confirm) : ", quest)
+ in := bufio.NewReader(os.Stdin)
+ line, err := in.ReadString('\n')
+ if runtime.GOOS == "windows" {
+ line = strings.TrimSuffix(line, "\r\n") //for Windows
+ } else {
+ line = strings.TrimSuffix(line, "\n")
+ }
+ checkErr(err)
+
+ if line == "yes" || line == "y" || line == "Y" {
+ return true
+ } else {
+ return false
+ }
}
+//Test if error is nil and panic if not
+//TODO log seperately
func checkErr(err error) {
- if err != nil {
- panic(err)
- }
+ if err != nil {
+ panic(err)
+ }
}
//make One String with Linebreaks out of an input String Array
-func strLines(in []string) (out string){
+func strLines(in []string) (out string) {
out = ""
- for _,s := range in {
- out = fmt.Sprintf("%s%s\n",out,s)
+ for _, s := range in {
+ out = fmt.Sprintf("%s%s\n", out, s)
}
return
}
+//Ask a question return the Answer
func getInput(quest string) string {
- fmt.Print(quest)
- in := bufio.NewReader(os.Stdin)
- line, err := in.ReadString('\n')
- if(runtime.GOOS == "windows"){
- line = strings.TrimSuffix(line, "\r\n") //for Windows
- }else{
- line = strings.TrimSuffix(line, "\n")
- }
- checkErr(err)
- return line
+ fmt.Print(quest)
+ in := bufio.NewReader(os.Stdin)
+ line, err := in.ReadString('\n')
+ if runtime.GOOS == "windows" {
+ line = strings.TrimSuffix(line, "\r\n") //for Windows
+ } else {
+ line = strings.TrimSuffix(line, "\n")
+ }
+ checkErr(err)
+ return line
}
-func getNewInput(quest,old string) string {
- if old != "" {
- fmt.Println("Current:",old)
- }
- fmt.Print(quest)
- in := bufio.NewReader(os.Stdin)
- line, err := in.ReadString('\n')
- if(runtime.GOOS == "windows"){
- line = strings.TrimSuffix(line, "\r\n") //for Windows
- }else{
- line = strings.TrimSuffix(line, "\n")
- }
- checkErr(err)
- if line == "" {
- return old
- }else{
- return line
- }
+//show Old Value, Ask Question and Return answer
+func getNewInput(quest, old string) string {
+ if old != "" {
+ fmt.Println("Current:", old)
+ }
+ fmt.Print(quest)
+ in := bufio.NewReader(os.Stdin)
+ line, err := in.ReadString('\n')
+ if runtime.GOOS == "windows" {
+ line = strings.TrimSuffix(line, "\r\n") //for Windows
+ } else {
+ line = strings.TrimSuffix(line, "\n")
+ }
+ checkErr(err)
+ if line == "" {
+ return old
+ } else {
+ return line
+ }
}
-func stringArray2String(in []string, delim string) (string) {
- var out string
- for i,a := range in {
- if i==0 {
- out=a
- }else{
- out=fmt.Sprintf("%s%s%s",out,delim,a)
- }
- }
- return out
+func stringArray2String(in []string, delim string) string {
+ var out string
+ for i, a := range in {
+ if i == 0 {
+ out = a
+ } else {
+ out = fmt.Sprintf("%s%s%s", out, delim, a)
+ }
+ }
+ return out
}
-func string2FloatArray(in string,delim string)(out []float64) {
- read := strings.Split(in,delim)
- for _,s := range read{
- fs,err := strconv.ParseFloat(s,64)
- checkErr(err)
- out = append(out,fs)
- }
- return
+func string2FloatArray(in string, delim string) (out []float64) {
+ read := strings.Split(in, delim)
+ for _, s := range read {
+ fs, err := strconv.ParseFloat(s, 64)
+ checkErr(err)
+ out = append(out, fs)
+ }
+ return
}
-func string2StringArray(in string,delim string)(out []string) {
- read := strings.Split(in,delim)
- for _,s := range read{
- out = append(out,s)
- }
- return
+func string2StringArray(in string, delim string) (out []string) {
+ read := strings.Split(in, delim)
+ for _, s := range read {
+ out = append(out, s)
+ }
+ return
}
func RetardRound(x float64) float64 {
- t := math.Trunc(x)
- if math.Abs(x-t) >= 0.5 {
- return t + math.Copysign(1, x)
- }
- return t
+ t := math.Trunc(x)
+ if math.Abs(x-t) >= 0.5 {
+ return t + math.Copysign(1, x)
+ }
+ return t
}
-func Round(x, unit float64) (float64) {
-// return math.Round(x/unit) * unit
- return RetardRound(x/unit) * unit
+func Round(x, unit float64) float64 {
+ // return math.Round(x/unit) * unit
+ return RetardRound(x/unit) * unit
}
func cleanString(in string) (out string) {
- work := strings.Replace(in,"/","-",-1)
- work = strings.Replace(work,"*","-",-1)
- work = strings.Replace(work,":","-",-1)
- work = strings.Replace(work,"<","-",-1)
- work = strings.Replace(work,">","-",-1)
- work = strings.Replace(work,"?","-",-1)
- work = strings.Replace(work,"|","-",-1)
- work = strings.Replace(work,"+","-",-1)
- work = strings.Replace(work,",","-",-1)
- work = strings.Replace(work,";","-",-1)
- work = strings.Replace(work,"=","-",-1)
- work = strings.Replace(work,"[","-",-1)
- out = strings.Replace(work,"]","-",-1)
- return
+ work := strings.Replace(in, "/", "-", -1)
+ work = strings.Replace(work, "*", "-", -1)
+ work = strings.Replace(work, ":", "-", -1)
+ work = strings.Replace(work, "<", "-", -1)
+ work = strings.Replace(work, ">", "-", -1)
+ work = strings.Replace(work, "?", "-", -1)
+ work = strings.Replace(work, "|", "-", -1)
+ work = strings.Replace(work, "+", "-", -1)
+ work = strings.Replace(work, ",", "-", -1)
+ work = strings.Replace(work, ";", "-", -1)
+ work = strings.Replace(work, "=", "-", -1)
+ work = strings.Replace(work, "[", "-", -1)
+ out = strings.Replace(work, "]", "-", -1)
+ return
}
func sumFloatArray(in []float64) (sum float64) {
- for _,e := range in{
- sum += e
- }
- return
+ for _, e := range in {
+ sum += e
+ }
+ return
}