1*b543b09fSZihao Yu #include <stdio.h> 2*b543b09fSZihao Yu #include <assert.h> 3*b543b09fSZihao Yu #include <stdint.h> 4*b543b09fSZihao Yu 5*b543b09fSZihao Yu int main(int argc, char *argv[]) { 6*b543b09fSZihao Yu assert(argc == 3); 7*b543b09fSZihao Yu 8*b543b09fSZihao Yu FILE *in = fopen(argv[1], "rb"); 9*b543b09fSZihao Yu assert(in != NULL); 10*b543b09fSZihao Yu 11*b543b09fSZihao Yu FILE *out = fopen(argv[2], "w"); 12*b543b09fSZihao Yu assert(out != NULL); 13*b543b09fSZihao Yu 14*b543b09fSZihao Yu char line[128]; 15*b543b09fSZihao Yu uint32_t addr; 16*b543b09fSZihao Yu union { 17*b543b09fSZihao Yu uint8_t _8[4]; 18*b543b09fSZihao Yu uint32_t _32; 19*b543b09fSZihao Yu } data[4]; 20*b543b09fSZihao Yu while (fgets(line, 128, in) != NULL) { 21*b543b09fSZihao Yu if (line[0] == '@') { 22*b543b09fSZihao Yu sscanf(line + 1, "%x", &addr); 23*b543b09fSZihao Yu assert(addr % 4 == 0); 24*b543b09fSZihao Yu fprintf(out, "@%08x\n", addr / 4); 25*b543b09fSZihao Yu } 26*b543b09fSZihao Yu else { 27*b543b09fSZihao Yu int ret = sscanf(line, 28*b543b09fSZihao Yu "%hhx%hhx%hhx%hhx" 29*b543b09fSZihao Yu "%hhx%hhx%hhx%hhx" 30*b543b09fSZihao Yu "%hhx%hhx%hhx%hhx" 31*b543b09fSZihao Yu "%hhx%hhx%hhx%hhx", 32*b543b09fSZihao Yu &data[0]._8[0], &data[0]._8[1], &data[0]._8[2], &data[0]._8[3], 33*b543b09fSZihao Yu &data[1]._8[0], &data[1]._8[1], &data[1]._8[2], &data[1]._8[3], 34*b543b09fSZihao Yu &data[2]._8[0], &data[2]._8[1], &data[2]._8[2], &data[2]._8[3], 35*b543b09fSZihao Yu &data[3]._8[0], &data[3]._8[1], &data[3]._8[2], &data[3]._8[3]); 36*b543b09fSZihao Yu 37*b543b09fSZihao Yu assert(ret == EOF || ret == 4 || ret == 8 || ret == 12 || ret == 16); 38*b543b09fSZihao Yu 39*b543b09fSZihao Yu if (ret == EOF) continue; 40*b543b09fSZihao Yu 41*b543b09fSZihao Yu if (ret >= 4) fprintf(out, "%08x ", data[0]._32); 42*b543b09fSZihao Yu if (ret >= 8) fprintf(out, "%08x ", data[1]._32); 43*b543b09fSZihao Yu if (ret >= 12) fprintf(out, "%08x ", data[2]._32); 44*b543b09fSZihao Yu if (ret >= 16) fprintf(out, "%08x ", data[3]._32); 45*b543b09fSZihao Yu fprintf(out, "\n"); 46*b543b09fSZihao Yu } 47*b543b09fSZihao Yu } 48*b543b09fSZihao Yu 49*b543b09fSZihao Yu fclose(in); 50*b543b09fSZihao Yu fclose(out); 51*b543b09fSZihao Yu 52*b543b09fSZihao Yu return 0; 53*b543b09fSZihao Yu } 54