-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.go
More file actions
84 lines (75 loc) · 1.81 KB
/
main.go
File metadata and controls
84 lines (75 loc) · 1.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package main
import (
"flag"
"fmt"
"io"
"os"
"time"
"github.com/gdamore/tcell"
)
func main() {
exitCode := 0
defer func() { os.Exit(exitCode) }()
flag.Usage = func() {
fmt.Fprintln(os.Stderr, "Matrix\n\nFlags:")
flag.PrintDefaults()
fmt.Fprintln(os.Stderr)
fmt.Fprintln(os.Stderr, "| Valid colours:\n| white, blue, green, red, yellow, orange, magenta, cyan")
fmt.Fprintln(os.Stderr, "|")
fmt.Fprintln(os.Stderr, "| Colour can also be changed by typing the initial\n| (e.g. 'c' for 'cyan') while running.")
fmt.Fprintln(os.Stderr)
fmt.Fprintln(os.Stderr, "| Valid feeds: alpha, binary, block, cyril, dot, greek, hangeul, jamo, hex, hira, kata, line, num, stdin, zh")
fmt.Fprintln(os.Stderr, "|")
fmt.Fprintln(os.Stderr, "| Feed can also be changed by typing the upper-case initial\n| (e.g. 'A' for 'alpha') while running.")
fmt.Fprintln(os.Stderr, "| Hex feed uses X. Binary feed uses 0.")
}
color := flag.String("c", "white", "colour")
feedStr := flag.String("f", "alpha", "feed")
flag.Parse()
var feed io.Reader
switch *feedStr {
case "alpha":
feed = feedAlpha
case "binary":
feed = feedBinary
case "block":
feed = feedBlock
case "cyril":
feed = feedCyril
case "dot":
feed = feedDot
case "greek":
feed = feedGreek
case "hangeul":
feed = feedHangeul
case "hex":
feed = feedHex
case "hira":
feed = feedHira
case "kata":
feed = feedKata
case "line":
feed = feedLine
case "num":
feed = feedNum
case "stdin":
feed = feedStdin
case "zh":
feed = feedZh
default:
feed = feedAlpha
}
screen, err := tcell.NewScreen()
if err != nil {
fmt.Fprintln(os.Stderr, err)
exitCode = 1
return
}
defer screen.Fini()
m := newMatrix(time.Now().UnixNano(), screen, *color, feed)
if err := m.enter(); err != nil {
fmt.Fprintln(os.Stderr, err)
exitCode = 1
return
}
}