--- /dev/null
+# $Id$
+^typemap gl.tm
+^iomap gl.io
+^spec gl gl.spec
+wl('static unsigned decode_%s(GlDecoder *dec, const char *data)', 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)
+ elif p.csize:
+ wl(' pos += read_data((const void **)&p_%s, data+pos);', p.name)
+ else:
+ wl(' pos += read_pointer((void **)&p_%s, data+pos);', p.name)
+wl(' if(dec->%s)', func.name)
+w(' dec->%s(dec->user_data', func.name)
+if ret.ctype!="void":
+ w(', ret')
+for p in params:
+ w(', p_%s', p.name)
+wl(');')
+wl(' return pos;')
+wl('}')
+:static int decode_func(GlDecoder *dec, short func, const char *data)
+:{
+: switch(func)
+: {
+wl(' case FUNC_%s: return decode_%s(dec, data);', func.name.upper(), func.name)
+: default: return -1;
+: }
+:}