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