From: ian Date: Sat, 4 Jun 2005 00:28:18 +0000 (+0000) Subject: can send pic things X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ijackson/git?a=commitdiff_plain;h=839740bced9ba184072e8bf7dde701aba9cd52a0;p=trains.git can send pic things --- diff --git a/hostside/client.c b/hostside/client.c index 66d162f..d7bdbfb 100644 --- a/hostside/client.c +++ b/hostside/client.c @@ -119,16 +119,19 @@ const void *any_lookup(ParseState *ps, const void *inf, size_t sz) { return 0; } -const void *any_needword_lookup(ParseState *ps, const void *infs, size_t sz) { +const void *any_needword_lookup(ParseState *ps, const void *infs, + size_t sz, const char *what) { + const void *r; if (!ps_needword(ps)) return 0; - return any_lookup(ps,infs,sz); + r= any_lookup(ps,infs,sz); + if (!r) { badcmd(ps,"unknown %s",what); return 0; } + return r; } void ps_callword(ParseState *ps, const CmdInfo *infs, const char *what) { const CmdInfo *ci; - ci= some_needword_lookup(ps,infs); - if (!ci) { badcmd(ps,"unknown %s",what); return; } - ci->fn(ps,ci); + ci= some_needword_lookup(ps,infs,what); + if (ci) ci->fn(ps,ci); } static void *client_iferr(oop_source *evts, oop_read *cl_read, diff --git a/hostside/commands.c b/hostside/commands.c index 02d5b28..c80c845 100644 --- a/hostside/commands.c +++ b/hostside/commands.c @@ -163,7 +163,9 @@ static void cmd_pic(ParseState *ps, const CmdInfo *ci) { PicInsn pi; long arg; - pii= some_needword_lookup(ps,pic_command_infos); + pii= some_needword_lookup(ps,pic_command_infos,"pic command"); + if (!pii) return; + if (pii->argbits) { if (!ps_neednumber(ps, &arg, 0, (1L << pii->argbits) - 1, "pic object number")) diff --git a/hostside/hostside.h b/hostside/hostside.h index b387eda..6bb5755 100644 --- a/hostside/hostside.h +++ b/hostside/hostside.h @@ -129,11 +129,12 @@ void retransmit_cancel(RetransmitNode *rn); ((const typeof(infos[0])*) \ any_lookup((ps),(infos),sizeof((infos)[0]))) -#define some_needword_lookup(ps, infos) \ +#define some_needword_lookup(ps, infos, what) \ ((const typeof(infos[0])*) \ - any_needword_lookup((ps),(infos),sizeof((infos)[0]))) + any_needword_lookup((ps),(infos),sizeof((infos)[0]),(what))) const void *any_lookup(ParseState *ps, const void *infos, size_t infosz); -const void *any_needword_lookup(ParseState *ps, const void *infos, size_t); +const void *any_needword_lookup(ParseState *ps, const void *infos, + size_t sz, const char *what); #endif /*HOSTSIDE_H*/ diff --git a/hostside/skelproto-pic.c b/hostside/skelproto-pic.c index e828302..69dd62f 100644 --- a/hostside/skelproto-pic.c +++ b/hostside/skelproto-pic.c @@ -16,7 +16,7 @@ extern void enco_pic_anyinsn(PicInsn *out, const PicInsnInfo *pii, out->l= 1 + pii->argbits/7; for (i= out->l - 1; - i > 0; + i >= 0; i--, as >>= 7) out->d[i]= (as & 0x07fUL) | 0x080UL; out->d[out->l - 1] &= ~0x080UL;