// Copyright © 2017 Project Golan, all rights reserved. // See COPYING for more information. #include "m_binio.h" #include #include // Extern Functions ----------------------------------------------------------| // // M_IO_WriteLE2u // void M_IO_WriteLE2u(FILE *fp, hword v) { fputc((v >> 8) & 0xFF, fp); fputc((v >> 0) & 0xFF, fp); } // // M_IO_WriteLE4u // void M_IO_WriteLE4u(FILE *fp, mword v) { fputc((v >> 24) & 0xFF, fp); fputc((v >> 16) & 0xFF, fp); fputc((v >> 8) & 0xFF, fp); fputc((v >> 0) & 0xFF, fp); } // // M_IO_WriteLE4k // void M_IO_WriteLE4k(FILE *fp, fixed v) { #if __GDCC__ M_IO_WriteLE4u(fp, (union {fixed k; mword u;}){v}.u); #else float a = fabsf(v); mword k = ((mword)a << 7) & 0x7FFFFF80; k |= (mword)(fmod(a, 1) * 0x7F) & 0x7F; if(v < 0) k = ~k + 1; M_IO_WriteLE4u(fp, k); #endif } // // M_IO_ReadLE2u // hword M_IO_ReadLE2u(FILE *fp) { mbyte data[2]; fread(data, 1, 2, fp); return ((hword)data[1] << 0) | ((hword)data[0] << 8); } // // M_IO_ReadLE4u // mword M_IO_ReadLE4u(FILE *fp) { mbyte data[4]; fread(data, 1, 4, fp); return ((mword)data[3] << 0) | ((mword)data[2] << 8) | ((mword)data[1] << 16) | ((mword)data[0] << 24); } // // M_IO_ReadLE4k // fixed M_IO_ReadLE4k(FILE *fp) { #if __GDCC__ return (union {mword u; fixed k;}){M_IO_ReadLE4u(fp)}.k; #else mword u = M_IO_ReadLE4u(fp); return (integ)u / 127.0; #endif } // EOF