2017-09-22 14:06:52 -07:00
|
|
|
// Copyright © 2017 Project Golan, all rights reserved.
|
|
|
|
#include "m_binio.h"
|
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <math.h>
|
|
|
|
|
|
|
|
// Extern Functions ----------------------------------------------------------|
|
|
|
|
|
2017-09-23 12:43:54 -07:00
|
|
|
//
|
|
|
|
// M_IO_WriteLE2u
|
|
|
|
//
|
|
|
|
void M_IO_WriteLE2u(FILE *fp, hword v)
|
|
|
|
{
|
|
|
|
fputc((v >> 8) & 0xFF, fp);
|
|
|
|
fputc((v >> 0) & 0xFF, fp);
|
|
|
|
}
|
|
|
|
|
2017-09-22 14:06:52 -07:00
|
|
|
//
|
|
|
|
// 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
|
|
|
|
//
|
2017-09-22 17:51:35 -07:00
|
|
|
void M_IO_WriteLE4k(FILE *fp, fixed v)
|
2017-09-22 14:06:52 -07:00
|
|
|
{
|
2017-09-22 17:51:35 -07:00
|
|
|
#if __GDCC__
|
2017-09-23 12:43:54 -07:00
|
|
|
M_IO_WriteLE4u(fp, (union {fixed k; mword u;}){v}.u);
|
2017-09-22 17:51:35 -07:00
|
|
|
#else
|
2017-09-22 14:06:52 -07:00
|
|
|
float a = fabsf(v);
|
|
|
|
mword k = ((mword)a << 7) & 0x7FFFFF80;
|
|
|
|
k |= (mword)(fmod(a, 1) * 0x7F) & 0x7F;
|
2017-09-23 12:43:54 -07:00
|
|
|
if(v < 0) k = ~k + 1;
|
2017-09-22 14:06:52 -07:00
|
|
|
M_IO_WriteLE4u(fp, k);
|
2017-09-22 17:51:35 -07:00
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
2017-09-23 12:43:54 -07:00
|
|
|
//
|
|
|
|
// 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);
|
|
|
|
}
|
|
|
|
|
2017-09-22 17:51:35 -07:00
|
|
|
//
|
|
|
|
// M_IO_ReadLE4u
|
|
|
|
//
|
|
|
|
mword M_IO_ReadLE4u(FILE *fp)
|
|
|
|
{
|
|
|
|
mbyte data[4];
|
|
|
|
fread(data, 1, 4, fp);
|
2017-09-23 12:43:54 -07:00
|
|
|
return ((mword)data[3] << 0) | ((mword)data[2] << 8) |
|
|
|
|
((mword)data[1] << 16) | ((mword)data[0] << 24);
|
2017-09-22 17:51:35 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
//
|
|
|
|
// 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);
|
2017-09-23 12:43:54 -07:00
|
|
|
return (integ)u / 127.0;
|
2017-09-22 17:51:35 -07:00
|
|
|
#endif
|
2017-09-22 14:06:52 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
// EOF
|