summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md3
-rw-r--r--cmd/gotop/main.go14
-rw-r--r--devices/cpu.go8
-rw-r--r--devices/cpu_cpu.go5
-rw-r--r--devices/devices.go2
-rw-r--r--devices/temp_openbsd.go2
-rw-r--r--fonts/Lat15-VGA16-braille.psfbin0 -> 10582 bytes
-rw-r--r--fonts/README16
-rw-r--r--fonts/braille.txt4864
-rw-r--r--fonts/gen-braille.py34
-rw-r--r--widgets/batterygauge.go1
-rw-r--r--widgets/disk.go2
12 files changed, 4927 insertions, 24 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 316e451..c4ff77d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -20,7 +20,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added
- Adds support for system-wide configurations. This improves support for package maintainers.
-- Help function to print key bindings.
+- Help function to print key bindings, widgets, layouts, colorschemes, and paths
- Help prints locations of config files (color schemes & layouts).
- Help prints location of logs.
- CLI option to scale out (#84).
@@ -32,6 +32,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Command line option to list layouts, paths, colorschemes, hotkeys, and filterable devices
- Adds ability to write out a configuration file
- Adds a command for specifying the configuration file to use
+- Merged cmatsuoka's console font contribution
### Changed
diff --git a/cmd/gotop/main.go b/cmd/gotop/main.go
index 25dd5b8..bd00b66 100644
--- a/cmd/gotop/main.go
+++ b/cmd/gotop/main.go
@@ -67,7 +67,7 @@ func parseArgs() error {
opflag.BoolVarP(&conf.AverageLoad, "averagecpu", "a", conf.AverageLoad, "Show average CPU in the CPU widget.")
fahrenheit := opflag.BoolP("fahrenheit", "f", conf.TempScale == 'F', "Show temperatures in fahrenheit.Show temperatures in fahrenheit.")
opflag.BoolVarP(&conf.Statusbar, "statusbar", "s", conf.Statusbar, "Show a statusbar with the time.")
- opflag.DurationVarP(&conf.UpdateInterval, "rate", "r", conf.UpdateInterval, "Number of times per second to update CPU and Mem widgets.")
+ opflag.DurationVarP(&conf.UpdateInterval, "rate", "r", conf.UpdateInterval, "Refresh frequency. Most time units accepted. `1m` = refresh every minute. `100ms` = refresh every 100ms.")
opflag.StringVarP(&conf.Layout, "layout", "l", conf.Layout, `Name of layout spec file for the UI. Use "-" to pipe.`)
opflag.StringVarP(&conf.NetInterface, "interface", "i", "all", "Select network interface. Several interfaces can be defined using comma separated values. Interfaces can also be ignored using `!`")
opflag.StringVarP(&conf.ExportPort, "export", "x", conf.ExportPort, "Enable metrics for export on the specified port.")
@@ -334,19 +334,9 @@ func eventLoop(c gotop.Config, grid *layout.MyGrid) {
}
}
-// TODO: @devices fans
-// TODO: @devices mpd visualizer
-// TODO: @devices color bars for memory, a-la bashtop
-// TODO: Add tab completion for Linux https://gist.github.com/icholy/5314423
// TODO: state:merge #135 linux console font (cmatsuoka/console-font)
-// TODO: Abstract out the UI toolkit. mum4k/termdash, VladimirMarkelov/clui, gcla/gowid, rivo/tview, marcusolsson/tui-go might work better for some OS/Archs. Performance/memory use comparison would be interesting.
-// TODO: more unit tests, benchmarks
-// TODO: README is getting long. Move to wiki.
-// TODO: add verbose debugging option
-// TODO: find VMs for FreeBSD, etc for testing gotop
-// TODO: add README about extensions, and wiki page for writing extensions
func main() {
- // For performance testing
+ // TODO: Make this an option, for performance testing
//go func() {
// log.Fatal(http.ListenAndServe(":7777", nil))
//}()
diff --git a/devices/cpu.go b/devices/cpu.go
index 1d8d23d..b4a9799 100644
--- a/devices/cpu.go
+++ b/devices/cpu.go
@@ -1,13 +1,11 @@
package devices
-// TODO: https://github.com/elastic/go-sysinfo
-
import (
"log"
"time"
)
-var cpuFuncs []func(map[string]int, time.Duration, bool) map[string]error
+var cpuFuncs []func(map[string]int, bool) map[string]error
// RegisterCPU adds a new CPU device to the CPU widget. labels returns the
// names of the devices; they should be as short as possible, and the indexes
@@ -18,7 +16,7 @@ var cpuFuncs []func(map[string]int, time.Duration, bool) map[string]error
//
// labels may be called once and the value cached. This means the number of
// cores should not change dynamically.
-func RegisterCPU(f func(map[string]int, time.Duration, bool) map[string]error) {
+func RegisterCPU(f func(map[string]int, bool) map[string]error) {
cpuFuncs = append(cpuFuncs, f)
}
@@ -26,7 +24,7 @@ func RegisterCPU(f func(map[string]int, time.Duration, bool) map[string]error) {
// Returns one value per cpu, or a single value if percpu is set to false.
func UpdateCPU(cpus map[string]int, interval time.Duration, logical bool) {
for _, f := range cpuFuncs {
- errs := f(cpus, interval, logical)
+ errs := f(cpus, logical)
if errs != nil {
for k, e := range errs {
log.Printf("%s: %s", k, e)
diff --git a/devices/cpu_cpu.go b/devices/cpu_cpu.go
index a959e32..46105ee 100644
--- a/devices/cpu_cpu.go
+++ b/devices/cpu_cpu.go
@@ -2,7 +2,6 @@ package devices
import (
"fmt"
- "time"
psCpu "github.com/shirou/gopsutil/cpu"
)
@@ -10,7 +9,7 @@ import (
// FIXME: broken % under Linux. Doesn't reflect reality *at all*.
// FIXME: gotop CPU use high -- gopsutils again? Try rolling back.
func init() {
- f := func(cpus map[string]int, iv time.Duration, l bool) map[string]error {
+ f := func(cpus map[string]int, l bool) map[string]error {
cpuCount, err := psCpu.Counts(l)
if err != nil {
return nil
@@ -19,7 +18,7 @@ func init() {
if cpuCount > 10 {
formatString = "CPU%02d"
}
- vals, err := psCpu.Percent(iv, l)
+ vals, err := psCpu.Percent(0, l)
if err != nil {
return map[string]error{"gopsutil": err}
}
diff --git a/devices/devices.go b/devices/devices.go
index c3cad42..7360578 100644
--- a/devices/devices.go
+++ b/devices/devices.go
@@ -8,6 +8,8 @@ const (
Temperatures = "Temperatures" // Device domain for temperature sensors
)
+// TODO: Redesign; this is not thread safe, and it's easy to write code that triggers concurrent modification panics. Channels?
+
var Domains []string = []string{Temperatures}
var _shutdownFuncs []func() error
var _devs map[string][]string
diff --git a/devices/temp_openbsd.go b/devices/temp_openbsd.go
index d889d78..195882a 100644
--- a/devices/temp_openbsd.go
+++ b/devices/temp_openbsd.go
@@ -15,7 +15,7 @@ import (
"unsafe"
)
-// TODO: Add filtering. Getting the temperature sensor names is non-trivial for OpenBSD, and until I can test it, leave it unimplemented
+// TODO: Add sensor filtering
func init() {
RegisterTemp(update)
}
diff --git a/fonts/Lat15-VGA16-braille.psf b/fonts/Lat15-VGA16-braille.psf
new file mode 100644
index 0000000..52197a6
--- /dev/null
+++ b/fonts/Lat15-VGA16-braille.psf
Binary files differ
diff --git a/fonts/README b/fonts/README
new file mode 100644
index 0000000..389bd86
--- /dev/null
+++ b/fonts/README
@@ -0,0 +1,16 @@
+`Lat15-VGA16-braille.psf` is a Linux console font based on `Lat15-VGA16.psf`
+with additional braille and graphic block characters suitable to run gotop
+on the Linux console without a graphic environment. To use the braille font,
+just run `setfont Lat15-VGA16-braille.psf`.
+
+To rebase the braille and graphic block characters on a different 16x8
+psf font, use the psf2txt and txt2psf from psftools[1]. In this case, make
+sure the `Length:` entry in the file header is set to 512.
+
+The original `Lat15-VGA16.psf` font file was obtained from the Ubuntu 18.04
+console-setup-linux package[2]. Console fonts are public domain by nature[3].
+
+
+[1] https://www.seasip.info/Unix/PSF/
+[2] https://launchpad.net/ubuntu/bionic/amd64/console-setup-linux/1.178ubuntu2.7
+[3] https://launchpad.net/ubuntu/bionic/+source/console-setup/+copyright
diff --git a/fonts/braille.txt b/fonts/braille.txt
new file mode 100644
index 0000000..af774a0
--- /dev/null
+++ b/fonts/braille.txt
@@ -0,0 +1,4864 @@
+%
+// Character 256
+Bitmap: -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [00002800];
+%
+// Character 257
+Bitmap: -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [00002801];
+%
+// Character 258
+Bitmap: -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [00002802];
+%
+// Character 259
+Bitmap: -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [00002803];
+%
+// Character 260
+Bitmap: -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [00002804];
+%
+// Character 261
+Bitmap: -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [00002805];
+%
+// Character 262
+Bitmap: -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [00002806];
+%
+// Character 263
+Bitmap: -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [00002807];
+%
+// Character 264
+Bitmap: -------- \
+ -----##- \
+ -----##- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [00002808];
+%
+// Character 265
+Bitmap: -------- \
+ -##--##- \
+ -##--##- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [00002809];
+%
+// Character 266
+Bitmap: -------- \
+ -----##- \
+ -----##- \
+ -------- \
+ -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [0000280a];
+%
+// Character 267
+Bitmap: -------- \
+ -##--##- \
+ -##--##- \
+ -------- \
+ -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [0000280b];
+%
+// Character 268
+Bitmap: -------- \
+ -----##- \
+ -----##- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [0000280c];
+%
+// Character 269
+Bitmap: -------- \
+ -##--##- \
+ -##--##- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [0000280d];
+%
+// Character 270
+Bitmap: -------- \
+ -----##- \
+ -----##- \
+ -------- \
+ -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [0000280e];
+%
+// Character 271
+Bitmap: -------- \
+ -##--##- \
+ -##--##- \
+ -------- \
+ -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [0000280f];
+%
+// Character 272
+Bitmap: -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -----##- \
+ -----##- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [00002810];
+%
+// Character 273
+Bitmap: -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -----##- \
+ -----##- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [00002811];
+%
+// Character 274
+Bitmap: -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -##--##- \
+ -##--##- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [00002812];
+%
+// Character 275
+Bitmap: -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -##--##- \
+ -##--##- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [00002813];
+%
+// Character 276
+Bitmap: -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -----##- \
+ -----##- \
+ -------- \
+ -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [00002814];
+%
+// Character 277
+Bitmap: -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -----##- \
+ -----##- \
+ -------- \
+ -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [00002815];
+%
+// Character 278
+Bitmap: -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -##--##- \
+ -##--##- \
+ -------- \
+ -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [00002816];
+%
+// Character 279
+Bitmap: -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -##--##- \
+ -##--##- \
+ -------- \
+ -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [00002817];
+%
+// Character 280
+Bitmap: -------- \
+ -----##- \
+ -----##- \
+ -------- \
+ -------- \
+ -----##- \
+ -----##- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [00002818];
+%
+// Character 281
+Bitmap: -------- \
+ -##--##- \
+ -##--##- \
+ -------- \
+ -------- \
+ -----##- \
+ -----##- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [00002819];
+%
+// Character 282
+Bitmap: -------- \
+ -----##- \
+ -----##- \
+ -------- \
+ -------- \
+ -##--##- \
+ -##--##- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [0000281a];
+%
+// Character 283
+Bitmap: -------- \
+ -##--##- \
+ -##--##- \
+ -------- \
+ -------- \
+ -##--##- \
+ -##--##- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [0000281b];
+%
+// Character 284
+Bitmap: -------- \
+ -----##- \
+ -----##- \
+ -------- \
+ -------- \
+ -----##- \
+ -----##- \
+ -------- \
+ -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [0000281c];
+%
+// Character 285
+Bitmap: -------- \
+ -##--##- \
+ -##--##- \
+ -------- \
+ -------- \
+ -----##- \
+ -----##- \
+ -------- \
+ -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [0000281d];
+%
+// Character 286
+Bitmap: -------- \
+ -----##- \
+ -----##- \
+ -------- \
+ -------- \
+ -##--##- \
+ -##--##- \
+ -------- \
+ -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [0000281e];
+%
+// Character 287
+Bitmap: -------- \
+ -##--##- \
+ -##--##- \
+ -------- \
+ -------- \
+ -##--##- \
+ -##--##- \
+ -------- \
+ -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [0000281f];
+%
+// Character 288
+Bitmap: -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -----##- \
+ -----##- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [00002820];
+%
+// Character 289
+Bitmap: -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -----##- \
+ -----##- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [00002821];
+%
+// Character 290
+Bitmap: -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -----##- \
+ -----##- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [00002822];
+%
+// Character 291
+Bitmap: -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -----##- \
+ -----##- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [00002823];
+%
+// Character 292
+Bitmap: -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -##--##- \
+ -##--##- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [00002824];
+%
+// Character 293
+Bitmap: -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -##--##- \
+ -##--##- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [00002825];
+%
+// Character 294
+Bitmap: -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -##--##- \
+ -##--##- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [00002826];
+%
+// Character 295
+Bitmap: -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -##--##- \
+ -##--##- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [00002827];
+%
+// Character 296
+Bitmap: -------- \
+ -----##- \
+ -----##- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -----##- \
+ -----##- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [00002828];
+%
+// Character 297
+Bitmap: -------- \
+ -##--##- \
+ -##--##- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -----##- \
+ -----##- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [00002829];
+%
+// Character 298
+Bitmap: -------- \
+ -----##- \
+ -----##- \
+ -------- \
+ -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -----##- \
+ -----##- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [0000282a];
+%
+// Character 299
+Bitmap: -------- \
+ -##--##- \
+ -##--##- \
+ -------- \
+ -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -----##- \
+ -----##- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [0000282b];
+%
+// Character 300
+Bitmap: -------- \
+ -----##- \
+ -----##- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -##--##- \
+ -##--##- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [0000282c];
+%
+// Character 301
+Bitmap: -------- \
+ -##--##- \
+ -##--##- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -##--##- \
+ -##--##- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [0000282d];
+%
+// Character 302
+Bitmap: -------- \
+ -----##- \
+ -----##- \
+ -------- \
+ -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -##--##- \
+ -##--##- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [0000282e];
+%
+// Character 303
+Bitmap: -------- \
+ -##--##- \
+ -##--##- \
+ -------- \
+ -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -##--##- \
+ -##--##- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [0000282f];
+%
+// Character 304
+Bitmap: -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -----##- \
+ -----##- \
+ -------- \
+ -------- \
+ -----##- \
+ -----##- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [00002830];
+%
+// Character 305
+Bitmap: -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -----##- \
+ -----##- \
+ -------- \
+ -------- \
+ -----##- \
+ -----##- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [00002831];
+%
+// Character 306
+Bitmap: -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -##--##- \
+ -##--##- \
+ -------- \
+ -------- \
+ -----##- \
+ -----##- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [00002832];
+%
+// Character 307
+Bitmap: -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -##--##- \
+ -##--##- \
+ -------- \
+ -------- \
+ -----##- \
+ -----##- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [00002833];
+%
+// Character 308
+Bitmap: -------- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ -----##- \
+ -----##- \
+ -------- \
+ -------- \
+ -##--##- \
+ -##--##- \
+ -------- \
+ -------- \
+ -------- \
+ -------- \
+ --------
+Unicode: [00002834];
+%
+// Character 309
+Bitmap: -------- \
+ -##----- \
+ -##----- \
+ -------- \
+ -------- \
+ -----##- \
+ -----##- \
+ -------- \
+ -------- \
+ -##--##- \
+ -##--##- \
+ -------- \
+ -------- \
+