510 /* Reads/writes 16/32 bit values using little endian */ /* Nice for reading MID files for example */ #include #include int to16bit(int c1, int c2); long to32bit(int c1, int c2, int c3, int c4); int read16bit(FILE *f); long read32bit(FILE *f); void write16bit(FILE *f, int data); void write32bit(FILE *f, unsigned long data); long to32bit(int c1, int c2, int c3, int c4) { long value = 0L; value = (c1 & 0xff); value = (value<<8) + (c2 & 0xff); value = (value<<8) + (c3 & 0xff); value = (value<<8) + (c4 & 0xff); return (value); } int to16bit(int c1, int c2) { return ((c1 & 0xff ) << 8) + (c2 & 0xff); } long read32bit(FILE *f) { int c1, c2, c3, c4; c1 = getc(f); c2 = getc(f); c3 = getc(f); c4 = getc(f); return to32bit(c1, c2, c3, c4); } int read16bit(FILE *f) { int c1, c2; c1 = getc(f); c2 = getc(f); return to16bit(c1, c2); } void write32bit(FILE *f, unsigned long data) { putc((unsigned)((data >> 24) & 0xffL), f); putc((unsigned)((data >> 16) & 0xffL), f); putc((unsigned)((data >> 8 ) & 0xffL), f); putc((unsigned)(data & 0xff), f); } void write16bit(FILE *f, int data) { putc((unsigned)((data & 0xff00) >> 8), f); putc((unsigned)(data & 0xff), f); } . 0