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
|
package game
import (
"fmt"
"strings"
"thehouseoficarus/internal/color"
"thehouseoficarus/internal/net"
)
func (g *Game) doColortable(sess *net.Session) {
mode := g.colorMode(sess)
if mode == "none" || mode == "" {
sess.WriteLine("Enable colors first: option color ansi (or xterm256)")
return
}
writeColorBlock(sess, mode, true)
sess.WriteLine("")
writeColorBlock(sess, mode, false)
}
func (g *Game) executeColortable(sess *net.Session, args []string, rawInput string) {
g.doColortable(sess)
}
func writeColorBlock(sess *net.Session, mode string, fg bool) {
sess.WriteLine("ANSI 16 Colors:")
writeColorRow(sess, mode, 0, 8, fg)
writeColorRow(sess, mode, 8, 16, fg)
sess.WriteLine("Color cube:")
for blockRow := 0; blockRow < 2; blockRow++ {
for row := 0; row < 6; row++ {
var sb strings.Builder
for block := 0; block < 3; block++ {
base := 16 + (blockRow*3+block)*36 + row*6
for col := 0; col < 6; col++ {
idx := base + col
if idx > 231 {
break
}
if fg {
sb.WriteString(color.FgCode(mode, idx))
} else {
sb.WriteString(color.ContrastFg(mode, idx))
sb.WriteString(color.BgCode(mode, idx))
}
sb.WriteString(fmt.Sprintf(" %02X", idx))
sb.WriteString(color.Reset)
}
if block < 2 {
sb.WriteString(" ")
}
}
sess.WriteLine(sb.String())
}
if blockRow == 0 {
sess.WriteLine("")
}
}
sess.WriteLine("Grayscale:")
writeColorRow(sess, mode, 232, 244, fg)
writeColorRow(sess, mode, 244, 256, fg)
}
func writeColorRow(sess *net.Session, mode string, start, end int, fg bool) {
var sb strings.Builder
for i := start; i < end && i < 256; i++ {
if fg {
sb.WriteString(color.FgCode(mode, i))
} else {
sb.WriteString(color.ContrastFg(mode, i))
sb.WriteString(color.BgCode(mode, i))
}
sb.WriteString(fmt.Sprintf(" %02X", i))
sb.WriteString(color.Reset)
}
sess.WriteLine(sb.String())
}
|