+/*
+ * Print args on s, with format specified in t->result_fmt.
+ * Return number of valid arguments or -1 in case of error.
+ */
+static bool protocol_reply(Serial *s, const struct CmdTemplate *t,
+ const parms *args)
+{
+ unsigned short offset = strlen(t->arg_fmt) + 1;
+ unsigned short nres = strlen(t->result_fmt);
+
+ ser_printf(s, "0");
+ for (unsigned short i = 0; i < nres; ++i)
+ {
+ if (t->result_fmt[i] == 'd')
+ {
+ ser_printf(s, " %ld", args[offset+i].l);
+ }
+ else if (t->result_fmt[i] == 's')
+ {
+ ser_printf(s, " %s", args[offset+i].s);
+ }
+ else
+ {
+ abort();
+ }
+ }
+ ser_printf(s, "\r\n");
+ return true;
+}
+