# $Id$
-wl('static unsigned decode_%s(GlDecoder *dec, const char *data)', func.name)
+:#define UNUSED __attribute__((unused))
+wl('static unsigned decode_%s(GlDecoder *dec, GlPacket *pkt UNUSED)', func.name)
wl('{')
-wl(' unsigned pos = 0;')
if ret.ctype!="void":
wl(' %s ret;', ret.ctype)
for p in params:
wl(' %s p_%s;', p.ctype, p.name)
-if ret.ctype!="void":
- wl(' pos += read_%s(&ret, data+pos);', ret.io[0])
for p in params:
if p.kind=="value":
- wl(' pos += read_%s(&p_%s, data+pos);', p.io[0], p.name)
+ wl(' packet_read_%s(pkt, (%s *)&p_%s);', p.io[0].replace(' ', '_'), p.io[0], p.name)
+ elif p.kind=="array" and p.io and p.io[0]=="string":
+ wl(' packet_read_string_array(pkt, &p_%s);', p.name)
elif p.csize:
- wl(' pos += read_data((const void **)&p_%s, data+pos);', p.name)
+ wl(' packet_read_data(pkt, (pointer *)&p_%s);', p.name)
else:
- wl(' pos += read_pointer((void **)&p_%s, data+pos);', p.name)
+ wl(' packet_read_pointer(pkt, (pointer *)&p_%s);', p.name)
+if ret.ctype!="void":
+ wl(' packet_read_%s(pkt, (%s *)&ret);', ret.io[0].replace(' ', '_'), ret.io[0])
wl(' if(dec->%s)', func.name)
w(' dec->%s(dec->user_data', func.name)
if ret.ctype!="void":
for p in params:
w(', p_%s', p.name)
wl(');')
-wl(' return pos;')
+wl(' else if(dec->unhandled)')
+wl(' dec->unhandled(dec->user_data, FUNC_%s);', func.name.upper())
+wl(' return 0;')
wl('}')
-:static int decode_func(GlDecoder *dec, short func, const char *data)
+:static int decode_func(GlDecoder *dec, unsigned short func, GlPacket *pkt)
:{
: switch(func)
: {
-wl(' case FUNC_%s: return decode_%s(dec, data);', func.name.upper(), func.name)
+wl(' case FUNC_%s: decode_%s(dec, pkt); break;', func.name.upper(), func.name)
: default: return -1;
: }
+: return 0;
:}