chiark / gitweb /
can send pic things
authorian <ian>
Sat, 4 Jun 2005 00:28:18 +0000 (00:28 +0000)
committerian <ian>
Sat, 4 Jun 2005 00:28:18 +0000 (00:28 +0000)
hostside/client.c
hostside/commands.c
hostside/hostside.h
hostside/skelproto-pic.c

index 66d162f1840437e218b9e1580b8da41e2247adae..d7bdbfbdaf5fb2c77c8f7204fc4808d7cc749c5c 100644 (file)
@@ -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,
index 02d5b28a783b9e5818a662aec8580b101dd1666e..c80c8458aca82be8960ed0fb7018b60c7fabd3d2 100644 (file)
@@ -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"))
index b387eda16db71a4afd9c098a51c77a2501f34365..6bb5755642517d754e2df7ab379f56a959bb7001 100644 (file)
@@ -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*/
index e828302587cdcb57e14fba46a108ee95cc533ebf..69dd62f1d4db667d9087f831f0c32ac82dc773a9 100644 (file)
@@ -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;