Changes to 5 files · Browse files at 4b2468315be1 Diff from another changeset...
|
@@ -1,0 +1,1 @@ + fortune
|
|
@@ -1,0 +1,2 @@ + This is a quick reimplementation of Fortune in Go, complete with the FreeBSD
+normal and offensive fortune files.
|
This file's diff was not loaded because this changeset is very large. Load changes Loading... |
|
@@ -1,0 +1,67 @@ + package main
+
+import (
+ "bufio"
+ "flag"
+ "fmt"
+ "io"
+ "math/rand"
+ "os"
+ "time"
+)
+
+const (
+ NORMAL = "freebsd.fortunes"
+ OFFENSIVE = "offensive.fortunes"
+)
+
+func readFortunes(filename string) (fortunes []string, err error) {
+ fortuneFile, err := os.Open(filename)
+ if err != nil {
+ return
+ }
+ defer fortuneFile.Close()
+
+ reader := bufio.NewReader(fortuneFile)
+ fortunes = make([]string, 0, 100)
+ currentFortune := ""
+ for line, err := reader.ReadString('\n'); err == nil; line, err = reader.ReadString('\n') {
+ if line[0] == '%' {
+ fortunes = append(fortunes, currentFortune)
+ currentFortune = ""
+ } else {
+ currentFortune += line
+ }
+ }
+
+ if len(currentFortune) > 0 {
+ fortunes = append(fortunes, currentFortune)
+ }
+
+ if err == io.EOF {
+ err = nil
+ }
+
+ return
+}
+
+func main() {
+ offensive := flag.Bool("o", false, "be offensive")
+ flag.Parse()
+ fortunes, err := readFortunes(NORMAL)
+ if err != nil {
+ fmt.Fprintf(os.Stderr, "unable to load normal fortunes: %v\n", err)
+ os.Exit(1)
+ }
+ if *offensive {
+ offensiveFortunes, err := readFortunes(OFFENSIVE)
+ if err != nil {
+ fmt.Fprintf(os.Stderr, "unable to load offensive fortunes: %v\n", err)
+ os.Exit(1)
+ }
+ fortunes = append(fortunes, offensiveFortunes...)
+ }
+
+ rand.Seed(time.Now().UnixNano())
+ fmt.Print(fortunes[rand.Intn(len(fortunes))])
+}
|
This file's diff was not loaded because this changeset is very large. Load changes Loading... |
Loading...