Correct logic of BSP back/front tests
[neverball] / share / binary.c
index c66672e..1ada5ed 100644 (file)
 #include <stdlib.h>
 #include <string.h>
 
-#include <SDL.h>
-#include <SDL_byteorder.h>
+#include <SDL_endian.h>
 
 /*---------------------------------------------------------------------------*/
 
 void put_float(FILE *fout, const float *f)
 {
-    unsigned char *p = (unsigned char *) f;
+    const unsigned char *p = (const unsigned char *) f;
 
 #if SDL_BYTEORDER == SDL_BIG_ENDIAN
     fputc((int) p[3], fout);
@@ -40,7 +39,7 @@ void put_float(FILE *fout, const float *f)
 
 void put_index(FILE *fout, const int *i)
 {
-    unsigned char *p = (unsigned char *) i;
+    const unsigned char *p = (const unsigned char *) i;
 
 #if SDL_BYTEORDER == SDL_BIG_ENDIAN
     fputc((int) p[3], fout);
@@ -55,6 +54,19 @@ void put_index(FILE *fout, const int *i)
 #endif
 }
 
+void put_short(FILE *fout, const short *s)
+{
+    const unsigned char *p = (const unsigned char *) s;
+
+#if SDL_BYTEORDER == SDL_BIG_ENDIAN
+    fputc((int) p[1], fout);
+    fputc((int) p[0], fout);
+#else
+    fputc((int) p[0], fout);
+    fputc((int) p[1], fout);
+#endif
+}
+
 void put_array(FILE *fout, const float *v, size_t n)
 {
     size_t i;
@@ -63,13 +75,6 @@ void put_array(FILE *fout, const float *v, size_t n)
         put_float(fout, v + i);
 }
 
-void put_string(FILE *fp, char *str)
-{
-    int len = strlen(str) + 1;
-    fwrite(str, 1, len,  fp);
-}
-
-
 /*---------------------------------------------------------------------------*/
 
 void get_float(FILE *fin, float *f)
@@ -106,6 +111,19 @@ void get_index(FILE *fin, int *i)
 #endif
 }
 
+void get_short(FILE *fin, short *s)
+{
+    unsigned char *p = (unsigned char *) s;
+
+#if SDL_BYTEORDER == SDL_BIG_ENDIAN
+    p[1] = (unsigned char) fgetc(fin);
+    p[0] = (unsigned char) fgetc(fin);
+#else
+    p[0] = (unsigned char) fgetc(fin);
+    p[1] = (unsigned char) fgetc(fin);
+#endif
+}
+
 void get_array(FILE *fin, float *v, size_t n)
 {
     size_t i;
@@ -114,23 +132,22 @@ void get_array(FILE *fin, float *v, size_t n)
         get_float(fin, v + i);
 }
 
-void get_string(FILE *fp, char *str, int len)
-/* len includes room for '\0'.  If len is too small, the string is truncated. */
+/*---------------------------------------------------------------------------*/
+
+void put_string(FILE *fout, const char *s)
 {
-    char b;
-
-    while (1)
-    {
-        fread(&b, 1, 1, fp);
-        if (len > 0)
-        {
-            *(str++) = (len > 1 ? b : '\0');
-            len--;
-        }
-        if (b == '\0')
-            return;
-    }
+    fputs(s, fout);
+    fputc('\0', fout);
 }
 
+void get_string(FILE *fin, char *s, int max)
+{
+    do
+        *s = (char) fgetc(fin);
+    while (*s++ != '\0' && max-- > 0);
+
+    if(*(s - 1) != '\0')
+        *(s - 1) = '\0';
+}
 
 /*---------------------------------------------------------------------------*/