From f49e81388cffc4117d02050a546f4b6993593cc2 Mon Sep 17 00:00:00 2001 From: Dietrich Epp Date: Tue, 15 Mar 2022 15:34:39 -0400 Subject: [PATCH] Generate charmap string resources The string resources contain names of scripts, regions, and character maps. --- gen/main.go | 3 +++ gen/rez.go | 63 +++++++++++++++++++++++++++++++++++++++++++++++++ src/.gitignore | 1 + src/resources.h | 3 +++ 4 files changed, 70 insertions(+) create mode 100644 gen/rez.go create mode 100644 src/resources.h diff --git a/gen/main.go b/gen/main.go index e66ab9c..fa695bd 100644 --- a/gen/main.go +++ b/gen/main.go @@ -43,6 +43,9 @@ func mainE() error { if err := writeMap(&d, m, "src/getcharmap.c"); err != nil { return err } + if err := writeRez(&d, "src/charmaps.r"); err != nil { + return err + } return nil } diff --git a/gen/rez.go b/gen/rez.go new file mode 100644 index 0000000..0422dc9 --- /dev/null +++ b/gen/rez.go @@ -0,0 +1,63 @@ +package main + +import ( + "bufio" + "fmt" + "os" +) + +// writeStrings writes a 'STR#' resource in Rez format. +func writeStrings(w *bufio.Writer, rsrc string, strs []string) { + fmt.Fprintf(w, "resource 'STR#' (%s) {{\n", rsrc) + for i, s := range strs { + fmt.Fprintf(w, "\t%q", s) + if i < len(strs)-1 { + w.WriteByte(',') + } + w.WriteByte('\n') + } + w.WriteString("}};\n") +} + +func charmapNames(d *scriptdata) []string { + r := make([]string, len(d.charmaps)) + for i, c := range d.charmaps { + r[i] = c.name + } + return r +} + +func constStrings(c *constmap) []string { + var n int + for i := range c.values { + if i >= n { + n = i + 1 + } + } + r := make([]string, n) + for i, name := range c.values { + r[i] = name + } + return r +} + +func writeRez(d *scriptdata, filename string) error { + fmt.Fprintln(os.Stderr, "Writing:", filename) + fp, err := os.Create(filename) + if err != nil { + return err + } + defer fp.Close() + w := bufio.NewWriter(fp) + + w.WriteString(header) + w.WriteString("#include \"resources.h\"\n") + writeStrings(w, "rSTRS_Charmaps", charmapNames(d)) + writeStrings(w, "rSTRS_Scripts", constStrings(&d.scripts)) + writeStrings(w, "rSTRS_Regions", constStrings(&d.regions)) + + if err := w.Flush(); err != nil { + return err + } + return fp.Close() +} diff --git a/src/.gitignore b/src/.gitignore index 24c33a0..aa02f65 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -1 +1,2 @@ /getcharmap.c +/charmaps.r diff --git a/src/resources.h b/src/resources.h new file mode 100644 index 0000000..c93cf0c --- /dev/null +++ b/src/resources.h @@ -0,0 +1,3 @@ +#define rSTRS_Charmaps 128 +#define rSTRS_Scripts 129 +#define rSTRS_Regions 130