func getInput(d dynamics.Dwimmer, context *term.SettingT, hintstrings, toolmap term.T) term.T { quotedHints, err := represent.ToList(d, hintstrings) if err != nil { return represent.ConversionError.T(hintstrings, err) } hints := make([]string, len(quotedHints)) for i, quoted := range quotedHints { hints[i], err = represent.ToStr(d, quoted) if err != nil { return represent.ConversionError.T(quoted, err) } } tools := make(map[rune]string) for toolmap.Head() != maps.Empty { switch toolmap.Head() { case maps.Cons: vs := toolmap.Values() c, err := represent.ToRune(d, vs[0]) if err != nil { return represent.ConversionError.T(vs[0], err) } s, err := represent.ToStr(d, vs[1]) if err != nil { return represent.ConversionError.T(vs[1], err) } tools[c] = s toolmap = vs[2] default: context.AppendTerm(UnrecognizedDictionary.T()) return nil } } input := d.Readln(" < ", hints, tools) return core.Answer.T(represent.Str(input)) }
func nativePutChar(d dynamics.Dwimmer, s *term.SettingT, char, xt, yt term.T) term.T { c, err := represent.ToRune(d, char) if err != nil { return term.Make("asked to write character, but received [] " + "while converting to a character").T(err) } x, err := represent.ToInt(d, xt) if err != nil { return term.Make("asked to write character, but received [] "+ "while converting coordinate [] to an integer").T(err, xt) } y, err := represent.ToInt(d, yt) if err != nil { return term.Make("asked to write character, but received [] "+ "while converting coordinate [] to an integer").T(err, yt) } d.SetCursor(x, y) d.PrintCh(c) return core.OK.T() }