-/* $Id$
-
-This file is part of gldbg
-Copyright © 2009-2010 Mikko Rasa, Mikkosoft Productions
-Distributed under the GPL
-*/
-
#include <stdlib.h>
#include <string.h>
#include "functions.h"
packet_read_short(pkt, (short *)&func);
- if(dec)
- {
- int ret = 0;
-
- if(func&0x8000)
- ret = decode_gldfunc(dec, func, pkt);
- else
- ret = decode_func(dec, func, pkt);
- if(ret<0)
- return -1;
- }
+ int ret = 0;
+
+ if(func&0x8000)
+ ret = decode_gldfunc(dec, func, pkt);
+ else
+ ret = decode_func(dec, func, pkt);
+ if(ret<0)
+ return -1;
return len;
}
packet_read_int(pkt, (int *)&code);
if(dec->gldError)
dec->gldError(dec->user_data, code);
+ else if(dec->unhandled)
+ dec->unhandled(dec->user_data, FUNC_GLDERROR);
+}
+
+static void decode_gldBreak(GlDecoder *dec, GlPacket *pkt)
+{
+ unsigned short func;
+ unsigned char flag;
+ packet_read_short(pkt, (short *)&func);
+ packet_read_char(pkt, (char *)&flag);
+ if(dec->gldBreak)
+ dec->gldBreak(dec->user_data, func, flag);
+ else if(dec->unhandled)
+ dec->unhandled(dec->user_data, FUNC_GLDBREAK);
}
static int decode_gldfunc(GlDecoder *dec, unsigned short func, GlPacket *pkt)
switch(func)
{
case FUNC_GLDERROR: decode_gldError(dec, pkt); break;
+ case FUNC_GLDBREAK: decode_gldBreak(dec, pkt); break;
default: return -1;
}
return 0;