snake5 icon

c++ version

snake5 | PRO | 07/31/19 08:35:10 PM UTC | 0 ⭐ | 861 👁️ | Never ⏰ | []
C++ |

1.22 KB

|

None

|

0 👍

/

0 👎

 
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <inttypes.h>
 
char* get_file_contents(const char* filename)
{
    FILE *fp = fopen(filename, "rb");
    if (fp)
    {
        fseek(fp, 0, SEEK_END);
        int count = ftell(fp);
        char* contents = new char[count];
        rewind(fp);
        fread(contents, 1, count, fp);
        fclose(fp);
        return contents;
    }
    throw errno;
}
 
#define READA(name, type, size) \
    type name[size]; \
    read_##type(name, size); \
    printf(#name " = "); \
    dump(name, size); \
    puts("");
#define READ(name, type) \
    type name; \
    read_##type(&name, 1); \
    printf(#name " = "); \
    dump(name); \
    puts("");
typedef int32_t Int32;
 
struct reader
{
    char* data;
    int at = 0;
    
    void read_Int32(int32_t* out, int count)
    {
        memcpy(out, &data[at], 4);
        at += 4;
    }
    void read_char(char* out, int count)
    {
        memcpy(out, &data[at], count);
        at += count;
    }
    void dump(int32_t v)
    {
        printf("%d", v);
    }
    void dump(char* v, int count)
    {
        for (int i = 0; i < count; i++)
            fputc(v[i], stdout);
    }
};
 
struct myreader : reader
{
    myreader()
    {
        data = get_file_contents("loop.wav");
        READA(magic, char, 4);
        READ(size, Int32);
    }
};
 
int main()
{
    myreader();
}

Comments