/*
 * Convert a data file into a .S file suitable for assembly.
 * This reads from stdin and writes to stdout and takes a single
 * argument for the name of the symbol in the assembly file.
 */

#include <stdio.h>

int main(int argc, char *argv[]) {
    unsigned char buf[4096];
    size_t amt;
    size_t i;
    int col = 0;
    char *name = argv[1];

    printf("\
#ifdef __APPLE_CC__\n\
/*\n\
 * The mid-2007 version of gcc that ships with Macs requires a\n\
 * comma on the .section line, but the rest of the world thinks\n\
 * that's a syntax error. It also wants globals to be explicitly\n\
 * prefixed with \"_\" as opposed to modern gccs that do the\n\
 * prefixing for you.\n\
 */\n\
.globl _%s\n\
	.section .rodata,\n\
	.align 8\n\
_%s:\n\
#else\n\
.globl %s\n\
	.section .rodata\n\
	.align 8\n\
%s:\n\
#endif\n\
", name, name, name, name);
    
    while (! feof(stdin)) {
        amt = fread(buf, 1, sizeof(buf), stdin);
        for (i = 0; i < amt; i++) {
            printf((col == 0) ? ".byte %3d" : ",%3d", buf[i]);
            col++;
            if (col == 16) {
                printf("\n");
                col = 0;
            }
        }
    }

    if (col != 0) {
        printf("\n");
    }
}
