== REDCODE ==
[blender.git] / extern / libredcode / format.c
index 35410e9e26916c09f928d501ccb4ef9e05c0a180..2406f3bb2c718c25b8afc12a78210140e5a8912b 100644 (file)
@@ -1,4 +1,3 @@
-#include <netinet/in.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -6,7 +5,7 @@
 
 struct red_reob {
        unsigned long len;
-       char head[4];
+       unsigned long head;
 
        unsigned long rdvo;
        unsigned long rdvs;
@@ -33,8 +32,15 @@ struct redcode_handle {
        unsigned long * rdao;
        unsigned long * rdas;
        long cfra;
+       long length;
 };
 
+unsigned long read_be32(unsigned long val)
+{
+       unsigned char * v = (unsigned char*) & val;
+       return  (v[0] << 24) | (v[1] << 16) | (v[2] << 8) | v[3];
+}
 
 static unsigned char* read_packet(FILE * fp, char * expect)
 {
@@ -47,7 +53,7 @@ static unsigned char* read_packet(FILE * fp, char * expect)
 
        head[4] = 0;
 
-       len = ntohl(len);
+       len = read_be32(len);
 
        if (strcmp(expect, head) != 0) {
                fprintf(stderr, "Read: %s, expect: %s\n", head, expect);
@@ -74,7 +80,7 @@ static unsigned long * read_index_packet(FILE * fp, char * expect)
        }
 
        for (i = 2; i < rv[0]/4; i++) {
-               rv[i] = ntohl(rv[i]);
+               rv[i] = read_be32(rv[i]);
        }
        return rv;
 }
@@ -104,6 +110,7 @@ struct redcode_handle * redcode_open(const char * fname)
 {
        struct redcode_handle * rv = NULL;
        struct red_reob * reob = NULL;
+       int i;
 
        FILE * fp = fopen(fname, "rb");
 
@@ -131,6 +138,12 @@ struct redcode_handle * redcode_open(const char * fname)
                return NULL;
        }
 
+       for (i = 0; i < (rv->rdvo[0] - 8)/4; i++) {
+               if (rv->rdvo[i + 2]) {
+                       rv->length = i;
+               }
+       }
+
        return rv;
 }
 
@@ -157,7 +170,7 @@ void redcode_close(struct redcode_handle * handle)
 
 long redcode_get_length(struct redcode_handle * handle)
 {
-       return handle->rdvo[0]/4;
+       return handle->length;
 }
 
 struct redcode_frame * redcode_read_video_frame(