X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=share%2Fbinary.c;h=4093d3be2642f2e0427154b9bb398ace3bf96116;hb=4483dfdacd29073b37a6429ca8e123c80deac75a;hp=683f59eeac7e0a5869733310cc704a1f5ca6bff7;hpb=c6d6c9e34bdbdc6e4d9e922130f8a8b0f3a0d20a;p=neverball diff --git a/share/binary.c b/share/binary.c index 683f59e..4093d3b 100644 --- a/share/binary.c +++ b/share/binary.c @@ -14,47 +14,62 @@ #include #include +#include -#include -#include +#include + +#include "fs.h" /*---------------------------------------------------------------------------*/ -void put_float(FILE *fout, const float *f) +void put_float(fs_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); - fputc((int) p[2], fout); - fputc((int) p[1], fout); - fputc((int) p[0], fout); + fs_putc((int) p[3], fout); + fs_putc((int) p[2], fout); + fs_putc((int) p[1], fout); + fs_putc((int) p[0], fout); #else - fputc((int) p[0], fout); - fputc((int) p[1], fout); - fputc((int) p[2], fout); - fputc((int) p[3], fout); + fs_putc((int) p[0], fout); + fs_putc((int) p[1], fout); + fs_putc((int) p[2], fout); + fs_putc((int) p[3], fout); #endif } -void put_index(FILE *fout, const int *i) +void put_index(fs_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); - fputc((int) p[2], fout); - fputc((int) p[1], fout); - fputc((int) p[0], fout); + fs_putc((int) p[3], fout); + fs_putc((int) p[2], fout); + fs_putc((int) p[1], fout); + fs_putc((int) p[0], fout); #else - fputc((int) p[0], fout); - fputc((int) p[1], fout); - fputc((int) p[2], fout); - fputc((int) p[3], fout); + fs_putc((int) p[0], fout); + fs_putc((int) p[1], fout); + fs_putc((int) p[2], fout); + fs_putc((int) p[3], fout); #endif } -void put_array(FILE *fout, const float *v, size_t n) +void put_short(fs_file fout, const short *s) +{ + const unsigned char *p = (const unsigned char *) s; + +#if SDL_BYTEORDER == SDL_BIG_ENDIAN + fs_putc((int) p[1], fout); + fs_putc((int) p[0], fout); +#else + fs_putc((int) p[0], fout); + fs_putc((int) p[1], fout); +#endif +} + +void put_array(fs_file fout, const float *v, size_t n) { size_t i; @@ -64,41 +79,54 @@ void put_array(FILE *fout, const float *v, size_t n) /*---------------------------------------------------------------------------*/ -void get_float(FILE *fin, float *f) +void get_float(fs_file fin, float *f) { unsigned char *p = (unsigned char *) f; #if SDL_BYTEORDER == SDL_BIG_ENDIAN - p[3] = (unsigned char) fgetc(fin); - p[2] = (unsigned char) fgetc(fin); - p[1] = (unsigned char) fgetc(fin); - p[0] = (unsigned char) fgetc(fin); + p[3] = (unsigned char) fs_getc(fin); + p[2] = (unsigned char) fs_getc(fin); + p[1] = (unsigned char) fs_getc(fin); + p[0] = (unsigned char) fs_getc(fin); #else - p[0] = (unsigned char) fgetc(fin); - p[1] = (unsigned char) fgetc(fin); - p[2] = (unsigned char) fgetc(fin); - p[3] = (unsigned char) fgetc(fin); + p[0] = (unsigned char) fs_getc(fin); + p[1] = (unsigned char) fs_getc(fin); + p[2] = (unsigned char) fs_getc(fin); + p[3] = (unsigned char) fs_getc(fin); #endif } -void get_index(FILE *fin, int *i) +void get_index(fs_file fin, int *i) { unsigned char *p = (unsigned char *) i; #if SDL_BYTEORDER == SDL_BIG_ENDIAN - p[3] = (unsigned char) fgetc(fin); - p[2] = (unsigned char) fgetc(fin); - p[1] = (unsigned char) fgetc(fin); - p[0] = (unsigned char) fgetc(fin); + p[3] = (unsigned char) fs_getc(fin); + p[2] = (unsigned char) fs_getc(fin); + p[1] = (unsigned char) fs_getc(fin); + p[0] = (unsigned char) fs_getc(fin); #else - p[0] = (unsigned char) fgetc(fin); - p[1] = (unsigned char) fgetc(fin); - p[2] = (unsigned char) fgetc(fin); - p[3] = (unsigned char) fgetc(fin); + p[0] = (unsigned char) fs_getc(fin); + p[1] = (unsigned char) fs_getc(fin); + p[2] = (unsigned char) fs_getc(fin); + p[3] = (unsigned char) fs_getc(fin); #endif } -void get_array(FILE *fin, float *v, size_t n) +void get_short(fs_file fin, short *s) +{ + unsigned char *p = (unsigned char *) s; + +#if SDL_BYTEORDER == SDL_BIG_ENDIAN + p[1] = (unsigned char) fs_getc(fin); + p[0] = (unsigned char) fs_getc(fin); +#else + p[0] = (unsigned char) fs_getc(fin); + p[1] = (unsigned char) fs_getc(fin); +#endif +} + +void get_array(fs_file fin, float *v, size_t n) { size_t i; @@ -107,3 +135,33 @@ void get_array(FILE *fin, float *v, size_t n) } /*---------------------------------------------------------------------------*/ + +void put_string(fs_file fout, const char *s) +{ + fs_puts(s, fout); + fs_putc('\0', fout); +} + +void get_string(fs_file fin, char *s, int max) +{ + int c; + + while ((c = fs_getc(fin)) >= 0) + { + if (max > 0) + { + *s++ = c; + max--; + + /* Terminate the string, but keep reading until NUL. */ + + if (max == 0) + *(s - 1) = 0; + } + + if (c == 0) + break; + } +} + +/*---------------------------------------------------------------------------*/