#include #include unsigned *buf; main(int argc, char *argv[]) { FILE *fpi, *fpo; int i, nc, n; long h, c; if(argc < 3) { printf("Syntax: BIN2ASM \n"); return 1; } if((buf = malloc(65280)) == NULL) { printf("Out of memory\n"); return 3; } if((fpi = fopen(argv[1], "rb")) == NULL) { printf("File not found: %s\n", argv[1]); return 2; } fpo = fopen(argv[2], "wt"); fseek(fpi, 0, SEEK_END); h = ftell(fpi); if(h > 65280) h = 65280; fseek(fpi, 0, SEEK_SET); fread(buf, h, 1, fpi); fclose(fpi); fprintf(fpo, "Data dw ", h); nc = 0; i = 0; while(i < h / 2) { c = buf[i]; if(i < (h - 4) / 2 && c == buf[i + 1] && c == buf[i + 2] && ((i < (h - 6) / 2 && c == buf[i + 3]) || (c > 99 && c < 65527)) && ((i < (h - 8) / 2 && c == buf[i + 4]) || c > 9)) { n = 0; while(c == buf[i + n] && i + n < h / 2) n++; if(c < 64537) nc += fprintf(fpo, "%u dup(%u)", n, c); else nc += fprintf(fpo, "%u dup(%d)", n, c); i += n; } else { if(c < 64537) nc += fprintf(fpo, "%u", c); else nc += fprintf(fpo, "%d", c); i++; } if(i < h / 2) { if(nc >= 60) { nc = 0; fprintf(fpo, "\n dw "); } else { nc++; fprintf(fpo, ","); } } } if(h & 1) { c = buf[(h + 1) / 2]; c >>= 8; fprintf(fpo, "\n db %u", c); } fclose(fpo); return 0; }