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,
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"))
((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*/
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;