1*b543b09fSZihao Yu #include <stdio.h> 2*b543b09fSZihao Yu #include <assert.h> 3*b543b09fSZihao Yu #include <stdint.h> 4*b543b09fSZihao Yu #include <string.h> 5*b543b09fSZihao Yu 6*b543b09fSZihao Yu char outname [4][4096]; 7*b543b09fSZihao Yu 8*b543b09fSZihao Yu int main(int argc, char *argv[]) { 9*b543b09fSZihao Yu assert(argc == 2); 10*b543b09fSZihao Yu 11*b543b09fSZihao Yu FILE *in = fopen(argv[1], "rb"); 12*b543b09fSZihao Yu assert(in != NULL); 13*b543b09fSZihao Yu 14*b543b09fSZihao Yu strcat(stpcpy(outname[0], argv[1]), "_0"); 15*b543b09fSZihao Yu strcat(stpcpy(outname[1], argv[1]), "_1"); 16*b543b09fSZihao Yu strcat(stpcpy(outname[2], argv[1]), "_2"); 17*b543b09fSZihao Yu strcat(stpcpy(outname[3], argv[1]), "_3"); 18*b543b09fSZihao Yu 19*b543b09fSZihao Yu FILE *out[4]; 20*b543b09fSZihao Yu out[0] = fopen(outname[0], "w"); 21*b543b09fSZihao Yu out[1] = fopen(outname[1], "w"); 22*b543b09fSZihao Yu out[2] = fopen(outname[2], "w"); 23*b543b09fSZihao Yu out[3] = fopen(outname[3], "w"); 24*b543b09fSZihao Yu assert(out[0] != NULL && out[1] != NULL && out[2] != NULL && out[3] != NULL); 25*b543b09fSZihao Yu 26*b543b09fSZihao Yu char line[128]; 27*b543b09fSZihao Yu int idx = 0; 28*b543b09fSZihao Yu while (fgets(line, 128, in) != NULL) { 29*b543b09fSZihao Yu if (line[0] == '@') { 30*b543b09fSZihao Yu uint32_t addr; 31*b543b09fSZihao Yu sscanf(line + 1, "%x", &addr); 32*b543b09fSZihao Yu assert(addr % 4 == 0); 33*b543b09fSZihao Yu fprintf(out[0], "\n@%08x\n", addr / 4); 34*b543b09fSZihao Yu fprintf(out[1], "\n@%08x\n", addr / 4); 35*b543b09fSZihao Yu fprintf(out[2], "\n@%08x\n", addr / 4); 36*b543b09fSZihao Yu fprintf(out[3], "\n@%08x\n", addr / 4); 37*b543b09fSZihao Yu idx = 0; 38*b543b09fSZihao Yu } 39*b543b09fSZihao Yu else { 40*b543b09fSZihao Yu // remove white spaces at the end 41*b543b09fSZihao Yu char *p = line + strlen(line) - 1; 42*b543b09fSZihao Yu while (p >= line && (*p == ' ' || *p == '\n' || *p == '\r')) p --; 43*b543b09fSZihao Yu p[1] = '\0'; 44*b543b09fSZihao Yu 45*b543b09fSZihao Yu p = line; 46*b543b09fSZihao Yu char *byte; 47*b543b09fSZihao Yu while ((byte = strsep(&p, " "))) { 48*b543b09fSZihao Yu fprintf(out[idx % 4], "%s ", byte); 49*b543b09fSZihao Yu idx ++; 50*b543b09fSZihao Yu } 51*b543b09fSZihao Yu 52*b543b09fSZihao Yu if ((idx >> 2) % 16 == 0) { 53*b543b09fSZihao Yu fprintf(out[0], "\n"); 54*b543b09fSZihao Yu fprintf(out[1], "\n"); 55*b543b09fSZihao Yu fprintf(out[2], "\n"); 56*b543b09fSZihao Yu fprintf(out[3], "\n"); 57*b543b09fSZihao Yu } 58*b543b09fSZihao Yu } 59*b543b09fSZihao Yu } 60*b543b09fSZihao Yu 61*b543b09fSZihao Yu fclose(in); 62*b543b09fSZihao Yu fclose(out[0]); 63*b543b09fSZihao Yu fclose(out[1]); 64*b543b09fSZihao Yu fclose(out[2]); 65*b543b09fSZihao Yu fclose(out[3]); 66*b543b09fSZihao Yu 67*b543b09fSZihao Yu return 0; 68*b543b09fSZihao Yu } 69