]> git.tdb.fi Git - gldbg.git/blobdiff - source/gldecoder.funcs.t
Rewrite genwrap.py to use external templates for more flexibility
[gldbg.git] / source / gldecoder.funcs.t
diff --git a/source/gldecoder.funcs.t b/source/gldecoder.funcs.t
new file mode 100644 (file)
index 0000000..055a272
--- /dev/null
@@ -0,0 +1,37 @@
+# $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;
+:      }
+:}