- return packet.ptr+packet.total-data;
-}
-
-static void next_chunk(GlPacket *pkt)
-{
- if(pkt->total==0)
- return;
- pkt->chunk = pkt->total;
- read_int((int *)&pkt->chunk, pkt);
- pkt->chunk &= 0x7FFFFFFF;
-}
-
-static void read_generic(void *v, unsigned size, int byteswap, GlPacket *pkt)
-{
- if(pkt->chunk==0)
- next_chunk(pkt);
-
- if(pkt->chunk>=size)
- {
- // TODO: Actually implement byteswap if needed
- (void)byteswap;
- memcpy(v, pkt->ptr, size);
- pkt->ptr += size;
- pkt->chunk -= size;
- pkt->total -= size;
- }
- else
- {
- memset(v, 0, size);
- pkt->total -= pkt->chunk;
- pkt->chunk = 0;
- }
-}
-
-static void read_char(char *v, GlPacket *pkt)
-{
- read_generic(v, 1, 0, pkt);
-}
-
-static void read_short(short *v, GlPacket *pkt)
-{
- read_generic(v, sizeof(short), 1, pkt);
-}
-
-static void read_int(int *v, GlPacket *pkt)
-{
- read_generic(v, sizeof(int), 1, pkt);
-}
-
-static void read_long(long *v, GlPacket *pkt)
-{
- read_generic(v, sizeof(long), 1, pkt);
-}
-
-static void read_long_long(long long *v, GlPacket *pkt)
-{
- read_generic(v, sizeof(long long), 1, pkt);
-}
-
-static void read_float(float *v, GlPacket *pkt)
-{
- read_generic(v, sizeof(float), 1, pkt);
-}
-
-static void read_double(double *v, GlPacket *pkt)
-{
- read_generic(v, sizeof(double), 1, pkt);
-}
-
-typedef const void *pointer;
-
-static void read_pointer(pointer *v, GlPacket *pkt)
-{
- read_generic(v, sizeof(pointer), 1, pkt);
-}
-
-static void read_data(pointer *v, GlPacket *pkt)
-{
- int vlen;
- read_int(&vlen, pkt);
- if(vlen)
- *v = pkt->ptr;
- else
- *v = NULL;
- pkt->ptr += vlen;
- pkt->chunk -= vlen;
- pkt->total -= vlen;
-}
-
-typedef const char *string;
-
-static void read_string(string *v, GlPacket *pkt)
-{
- read_data((pointer *)v, pkt);
-}
-
-static void read_string_array(string **v, GlPacket *pkt)
-{
- int count;
- int i;
- read_int(&count, pkt);
- *v = (string *)tmpalloc(count*sizeof(string));
- for(i=0; i<count; ++i)
- read_string(*v+i, pkt);