3 This file is part of gldbg
4 Copyright © 2009-2010 Mikko Rasa, Mikkosoft Productions
5 Distributed under the GPL
10 #include "functions.h"
11 #include "gldecoder.h"
14 static int decode_func(GlDecoder *, unsigned short, GlPacket *);
15 static int decode_gldfunc(GlDecoder *, unsigned short, GlPacket *);
17 GlDecoder *gldecoder_new(void *user_data, void (*destroy)(void *))
21 dec = (GlDecoder *)malloc(sizeof(GlDecoder));
22 memset(dec, 0, sizeof(GlDecoder));
23 dec->user_data = user_data;
24 dec->destroy = destroy;
29 void gldecoder_delete(GlDecoder *dec)
32 dec->destroy(dec->user_data);
36 int gldecoder_decode(GlDecoder *dec, const char *data, unsigned len)
41 pkt = packet_receive_str(data, &len);
45 packet_read_short(pkt, (short *)&func);
50 ret = decode_gldfunc(dec, func, pkt);
52 ret = decode_func(dec, func, pkt);
59 typedef const void *pointer;
60 typedef const char *string;
62 #include "gensrc/gldecoder.funcs"
64 static void decode_gldError(GlDecoder *dec, GlPacket *pkt)
67 packet_read_int(pkt, (int *)&code);
69 dec->gldError(dec->user_data, code);
70 else if(dec->unhandled)
71 dec->unhandled(dec->user_data, FUNC_GLDERROR);
74 static void decode_gldBreak(GlDecoder *dec, GlPacket *pkt)
77 packet_read_short(pkt, (short *)&func);
79 dec->gldBreak(dec->user_data, func);
80 else if(dec->unhandled)
81 dec->unhandled(dec->user_data, FUNC_GLDBREAK);
84 static int decode_gldfunc(GlDecoder *dec, unsigned short func, GlPacket *pkt)
88 case FUNC_GLDERROR: decode_gldError(dec, pkt); break;
89 case FUNC_GLDBREAK: decode_gldBreak(dec, pkt); break;