7 static int decode_func(GlDecoder *, unsigned short, GlPacket *);
8 static int decode_gldfunc(GlDecoder *, unsigned short, GlPacket *);
10 GlDecoder *gldecoder_new(void *user_data, void (*destroy)(void *))
14 dec = (GlDecoder *)malloc(sizeof(GlDecoder));
15 memset(dec, 0, sizeof(GlDecoder));
16 dec->user_data = user_data;
17 dec->destroy = destroy;
22 void gldecoder_delete(GlDecoder *dec)
25 dec->destroy(dec->user_data);
29 int gldecoder_decode(GlDecoder *dec, const char *data, unsigned len)
34 pkt = packet_receive_str(data, &len);
38 packet_read_short(pkt, (short *)&func);
43 ret = decode_gldfunc(dec, func, pkt);
45 ret = decode_func(dec, func, pkt);
52 typedef const void *pointer;
53 typedef const char *string;
55 #include "gensrc/gldecoder.funcs"
57 static void decode_gldError(GlDecoder *dec, GlPacket *pkt)
60 packet_read_int(pkt, (int *)&code);
62 dec->gldError(dec->user_data, code);
63 else if(dec->unhandled)
64 dec->unhandled(dec->user_data, FUNC_GLDERROR);
67 static void decode_gldBreak(GlDecoder *dec, GlPacket *pkt)
71 packet_read_short(pkt, (short *)&func);
72 packet_read_char(pkt, (char *)&flag);
74 dec->gldBreak(dec->user_data, func, flag);
75 else if(dec->unhandled)
76 dec->unhandled(dec->user_data, FUNC_GLDBREAK);
79 static int decode_gldfunc(GlDecoder *dec, unsigned short func, GlPacket *pkt)
83 case FUNC_GLDERROR: decode_gldError(dec, pkt); break;
84 case FUNC_GLDBREAK: decode_gldBreak(dec, pkt); break;