diff options
| author | Henny022p <info@henny022.de> | 2021-11-23 09:31:09 +0100 |
|---|---|---|
| committer | Henny022p <info@henny022.de> | 2021-11-23 09:31:09 +0100 |
| commit | dee773da4a12af1c48bf58d6275fe4fed20871b6 (patch) | |
| tree | 95b99e35c56c3d92a48f3becd484028a2a0fc745 /tools/src | |
| parent | 5f41468ba85deca14747b9dd23ca7a1cf6bdd2a4 (diff) | |
apply clang-format to tool sources
Diffstat (limited to 'tools/src')
54 files changed, 5867 insertions, 7112 deletions
diff --git a/tools/src/aif2pcm/extended.c b/tools/src/aif2pcm/extended.c index 94449164..33911c01 100755..100644 --- a/tools/src/aif2pcm/extended.c +++ b/tools/src/aif2pcm/extended.c @@ -35,12 +35,12 @@ */ #ifndef HUGE_VAL #ifdef HUGE -#define INFINITE_VALUE HUGE -#define NAN_VALUE HUGE +#define INFINITE_VALUE HUGE +#define NAN_VALUE HUGE #endif #else -#define INFINITE_VALUE HUGE_VAL -#define NAN_VALUE HUGE_VAL +#define INFINITE_VALUE HUGE_VAL +#define NAN_VALUE HUGE_VAL #endif /* @@ -62,111 +62,103 @@ /* * Write IEEE Extended Precision Numbers */ -void -ieee754_write_extended(double in, uint8_t* out) -{ - int sgn, exp, shift; - double fraction, t; - unsigned int lexp, hexp; - unsigned long low, high; - - if (in == 0.0) { - memset(out, 0, 10); - return; - } - if (in < 0.0) { - in = fabs(in); - sgn = 1; - } else - sgn = 0; - - fraction = frexp(in, &exp); - - if (exp == 0 || exp > 16384) { - if (exp > 16384) /* infinite value */ - low = high = 0; - else { - low = 0x80000000; - high = 0; - } - exp = 32767; - goto done; - } - fraction = ldexp(fraction, 32); - t = floor(fraction); - low = (unsigned long) t; - fraction -= t; - t = floor(ldexp(fraction, 32)); - high = (unsigned long) t; - - /* Convert exponents < -16382 to -16382 (then they will be - * stored as -16383) */ - if (exp < -16382) { - shift = 0 - exp - 16382; - high >>= shift; - high |= (low << (32 - shift)); - low >>= shift; - exp = -16382; - } - exp += 16383 - 1; /* bias */ +void ieee754_write_extended(double in, uint8_t* out) { + int sgn, exp, shift; + double fraction, t; + unsigned int lexp, hexp; + unsigned long low, high; + + if (in == 0.0) { + memset(out, 0, 10); + return; + } + if (in < 0.0) { + in = fabs(in); + sgn = 1; + } else + sgn = 0; + + fraction = frexp(in, &exp); + + if (exp == 0 || exp > 16384) { + if (exp > 16384) /* infinite value */ + low = high = 0; + else { + low = 0x80000000; + high = 0; + } + exp = 32767; + goto done; + } + fraction = ldexp(fraction, 32); + t = floor(fraction); + low = (unsigned long)t; + fraction -= t; + t = floor(ldexp(fraction, 32)); + high = (unsigned long)t; + + /* Convert exponents < -16382 to -16382 (then they will be + * stored as -16383) */ + if (exp < -16382) { + shift = 0 - exp - 16382; + high >>= shift; + high |= (low << (32 - shift)); + low >>= shift; + exp = -16382; + } + exp += 16383 - 1; /* bias */ done: - lexp = ((unsigned int) exp) >> 8; - hexp = ((unsigned int) exp) & 0xFF; - - /* big endian */ - out[0] = ((uint8_t) sgn) << 7; - out[0] |= (uint8_t) lexp; - out[1] = (uint8_t) hexp; - out[2] = (uint8_t) (low >> 24); - out[3] = (uint8_t) ((low >> 16) & 0xFF); - out[4] = (uint8_t) ((low >> 8) & 0xFF); - out[5] = (uint8_t) (low & 0xFF); - out[6] = (uint8_t) (high >> 24); - out[7] = (uint8_t) ((high >> 16) & 0xFF); - out[8] = (uint8_t) ((high >> 8) & 0xFF); - out[9] = (uint8_t) (high & 0xFF); - - return; + lexp = ((unsigned int)exp) >> 8; + hexp = ((unsigned int)exp) & 0xFF; + + /* big endian */ + out[0] = ((uint8_t)sgn) << 7; + out[0] |= (uint8_t)lexp; + out[1] = (uint8_t)hexp; + out[2] = (uint8_t)(low >> 24); + out[3] = (uint8_t)((low >> 16) & 0xFF); + out[4] = (uint8_t)((low >> 8) & 0xFF); + out[5] = (uint8_t)(low & 0xFF); + out[6] = (uint8_t)(high >> 24); + out[7] = (uint8_t)((high >> 16) & 0xFF); + out[8] = (uint8_t)((high >> 8) & 0xFF); + out[9] = (uint8_t)(high & 0xFF); + + return; } - /* * Read IEEE Extended Precision Numbers */ -double -ieee754_read_extended(uint8_t* in) -{ - int sgn, exp; - unsigned long low, high; - double out; - - /* Extract the components from the big endian buffer */ - sgn = (int) (in[0] >> 7); - exp = ((int) (in[0] & 0x7F) << 8) | ((int) in[1]); - low = (((unsigned long) in[2]) << 24) - | (((unsigned long) in[3]) << 16) - | (((unsigned long) in[4]) << 8) | (unsigned long) in[5]; - high = (((unsigned long) in[6]) << 24) - | (((unsigned long) in[7]) << 16) - | (((unsigned long) in[8]) << 8) | (unsigned long) in[9]; - - if (exp == 0 && low == 0 && high == 0) - return (sgn ? -0.0 : 0.0); - - switch (exp) { - case 32767: - if (low == 0 && high == 0) - return (sgn ? -INFINITE_VALUE : INFINITE_VALUE); - else - return (sgn ? -NAN_VALUE : NAN_VALUE); - default: - exp -= 16383; /* unbias exponent */ - - } - - out = ldexp((double) low, -31 + exp); - out += ldexp((double) high, -63 + exp); - - return (sgn ? -out : out); +double ieee754_read_extended(uint8_t* in) { + int sgn, exp; + unsigned long low, high; + double out; + + /* Extract the components from the big endian buffer */ + sgn = (int)(in[0] >> 7); + exp = ((int)(in[0] & 0x7F) << 8) | ((int)in[1]); + low = (((unsigned long)in[2]) << 24) | (((unsigned long)in[3]) << 16) | (((unsigned long)in[4]) << 8) | + (unsigned long)in[5]; + high = (((unsigned long)in[6]) << 24) | (((unsigned long)in[7]) << 16) | (((unsigned long)in[8]) << 8) | + (unsigned long)in[9]; + + if (exp == 0 && low == 0 && high == 0) + return (sgn ? -0.0 : 0.0); + + switch (exp) { + case 32767: + if (low == 0 && high == 0) + return (sgn ? -INFINITE_VALUE : INFINITE_VALUE); + else + return (sgn ? -NAN_VALUE : NAN_VALUE); + default: + exp -= 16383; /* unbias exponent */ + } + + out = ldexp((double)low, -31 + exp); + out += ldexp((double)high, -63 + exp); + + return (sgn ? -out : out); } diff --git a/tools/src/aif2pcm/main.c b/tools/src/aif2pcm/main.c index cd5ac4a5..50616519 100755..100644 --- a/tools/src/aif2pcm/main.c +++ b/tools/src/aif2pcm/main.c @@ -26,863 +26,774 @@ #include <limits.h> /* extended.c */ -void ieee754_write_extended (double, uint8_t*); -double ieee754_read_extended (uint8_t*); +void ieee754_write_extended(double, uint8_t*); +double ieee754_read_extended(uint8_t*); #ifdef _MSC_VER -#define FATAL_ERROR(format, ...) \ -do \ -{ \ - fprintf(stderr, format, __VA_ARGS__); \ - exit(1); \ -} while (0) +#define FATAL_ERROR(format, ...) \ + do { \ + fprintf(stderr, format, __VA_ARGS__); \ + exit(1); \ + } while (0) #else -#define FATAL_ERROR(format, ...) \ -do \ -{ \ - fprintf(stderr, format, ##__VA_ARGS__); \ - exit(1); \ -} while (0) +#define FATAL_ERROR(format, ...) \ + do { \ + fprintf(stderr, format, ##__VA_ARGS__); \ + exit(1); \ + } while (0) #endif // _MSC_VER typedef struct { - unsigned long num_samples; - uint8_t *samples; - uint8_t midi_note; - bool has_loop; - unsigned long loop_offset; - double sample_rate; - unsigned long real_num_samples; + unsigned long num_samples; + uint8_t* samples; + uint8_t midi_note; + bool has_loop; + unsigned long loop_offset; + double sample_rate; + unsigned long real_num_samples; } AifData; struct Bytes { - unsigned long length; - uint8_t *data; + unsigned long length; + uint8_t* data; }; struct Marker { - unsigned short id; - unsigned long position; - // don't care about the name + unsigned short id; + unsigned long position; + // don't care about the name }; -struct Bytes *read_bytearray(const char *filename) -{ - struct Bytes *bytes = malloc(sizeof(struct Bytes)); - FILE *f = fopen(filename, "rb"); - if (!f) - { - FATAL_ERROR("Failed to open '%s' for reading!\n", filename); - } - fseek(f, 0, SEEK_END); - bytes->length = ftell(f); - fseek(f, 0, SEEK_SET); - bytes->data = malloc(bytes->length); - unsigned long read = fread(bytes->data, bytes->length, 1, f); - fclose(f); - if (read <= 0) - { - FATAL_ERROR("Failed to read data from '%s'!\n", filename); - } - return bytes; +struct Bytes* read_bytearray(const char* filename) { + struct Bytes* bytes = malloc(sizeof(struct Bytes)); + FILE* f = fopen(filename, "rb"); + if (!f) { + FATAL_ERROR("Failed to open '%s' for reading!\n", filename); + } + fseek(f, 0, SEEK_END); + bytes->length = ftell(f); + fseek(f, 0, SEEK_SET); + bytes->data = malloc(bytes->length); + unsigned long read = fread(bytes->data, bytes->length, 1, f); + fclose(f); + if (read <= 0) { + FATAL_ERROR("Failed to read data from '%s'!\n", filename); + } + return bytes; } -void write_bytearray(const char *filename, struct Bytes *bytes) -{ - FILE *f = fopen(filename, "wb"); - if (!f) - { - FATAL_ERROR("Failed to open '%s' for writing!\n", filename); - } - fwrite(bytes->data, bytes->length, 1, f); - fclose(f); +void write_bytearray(const char* filename, struct Bytes* bytes) { + FILE* f = fopen(filename, "wb"); + if (!f) { + FATAL_ERROR("Failed to open '%s' for writing!\n", filename); + } + fwrite(bytes->data, bytes->length, 1, f); + fclose(f); } -void free_bytearray(struct Bytes *bytes) -{ - free(bytes->data); - free(bytes); +void free_bytearray(struct Bytes* bytes) { + free(bytes->data); + free(bytes); } -char *get_file_extension(char *filename) -{ - char *index = strrchr(filename, '.'); - if (!index || index == filename) - { - return NULL; - } - return index + 1; +char* get_file_extension(char* filename) { + char* index = strrchr(filename, '.'); + if (!index || index == filename) { + return NULL; + } + return index + 1; } -char *new_file_extension(char *filename, char *ext) -{ - char *index = strrchr(filename, '.'); - if (!index || index == filename) - { - index = filename + strlen(filename); - } - int length = index - filename; - char *new_filename = malloc(length + 1 + strlen(ext) + 1); - if (new_filename) - { - strcpy(new_filename, filename); - new_filename[length] = '.'; - strcpy(new_filename + length + 1, ext); - } - return new_filename; +char* new_file_extension(char* filename, char* ext) { + char* index = strrchr(filename, '.'); + if (!index || index == filename) { + index = filename + strlen(filename); + } + int length = index - filename; + char* new_filename = malloc(length + 1 + strlen(ext) + 1); + if (new_filename) { + strcpy(new_filename, filename); + new_filename[length] = '.'; + strcpy(new_filename + length + 1, ext); + } + return new_filename; } -void read_aif(struct Bytes *aif, AifData *aif_data) -{ - aif_data->has_loop = false; - aif_data->num_samples = 0; - - unsigned long pos = 0; - char chunk_name[5]; chunk_name[4] = '\0'; - char chunk_type[5]; chunk_type[4] = '\0'; - - // Check for FORM Chunk - memcpy(chunk_name, &aif->data[pos], 4); - pos += 4; - if (strcmp(chunk_name, "FORM") != 0) - { - FATAL_ERROR("Input .aif file has invalid header Chunk '%s'!\n", chunk_name); - } - - // Read size of whole file. - unsigned long whole_chunk_size = aif->data[pos++] << 24; - whole_chunk_size |= (aif->data[pos++] << 16); - whole_chunk_size |= (aif->data[pos++] << 8); - whole_chunk_size |= (uint8_t)aif->data[pos++]; - - unsigned long expected_whole_chunk_size = aif->length - 8; - if (whole_chunk_size != expected_whole_chunk_size) - { - FATAL_ERROR("FORM Chunk ckSize '%lu' doesn't match actual size '%lu'!\n", whole_chunk_size, expected_whole_chunk_size); - } - - // Check for AIFF Form Type - memcpy(chunk_type, &aif->data[pos], 4); - pos += 4; - if (strcmp(chunk_type, "AIFF") != 0) - { - FATAL_ERROR("FORM Type is '%s', but it must be AIFF!", chunk_type); - } - - struct Marker *markers = NULL; - unsigned short num_markers = 0, loop_start = 0, loop_end = 0; - unsigned long num_sample_frames = 0; - - // Read all the Chunks to populate the AifData struct. - while ((pos + 8) < aif->length) - { - // Read Chunk id - memcpy(chunk_name, &aif->data[pos], 4); - pos += 4; - - unsigned long chunk_size = (aif->data[pos++] << 24); - chunk_size |= (aif->data[pos++] << 16); - chunk_size |= (aif->data[pos++] << 8); - chunk_size |= aif->data[pos++]; - - if ((pos + chunk_size) > aif->length) - { - FATAL_ERROR("%s chunk at 0x%lx reached end of file before finishing\n", chunk_name, pos); - } - - if (strcmp(chunk_name, "COMM") == 0) - { - short num_channels = (aif->data[pos++] << 8); - num_channels |= (uint8_t)aif->data[pos++]; - if (num_channels != 1) - { - FATAL_ERROR("numChannels (%d) in the COMM Chunk must be 1!\n", num_channels); - } - - num_sample_frames = (aif->data[pos++] << 24); - num_sample_frames |= (aif->data[pos++] << 16); - num_sample_frames |= (aif->data[pos++] << 8); - num_sample_frames |= (uint8_t)aif->data[pos++]; - - short sample_size = (aif->data[pos++] << 8); - sample_size |= (uint8_t)aif->data[pos++]; - if (sample_size != 8) - { - FATAL_ERROR("sampleSize (%d) in the COMM Chunk must be 8!\n", sample_size); - } - - double sample_rate = ieee754_read_extended((uint8_t*)(aif->data + pos)); - pos += 10; - - aif_data->sample_rate = sample_rate; - - if (aif_data->num_samples == 0) - { - aif_data->num_samples = num_sample_frames; - } - } - else if (strcmp(chunk_name, "MARK") == 0) - { - num_markers = (aif->data[pos++] << 8); - num_markers |= (uint8_t)aif->data[pos++]; - - if (markers) - { - FATAL_ERROR("More than one MARK Chunk in file!\n"); - } - - markers = calloc(num_markers, sizeof(struct Marker)); - - // Read each marker. - for (int i = 0; i < num_markers; i++) - { - unsigned short marker_id = (aif->data[pos++] << 8); - marker_id |= (uint8_t)aif->data[pos++]; - - unsigned long marker_position = (aif->data[pos++] << 24); - marker_position |= (aif->data[pos++] << 16); - marker_position |= (aif->data[pos++] << 8); - marker_position |= (uint8_t)aif->data[pos++]; - - // Marker name is a Pascal-style string. - uint8_t marker_name_size = aif->data[pos++]; - // We don't actually need the marker name for anything anymore. - /*char *marker_name = (char *)malloc((marker_name_size + 1) * sizeof(char)); - memcpy(marker_name, &aif->data[pos], marker_name_size); - marker_name[marker_name_size] = '\0';*/ - pos += marker_name_size + !(marker_name_size & 1); - - markers[i].id = marker_id; - markers[i].position = marker_position; - } - } - else if (strcmp(chunk_name, "INST") == 0) - { - uint8_t midi_note = (uint8_t)aif->data[pos++]; - - aif_data->midi_note = midi_note; - - // Skip over data we don't need. - pos += 7; - - unsigned short loop_type = (aif->data[pos++] << 8); - loop_type |= (uint8_t)aif->data[pos++]; - - if (loop_type) - { - loop_start = (aif->data[pos++] << 8); - loop_start |= (uint8_t)aif->data[pos++]; - - loop_end = (aif->data[pos++] << 8); - loop_end |= (uint8_t)aif->data[pos++]; - } - else - { - // Skip NoLooping sustain loop. - pos += 4; - } - - // Skip release loop, we don't need it. - pos += 6; - } - else if (strcmp(chunk_name, "SSND") == 0) - { - // Skip offset and blockSize - pos += 8; - - unsigned long num_samples = chunk_size - 8; - uint8_t *sample_data = (uint8_t *)malloc(num_samples * sizeof(uint8_t)); - memcpy(sample_data, &aif->data[pos], num_samples); - - aif_data->samples = sample_data; - aif_data->real_num_samples = num_samples; - pos += chunk_size - 8; - } - else - { - // Skip over unsupported chunks. - pos += chunk_size; - } - } - - if (markers) - { - // Resolve loop points. - struct Marker *cur_marker = markers; - - // Grab loop start point. - for (int i = 0; i < num_markers; i++, cur_marker++) - { - if (cur_marker->id == loop_start) - { - aif_data->loop_offset = cur_marker->position; - aif_data->has_loop = true; - break; - } - } - - cur_marker = markers; - - // Grab loop end point. - for (int i = 0; i < num_markers; i++, cur_marker++) - { - if (cur_marker->id == loop_end) - { - if (cur_marker->position < aif_data->loop_offset) { - aif_data->loop_offset = cur_marker->position; - aif_data->has_loop = true; - } - aif_data->num_samples = cur_marker->position; - break; - } - } - - free(markers); - } +void read_aif(struct Bytes* aif, AifData* aif_data) { + aif_data->has_loop = false; + aif_data->num_samples = 0; + + unsigned long pos = 0; + char chunk_name[5]; + chunk_name[4] = '\0'; + char chunk_type[5]; + chunk_type[4] = '\0'; + + // Check for FORM Chunk + memcpy(chunk_name, &aif->data[pos], 4); + pos += 4; + if (strcmp(chunk_name, "FORM") != 0) { + FATAL_ERROR("Input .aif file has invalid header Chunk '%s'!\n", chunk_name); + } + + // Read size of whole file. + unsigned long whole_chunk_size = aif->data[pos++] << 24; + whole_chunk_size |= (aif->data[pos++] << 16); + whole_chunk_size |= (aif->data[pos++] << 8); + whole_chunk_size |= (uint8_t)aif->data[pos++]; + + unsigned long expected_whole_chunk_size = aif->length - 8; + if (whole_chunk_size != expected_whole_chunk_size) { + FATAL_ERROR("FORM Chunk ckSize '%lu' doesn't match actual size '%lu'!\n", whole_chunk_size, + expected_whole_chunk_size); + } + + // Check for AIFF Form Type + memcpy(chunk_type, &aif->data[pos], 4); + pos += 4; + if (strcmp(chunk_type, "AIFF") != 0) { + FATAL_ERROR("FORM Type is '%s', but it must be AIFF!", chunk_type); + } + + struct Marker* markers = NULL; + unsigned short num_markers = 0, loop_start = 0, loop_end = 0; + unsigned long num_sample_frames = 0; + + // Read all the Chunks to populate the AifData struct. + while ((pos + 8) < aif->length) { + // Read Chunk id + memcpy(chunk_name, &aif->data[pos], 4); + pos += 4; + + unsigned long chunk_size = (aif->data[pos++] << 24); + chunk_size |= (aif->data[pos++] << 16); + chunk_size |= (aif->data[pos++] << 8); + chunk_size |= aif->data[pos++]; + + if ((pos + chunk_size) > aif->length) { + FATAL_ERROR("%s chunk at 0x%lx reached end of file before finishing\n", chunk_name, pos); + } + + if (strcmp(chunk_name, "COMM") == 0) { + short num_channels = (aif->data[pos++] << 8); + num_channels |= (uint8_t)aif->data[pos++]; + if (num_channels != 1) { + FATAL_ERROR("numChannels (%d) in the COMM Chunk must be 1!\n", num_channels); + } + + num_sample_frames = (aif->data[pos++] << 24); + num_sample_frames |= (aif->data[pos++] << 16); + num_sample_frames |= (aif->data[pos++] << 8); + num_sample_frames |= (uint8_t)aif->data[pos++]; + + short sample_size = (aif->data[pos++] << 8); + sample_size |= (uint8_t)aif->data[pos++]; + if (sample_size != 8) { + FATAL_ERROR("sampleSize (%d) in the COMM Chunk must be 8!\n", sample_size); + } + + double sample_rate = ieee754_read_extended((uint8_t*)(aif->data + pos)); + pos += 10; + + aif_data->sample_rate = sample_rate; + + if (aif_data->num_samples == 0) { + aif_data->num_samples = num_sample_frames; + } + } else if (strcmp(chunk_name, "MARK") == 0) { + num_markers = (aif->data[pos++] << 8); + num_markers |= (uint8_t)aif->data[pos++]; + + if (markers) { + FATAL_ERROR("More than one MARK Chunk in file!\n"); + } + + markers = calloc(num_markers, sizeof(struct Marker)); + + // Read each marker. + for (int i = 0; i < num_markers; i++) { + unsigned short marker_id = (aif->data[pos++] << 8); + marker_id |= (uint8_t)aif->data[pos++]; + + unsigned long marker_position = (aif->data[pos++] << 24); + marker_position |= (aif->data[pos++] << 16); + marker_position |= (aif->data[pos++] << 8); + marker_position |= (uint8_t)aif->data[pos++]; + + // Marker name is a Pascal-style string. + uint8_t marker_name_size = aif->data[pos++]; + // We don't actually need the marker name for anything anymore. + /*char *marker_name = (char *)malloc((marker_name_size + 1) * sizeof(char)); + memcpy(marker_name, &aif->data[pos], marker_name_size); + marker_name[marker_name_size] = '\0';*/ + pos += marker_name_size + !(marker_name_size & 1); + + markers[i].id = marker_id; + markers[i].position = marker_position; + } + } else if (strcmp(chunk_name, "INST") == 0) { + uint8_t midi_note = (uint8_t)aif->data[pos++]; + + aif_data->midi_note = midi_note; + + // Skip over data we don't need. + pos += 7; + + unsigned short loop_type = (aif->data[pos++] << 8); + loop_type |= (uint8_t)aif->data[pos++]; + + if (loop_type) { + loop_start = (aif->data[pos++] << 8); + loop_start |= (uint8_t)aif->data[pos++]; + + loop_end = (aif->data[pos++] << 8); + loop_end |= (uint8_t)aif->data[pos++]; + } else { + // Skip NoLooping sustain loop. + pos += 4; + } + + // Skip release loop, we don't need it. + pos += 6; + } else if (strcmp(chunk_name, "SSND") == 0) { + // Skip offset and blockSize + pos += 8; + + unsigned long num_samples = chunk_size - 8; + uint8_t* sample_data = (uint8_t*)malloc(num_samples * sizeof(uint8_t)); + memcpy(sample_data, &aif->data[pos], num_samples); + + aif_data->samples = sample_data; + aif_data->real_num_samples = num_samples; + pos += chunk_size - 8; + } else { + // Skip over unsupported chunks. + pos += chunk_size; + } + } + + if (markers) { + // Resolve loop points. + struct Marker* cur_marker = markers; + + // Grab loop start point. + for (int i = 0; i < num_markers; i++, cur_marker++) { + if (cur_marker->id == loop_start) { + aif_data->loop_offset = cur_marker->position; + aif_data->has_loop = true; + break; + } + } + + cur_marker = markers; + + // Grab loop end point. + for (int i = 0; i < num_markers; i++, cur_marker++) { + if (cur_marker->id == loop_end) { + if (cur_marker->position < aif_data->loop_offset) { + aif_data->loop_offset = cur_marker->position; + aif_data->has_loop = true; + } + aif_data->num_samples = cur_marker->position; + break; + } + } + + free(markers); + } } // This is a table of deltas between sample values in compressed PCM data. const int gDeltaEncodingTable[] = { - 0, 1, 4, 9, 16, 25, 36, 49, - -64, -49, -36, -25, -16, -9, -4, -1, + 0, 1, 4, 9, 16, 25, 36, 49, -64, -49, -36, -25, -16, -9, -4, -1, }; -struct Bytes *delta_decompress(struct Bytes *delta, unsigned int expected_length) -{ - struct Bytes *pcm = malloc(sizeof(struct Bytes)); - pcm->length = expected_length; - pcm->data = malloc(pcm->length + 0x40); - - uint8_t hi, lo; - unsigned int i = 0; - unsigned int j = 0; - int k; - int8_t base; - while (i < delta->length) - { - base = (int8_t)delta->data[i++]; - pcm->data[j++] = (uint8_t)base; - if (i >= delta->length) - { - break; - } - if (j >= pcm->length) - { - break; - } - lo = delta->data[i] & 0xf; - base += gDeltaEncodingTable[lo]; - pcm->data[j++] = base; - i++; - if (i >= delta->length) - { - break; - } - if (j >= pcm->length) - { - break; - } - for (k = 0; k < 31; k++) - { - hi = (delta->data[i] >> 4) & 0xf; - base += gDeltaEncodingTable[hi]; - pcm->data[j++] = base; - if (j >= pcm->length) - { - break; - } - lo = delta->data[i] & 0xf; - base += gDeltaEncodingTable[lo]; - pcm->data[j++] = base; - i++; - if (i >= delta->length) - { - break; - } - if (j >= pcm->length) - { - break; - } - } - if (j >= pcm->length) - { - break; - } - } - - pcm->length = j; - return pcm; +struct Bytes* delta_decompress(struct Bytes* delta, unsigned int expected_length) { + struct Bytes* pcm = malloc(sizeof(struct Bytes)); + pcm->length = expected_length; + pcm->data = malloc(pcm->length + 0x40); + + uint8_t hi, lo; + unsigned int i = 0; + unsigned int j = 0; + int k; + int8_t base; + while (i < delta->length) { + base = (int8_t)delta->data[i++]; + pcm->data[j++] = (uint8_t)base; + if (i >= delta->length) { + break; + } + if (j >= pcm->length) { + break; + } + lo = delta->data[i] & 0xf; + base += gDeltaEncodingTable[lo]; + pcm->data[j++] = base; + i++; + if (i >= delta->length) { + break; + } + if (j >= pcm->length) { + break; + } + for (k = 0; k < 31; k++) { + hi = (delta->data[i] >> 4) & 0xf; + base += gDeltaEncodingTable[hi]; + pcm->data[j++] = base; + if (j >= pcm->length) { + break; + } + lo = delta->data[i] & 0xf; + base += gDeltaEncodingTable[lo]; + pcm->data[j++] = base; + i++; + if (i >= delta->length) { + break; + } + if (j >= pcm->length) { + break; + } + } + if (j >= pcm->length) { + break; + } + } + + pcm->length = j; + return pcm; } -int get_delta_index(uint8_t sample, uint8_t prev_sample) -{ - int best_error = INT_MAX; - int best_index = -1; +int get_delta_index(uint8_t sample, uint8_t prev_sample) { + int best_error = INT_MAX; + int best_index = -1; - for (int i = 0; i < 16; i++) - { - uint8_t new_sample = prev_sample + gDeltaEncodingTable[i]; - int error = sample > new_sample ? sample - new_sample : new_sample - sample; + for (int i = 0; i < 16; i++) { + uint8_t new_sample = prev_sample + gDeltaEncodingTable[i]; + int error = sample > new_sample ? sample - new_sample : new_sample - sample; - if (error < best_error) - { - best_error = error; - best_index = i; - } - } + if (error < best_error) { + best_error = error; + best_index = i; + } + } - return best_index; + return best_index; } -struct Bytes *delta_compress(struct Bytes *pcm) -{ - struct Bytes *delta = malloc(sizeof(struct Bytes)); - // estimate the length so we can malloc - int num_blocks = pcm->length / 64; - delta->length = num_blocks * 33; - - int extra = pcm->length % 64; - if (extra) - { - delta->length += 1; - extra -= 1; - } - if (extra) - { - delta->length += 1; - extra -= 1; - } - if (extra) - { - delta->length += (extra + 1) / 2; - } - - delta->data = malloc(delta->length + 33); - - unsigned int i = 0; - unsigned int j = 0; - int k; - uint8_t base; - int delta_index; - - while (i < pcm->length) - { - base = pcm->data[i++]; - delta->data[j++] = base; - - if (i >= pcm->length) - { - break; - } - delta_index = get_delta_index(pcm->data[i++], base); - base += gDeltaEncodingTable[delta_index]; - delta->data[j++] = delta_index; - - for (k = 0; k < 31; k++) - { - if (i >= pcm->length) - { - break; - } - delta_index = get_delta_index(pcm->data[i++], base); - base += gDeltaEncodingTable[delta_index]; - delta->data[j] = (delta_index << 4); - - if (i >= pcm->length) - { - break; - } - delta_index = get_delta_index(pcm->data[i++], base); - base += gDeltaEncodingTable[delta_index]; - delta->data[j++] |= delta_index; - } - } - - delta->length = j; - - return delta; +struct Bytes* delta_compress(struct Bytes* pcm) { + struct Bytes* delta = malloc(sizeof(struct Bytes)); + // estimate the length so we can malloc + int num_blocks = pcm->length / 64; + delta->length = num_blocks * 33; + + int extra = pcm->length % 64; + if (extra) { + delta->length += 1; + extra -= 1; + } + if (extra) { + delta->length += 1; + extra -= 1; + } + if (extra) { + delta->length += (extra + 1) / 2; + } + + delta->data = malloc(delta->length + 33); + + unsigned int i = 0; + unsigned int j = 0; + int k; + uint8_t base; + int delta_index; + + while (i < pcm->length) { + base = pcm->data[i++]; + delta->data[j++] = base; + + if (i >= pcm->length) { + break; + } + delta_index = get_delta_index(pcm->data[i++], base); + base += gDeltaEncodingTable[delta_index]; + delta->data[j++] = delta_index; + + for (k = 0; k < 31; k++) { + if (i >= pcm->length) { + break; + } + delta_index = get_delta_index(pcm->data[i++], base); + base += gDeltaEncodingTable[delta_index]; + delta->data[j] = (delta_index << 4); + + if (i >= pcm->length) { + break; + } + delta_index = get_delta_index(pcm->data[i++], base); + base += gDeltaEncodingTable[delta_index]; + delta->data[j++] |= delta_index; + } + } + + delta->length = j; + + return delta; } -#define STORE_U32_LE(dest, value) \ -do { \ - *(dest) = (value) & 0xff; \ - *((dest) + 1) = ((value) >> 8) & 0xff; \ - *((dest) + 2) = ((value) >> 16) & 0xff; \ - *((dest) + 3) = ((value) >> 24) & 0xff; \ -} while (0) - -#define LOAD_U32_LE(var, src) \ -do { \ - (var) = *(src); \ - (var) |= (*((src) + 1) << 8); \ - (var) |= (*((src) + 2) << 16); \ - (var) |= (*((src) + 3) << 24); \ -} while (0) +#define STORE_U32_LE(dest, value) \ + do { \ + *(dest) = (value)&0xff; \ + *((dest) + 1) = ((value) >> 8) & 0xff; \ + *((dest) + 2) = ((value) >> 16) & 0xff; \ + *((dest) + 3) = ((value) >> 24) & 0xff; \ + } while (0) + +#define LOAD_U32_LE(var, src) \ + do { \ + (var) = *(src); \ + (var) |= (*((src) + 1) << 8); \ + (var) |= (*((src) + 2) << 16); \ + (var) |= (*((src) + 3) << 24); \ + } while (0) // Reads an .aif file and produces a .pcm file containing an array of 8-bit samples. -void aif2pcm(const char *aif_filename, const char *pcm_filename, bool compress) -{ - struct Bytes *aif = read_bytearray(aif_filename); - AifData aif_data = {0,0,0,0,0,0,0}; - read_aif(aif, &aif_data); - - int header_size = 0x10; - struct Bytes *pcm; - struct Bytes output = {0,0}; - - if (compress) - { - struct Bytes *input = malloc(sizeof(struct Bytes)); - input->data = aif_data.samples; - input->length = aif_data.real_num_samples; - pcm = delta_compress(input); - free(input); - } - else - { - pcm = malloc(sizeof(struct Bytes)); - pcm->data = aif_data.samples; - pcm->length = aif_data.real_num_samples; - } - output.length = header_size + pcm->length; - output.data = malloc(output.length); - - uint32_t pitch_adjust = (uint32_t)(aif_data.sample_rate * 1024); - uint32_t loop_offset = (uint32_t)(aif_data.loop_offset); - uint32_t adjusted_num_samples = (uint32_t)(aif_data.num_samples - 1); - uint32_t flags = 0; - if (aif_data.has_loop) flags |= 0x40000000; - if (compress) flags |= 1; - STORE_U32_LE(output.data + 0, flags); - STORE_U32_LE(output.data + 4, pitch_adjust); - STORE_U32_LE(output.data + 8, loop_offset); - STORE_U32_LE(output.data + 12, adjusted_num_samples); - memcpy(&output.data[header_size], pcm->data, pcm->length); - write_bytearray(pcm_filename, &output); - - free(aif->data); - free(aif); - free(pcm); - free(output.data); - free(aif_data.samples); +void aif2pcm(const char* aif_filename, const char* pcm_filename, bool compress) { + struct Bytes* aif = read_bytearray(aif_filename); + AifData aif_data = { 0, 0, 0, 0, 0, 0, 0 }; + read_aif(aif, &aif_data); + + int header_size = 0x10; + struct Bytes* pcm; + struct Bytes output = { 0, 0 }; + + if (compress) { + struct Bytes* input = malloc(sizeof(struct Bytes)); + input->data = aif_data.samples; + input->length = aif_data.real_num_samples; + pcm = delta_compress(input); + free(input); + } else { + pcm = malloc(sizeof(struct Bytes)); + pcm->data = aif_data.samples; + pcm->length = aif_data.real_num_samples; + } + output.length = header_size + pcm->length; + output.data = malloc(output.length); + + uint32_t pitch_adjust = (uint32_t)(aif_data.sample_rate * 1024); + uint32_t loop_offset = (uint32_t)(aif_data.loop_offset); + uint32_t adjusted_num_samples = (uint32_t)(aif_data.num_samples - 1); + uint32_t flags = 0; + if (aif_data.has_loop) + flags |= 0x40000000; + if (compress) + flags |= 1; + STORE_U32_LE(output.data + 0, flags); + STORE_U32_LE(output.data + 4, pitch_adjust); + STORE_U32_LE(output.data + 8, loop_offset); + STORE_U32_LE(output.data + 12, adjusted_num_samples); + memcpy(&output.data[header_size], pcm->data, pcm->length); + write_bytearray(pcm_filename, &output); + + free(aif->data); + free(aif); + free(pcm); + free(output.data); + free(aif_data.samples); } // Reads a .pcm file containing an array of 8-bit samples and produces an .aif file. // See http://www-mmsp.ece.mcgill.ca/documents/audioformats/aiff/Docs/AIFF-1.3.pdf for .aif file specification. -void pcm2aif(const char *pcm_filename, const char *aif_filename, uint32_t base_note) -{ - struct Bytes *pcm = read_bytearray(pcm_filename); - - AifData *aif_data = malloc(sizeof(AifData)); - - uint32_t flags; - LOAD_U32_LE(flags, pcm->data + 0); - aif_data->has_loop = flags & 0x40000000; - bool compressed = flags & 1; - - uint32_t pitch_adjust; - LOAD_U32_LE(pitch_adjust, pcm->data + 4); - aif_data->sample_rate = pitch_adjust / 1024.0; - - LOAD_U32_LE(aif_data->loop_offset, pcm->data + 8); - LOAD_U32_LE(aif_data->num_samples, pcm->data + 12); - aif_data->num_samples += 1; - - if (compressed) - { - struct Bytes *delta = pcm; - uint8_t *pcm_data = pcm->data; - delta->length -= 0x10; - delta->data += 0x10; - pcm = delta_decompress(delta, aif_data->num_samples); - free(pcm_data); - free(delta); - } - else - { - pcm->length -= 0x10; - pcm->data += 0x10; - } - - aif_data->samples = malloc(pcm->length); - memcpy(aif_data->samples, pcm->data, pcm->length); - - struct Bytes *aif = malloc(sizeof(struct Bytes)); - aif->length = 54 + 60 + pcm->length; - aif->data = malloc(aif->length); - - long pos = 0; - - // First, write the FORM header chunk. - // FORM Chunk ckID - aif->data[pos++] = 'F'; - aif->data[pos++] = 'O'; - aif->data[pos++] = 'R'; - aif->data[pos++] = 'M'; - - // FORM Chunk ckSize - unsigned long form_size = pos; - unsigned long data_size = aif->length - 8; - aif->data[pos++] = ((data_size >> 24) & 0xFF); - aif->data[pos++] = ((data_size >> 16) & 0xFF); - aif->data[pos++] = ((data_size >> 8) & 0xFF); - aif->data[pos++] = (data_size & 0xFF); - - // FORM Chunk formType - aif->data[pos++] = 'A'; - aif->data[pos++] = 'I'; - aif->data[pos++] = 'F'; - aif->data[pos++] = 'F'; - - // Next, write the Common Chunk - // Common Chunk ckID - aif->data[pos++] = 'C'; - aif->data[pos++] = 'O'; - aif->data[pos++] = 'M'; - aif->data[pos++] = 'M'; - - // Common Chunk ckSize - aif->data[pos++] = 0; - aif->data[pos++] = 0; - aif->data[pos++] = 0; - aif->data[pos++] = 18; - - // Common Chunk numChannels - aif->data[pos++] = 0; - aif->data[pos++] = 1; // 1 channel - - // Common Chunk numSampleFrames - aif->data[pos++] = ((aif_data->num_samples >> 24) & 0xFF); - aif->data[pos++] = ((aif_data->num_samples >> 16) & 0xFF); - aif->data[pos++] = ((aif_data->num_samples >> 8) & 0xFF); - aif->data[pos++] = (aif_data->num_samples & 0xFF); - - // Common Chunk sampleSize - aif->data[pos++] = 0; - aif->data[pos++] = 8; // 8 bits per sample - - // Common Chunk sampleRate - //double sample_rate = pitch_adjust / 1024.0; - uint8_t sample_rate_buffer[10]; - ieee754_write_extended(aif_data->sample_rate, sample_rate_buffer); - for (int i = 0; i < 10; i++) - { - aif->data[pos++] = sample_rate_buffer[i]; - } - - if (aif_data->has_loop) - { - - // Marker Chunk ckID - aif->data[pos++] = 'M'; - aif->data[pos++] = 'A'; - aif->data[pos++] = 'R'; - aif->data[pos++] = 'K'; - - // Marker Chunk ckSize - aif->data[pos++] = 0; - aif->data[pos++] = 0; - aif->data[pos++] = 0; - aif->data[pos++] = 12 + (aif_data->has_loop ? 12 : 0); - - // Marker Chunk numMarkers - aif->data[pos++] = 0; - aif->data[pos++] = (aif_data->has_loop ? 2 : 1); - - // Marker loop start - aif->data[pos++] = 0; - aif->data[pos++] = 1; // id = 1 - - long loop_start = aif_data->loop_offset; - aif->data[pos++] = ((loop_start >> 24) & 0xFF); - aif->data[pos++] = ((loop_start >> 16) & 0xFF); - aif->data[pos++] = ((loop_start >> 8) & 0xFF); - aif->data[pos++] = (loop_start & 0xFF); // position - - aif->data[pos++] = 5; // pascal-style string length - aif->data[pos++] = 'S'; - aif->data[pos++] = 'T'; - aif->data[pos++] = 'A'; - aif->data[pos++] = 'R'; - aif->data[pos++] = 'T'; // markerName - - // Marker loop end - aif->data[pos++] = 0; - aif->data[pos++] = (aif_data->has_loop ? 2 : 1); // id = 2 - - long loop_end = aif_data->num_samples; - aif->data[pos++] = ((loop_end >> 24) & 0xFF); - aif->data[pos++] = ((loop_end >> 16) & 0xFF); - aif->data[pos++] = ((loop_end >> 8) & 0xFF); - aif->data[pos++] = (loop_end & 0xFF); // position - - aif->data[pos++] = 3; // pascal-style string length - aif->data[pos++] = 'E'; - aif->data[pos++] = 'N'; - aif->data[pos++] = 'D'; - } - - // Instrument Chunk ckID - aif->data[pos++] = 'I'; - aif->data[pos++] = 'N'; - aif->data[pos++] = 'S'; - aif->data[pos++] = 'T'; - - // Instrument Chunk ckSize - aif->data[pos++] = 0; - aif->data[pos++] = 0; - aif->data[pos++] = 0; - aif->data[pos++] = 20; - - aif->data[pos++] = base_note; // baseNote - aif->data[pos++] = 0; // detune - aif->data[pos++] = 0; // lowNote - aif->data[pos++] = 127; // highNote - aif->data[pos++] = 1; // lowVelocity - aif->data[pos++] = 127; // highVelocity - aif->data[pos++] = 0; // gain (hi) - aif->data[pos++] = 0; // gain (lo) - - // Instrument Chunk sustainLoop - aif->data[pos++] = 0; - aif->data[pos++] = 1; // playMode = ForwardLooping - - aif->data[pos++] = 0; - aif->data[pos++] = 1; // beginLoop marker id - - aif->data[pos++] = 0; - aif->data[pos++] = 2; // endLoop marker id - - // Instrument Chunk releaseLoop - aif->data[pos++] = 0; - aif->data[pos++] = 1; // playMode = ForwardLooping - - aif->data[pos++] = 0; - aif->data[pos++] = 1; // beginLoop marker id - - aif->data[pos++] = 0; - aif->data[pos++] = 2; // endLoop marker id - - // Finally, write the Sound Data Chunk - // Sound Data Chunk ckID - aif->data[pos++] = 'S'; - aif->data[pos++] = 'S'; - aif->data[pos++] = 'N'; - aif->data[pos++] = 'D'; - - // Sound Data Chunk ckSize - unsigned long sound_data_size = pcm->length + 8; - aif->data[pos++] = ((sound_data_size >> 24) & 0xFF); - aif->data[pos++] = ((sound_data_size >> 16) & 0xFF); - aif->data[pos++] = ((sound_data_size >> 8) & 0xFF); - aif->data[pos++] = (sound_data_size & 0xFF); - - // Sound Data Chunk offset - aif->data[pos++] = 0; - aif->data[pos++] = 0; - aif->data[pos++] = 0; - aif->data[pos++] = 0; - - // Sound Data Chunk blockSize - aif->data[pos++] = 0; - aif->data[pos++] = 0; - aif->data[pos++] = 0; - aif->data[pos++] = 0; - - // Sound Data Chunk soundData - for (unsigned int i = 0; i < aif_data->loop_offset; i++) - { - aif->data[pos++] = aif_data->samples[i]; - } - - int j = 0; - for (unsigned int i = aif_data->loop_offset; i < pcm->length; i++) - { - int pcm_index = aif_data->loop_offset + (j++ % (pcm->length - aif_data->loop_offset)); - aif->data[pos++] = aif_data->samples[pcm_index]; - } - - aif->length = pos; - - // Go back and rewrite ckSize - data_size = aif->length - 8; - aif->data[form_size + 0] = ((data_size >> 24) & 0xFF); - aif->data[form_size + 1] = ((data_size >> 16) & 0xFF); - aif->data[form_size + 2] = ((data_size >> 8) & 0xFF); - aif->data[form_size + 3] = (data_size & 0xFF); - - write_bytearray(aif_filename, aif); - - free(aif->data); - free(aif); +void pcm2aif(const char* pcm_filename, const char* aif_filename, uint32_t base_note) { + struct Bytes* pcm = read_bytearray(pcm_filename); + + AifData* aif_data = malloc(sizeof(AifData)); + + uint32_t flags; + LOAD_U32_LE(flags, pcm->data + 0); + aif_data->has_loop = flags & 0x40000000; + bool compressed = flags & 1; + + uint32_t pitch_adjust; + LOAD_U32_LE(pitch_adjust, pcm->data + 4); + aif_data->sample_rate = pitch_adjust / 1024.0; + + LOAD_U32_LE(aif_data->loop_offset, pcm->data + 8); + LOAD_U32_LE(aif_data->num_samples, pcm->data + 12); + aif_data->num_samples += 1; + + if (compressed) { + struct Bytes* delta = pcm; + uint8_t* pcm_data = pcm->data; + delta->length -= 0x10; + delta->data += 0x10; + pcm = delta_decompress(delta, aif_data->num_samples); + free(pcm_data); + free(delta); + } else { + pcm->length -= 0x10; + pcm->data += 0x10; + } + + aif_data->samples = malloc(pcm->length); + memcpy(aif_data->samples, pcm->data, pcm->length); + + struct Bytes* aif = malloc(sizeof(struct Bytes)); + aif->length = 54 + 60 + pcm->length; + aif->data = malloc(aif->length); + + long pos = 0; + + // First, write the FORM header chunk. + // FORM Chunk ckID + aif->data[pos++] = 'F'; + aif->data[pos++] = 'O'; + aif->data[pos++] = 'R'; + aif->data[pos++] = 'M'; + + // FORM Chunk ckSize + unsigned long form_size = pos; + unsigned long data_size = aif->length - 8; + aif->data[pos++] = ((data_size >> 24) & 0xFF); + aif->data[pos++] = ((data_size >> 16) & 0xFF); + aif->data[pos++] = ((data_size >> 8) & 0xFF); + aif->data[pos++] = (data_size & 0xFF); + + // FORM Chunk formType + aif->data[pos++] = 'A'; + aif->data[pos++] = 'I'; + aif->data[pos++] = 'F'; + aif->data[pos++] = 'F'; + + // Next, write the Common Chunk + // Common Chunk ckID + aif->data[pos++] = 'C'; + aif->data[pos++] = 'O'; + aif->data[pos++] = 'M'; + aif->data[pos++] = 'M'; + + // Common Chunk ckSize + aif->data[pos++] = 0; + aif->data[pos++] = 0; + aif->data[pos++] = 0; + aif->data[pos++] = 18; + + // Common Chunk numChannels + aif->data[pos++] = 0; + aif->data[pos++] = 1; // 1 channel + + // Common Chunk numSampleFrames + aif->data[pos++] = ((aif_data->num_samples >> 24) & 0xFF); + aif->data[pos++] = ((aif_data->num_samples >> 16) & 0xFF); + aif->data[pos++] = ((aif_data->num_samples >> 8) & 0xFF); + aif->data[pos++] = (aif_data->num_samples & 0xFF); + + // Common Chunk sampleSize + aif->data[pos++] = 0; + aif->data[pos++] = 8; // 8 bits per sample + + // Common Chunk sampleRate + // double sample_rate = pitch_adjust / 1024.0; + uint8_t sample_rate_buffer[10]; + ieee754_write_extended(aif_data->sample_rate, sample_rate_buffer); + for (int i = 0; i < 10; i++) { + aif->data[pos++] = sample_rate_buffer[i]; + } + + if (aif_data->has_loop) { + + // Marker Chunk ckID + aif->data[pos++] = 'M'; + aif->data[pos++] = 'A'; + aif->data[pos++] = 'R'; + aif->data[pos++] = 'K'; + + // Marker Chunk ckSize + aif->data[pos++] = 0; + aif->data[pos++] = 0; + aif->data[pos++] = 0; + aif->data[pos++] = 12 + (aif_data->has_loop ? 12 : 0); + + // Marker Chunk numMarkers + aif->data[pos++] = 0; + aif->data[pos++] = (aif_data->has_loop ? 2 : 1); + + // Marker loop start + aif->data[pos++] = 0; + aif->data[pos++] = 1; // id = 1 + + long loop_start = aif_data->loop_offset; + aif->data[pos++] = ((loop_start >> 24) & 0xFF); + aif->data[pos++] = ((loop_start >> 16) & 0xFF); + aif->data[pos++] = ((loop_start >> 8) & 0xFF); + aif->data[pos++] = (loop_start & 0xFF); // position + + aif->data[pos++] = 5; // pascal-style string length + aif->data[pos++] = 'S'; + aif->data[pos++] = 'T'; + aif->data[pos++] = 'A'; + aif->data[pos++] = 'R'; + aif->data[pos++] = 'T'; // markerName + + // Marker loop end + aif->data[pos++] = 0; + aif->data[pos++] = (aif_data->has_loop ? 2 : 1); // id = 2 + + long loop_end = aif_data->num_samples; + aif->data[pos++] = ((loop_end >> 24) & 0xFF); + aif->data[pos++] = ((loop_end >> 16) & 0xFF); + aif->data[pos++] = ((loop_end >> 8) & 0xFF); + aif->data[pos++] = (loop_end & 0xFF); // position + + aif->data[pos++] = 3; // pascal-style string length + aif->data[pos++] = 'E'; + aif->data[pos++] = 'N'; + aif->data[pos++] = 'D'; + } + + // Instrument Chunk ckID + aif->data[pos++] = 'I'; + aif->data[pos++] = 'N'; + aif->data[pos++] = 'S'; + aif->data[pos++] = 'T'; + + // Instrument Chunk ckSize + aif->data[pos++] = 0; + aif->data[pos++] = 0; + aif->data[pos++] = 0; + aif->data[pos++] = 20; + + aif->data[pos++] = base_note; // baseNote + aif->data[pos++] = 0; // detune + aif->data[pos++] = 0; // lowNote + aif->data[pos++] = 127; // highNote + aif->data[pos++] = 1; // lowVelocity + aif->data[pos++] = 127; // highVelocity + aif->data[pos++] = 0; // gain (hi) + aif->data[pos++] = 0; // gain (lo) + + // Instrument Chunk sustainLoop + aif->data[pos++] = 0; + aif->data[pos++] = 1; // playMode = ForwardLooping + + aif->data[pos++] = 0; + aif->data[pos++] = 1; // beginLoop marker id + + aif->data[pos++] = 0; + aif->data[pos++] = 2; // endLoop marker id + + // Instrument Chunk releaseLoop + aif->data[pos++] = 0; + aif->data[pos++] = 1; // playMode = ForwardLooping + + aif->data[pos++] = 0; + aif->data[pos++] = 1; // beginLoop marker id + + aif->data[pos++] = 0; + aif->data[pos++] = 2; // endLoop marker id + + // Finally, write the Sound Data Chunk + // Sound Data Chunk ckID + aif->data[pos++] = 'S'; + aif->data[pos++] = 'S'; + aif->data[pos++] = 'N'; + aif->data[pos++] = 'D'; + + // Sound Data Chunk ckSize + unsigned long sound_data_size = pcm->length + 8; + aif->data[pos++] = ((sound_data_size >> 24) & 0xFF); + aif->data[pos++] = ((sound_data_size >> 16) & 0xFF); + aif->data[pos++] = ((sound_data_size >> 8) & 0xFF); + aif->data[pos++] = (sound_data_size & 0xFF); + + // Sound Data Chunk offset + aif->data[pos++] = 0; + aif->data[pos++] = 0; + aif->data[pos++] = 0; + aif->data[pos++] = 0; + + // Sound Data Chunk blockSize + aif->data[pos++] = 0; + aif->data[pos++] = 0; + aif->data[pos++] = 0; + aif->data[pos++] = 0; + + // Sound Data Chunk soundData + for (unsigned int i = 0; i < aif_data->loop_offset; i++) { + aif->data[pos++] = aif_data->samples[i]; + } + + int j = 0; + for (unsigned int i = aif_data->loop_offset; i < pcm->length; i++) { + int pcm_index = aif_data->loop_offset + (j++ % (pcm->length - aif_data->loop_offset)); + aif->data[pos++] = aif_data->samples[pcm_index]; + } + + aif->length = pos; + + // Go back and rewrite ckSize + data_size = aif->length - 8; + aif->data[form_size + 0] = ((data_size >> 24) & 0xFF); + aif->data[form_size + 1] = ((data_size >> 16) & 0xFF); + aif->data[form_size + 2] = ((data_size >> 8) & 0xFF); + aif->data[form_size + 3] = (data_size & 0xFF); + + write_bytearray(aif_filename, aif); + + free(aif->data); + free(aif); } -void usage(void) -{ - fprintf(stderr, "Usage: aif2pcm bin_file [aif_file]\n"); - fprintf(stderr, " aif2pcm aif_file [bin_file] [--compress]\n"); +void usage(void) { + fprintf(stderr, "Usage: aif2pcm bin_file [aif_file]\n"); + fprintf(stderr, " aif2pcm aif_file [bin_file] [--compress]\n"); } -int main(int argc, char **argv) -{ - if (argc < 2) - { - usage(); - exit(1); - } - - char *input_file = argv[1]; - char *extension = get_file_extension(input_file); - char *output_file; - bool compressed = false; - - if (argc > 3) - { - for (int i = 3; i < argc; i++) - { - if (strcmp(argv[i], "--compress") == 0) - { - compressed = true; - } - } - } - - if (strcmp(extension, "aif") == 0 || strcmp(extension, "aiff") == 0) - { - if (argc >= 3) - { - output_file = argv[2]; - aif2pcm(input_file, output_file, compressed); - } - else - { - output_file = new_file_extension(input_file, "bin"); - aif2pcm(input_file, output_file, compressed); - free(output_file); - } - } - else if (strcmp(extension, "bin") == 0) - { - if (argc >= 3) - { - output_file = argv[2]; - pcm2aif(input_file, output_file, 60); - } - else - { - output_file = new_file_extension(input_file, "aif"); - pcm2aif(input_file, output_file, 60); - free(output_file); - } - } - else - { - FATAL_ERROR("Input file must be .aif or .bin: '%s'\n", input_file); - } - - return 0; +int main(int argc, char** argv) { + if (argc < 2) { + usage(); + exit(1); + } + + char* input_file = argv[1]; + char* extension = get_file_extension(input_file); + char* output_file; + bool compressed = false; + + if (argc > 3) { + for (int i = 3; i < argc; i++) { + if (strcmp(argv[i], "--compress") == 0) { + compressed = true; + } + } + } + + if (strcmp(extension, "aif") == 0 || strcmp(extension, "aiff") == 0) { + if (argc >= 3) { + output_file = argv[2]; + aif2pcm(input_file, output_file, compressed); + } else { + output_file = new_file_extension(input_file, "bin"); + aif2pcm(input_file, output_file, compressed); + free(output_file); + } + } else if (strcmp(extension, "bin") == 0) { + if (argc >= 3) { + output_file = argv[2]; + pcm2aif(input_file, output_file, 60); + } else { + output_file = new_file_extension(input_file, "aif"); + pcm2aif(input_file, output_file, 60); + free(output_file); + } + } else { + FATAL_ERROR("Input file must be .aif or .bin: '%s'\n", input_file); + } + + return 0; } diff --git a/tools/src/asset_processor/offsets.cpp b/tools/src/asset_processor/offsets.cpp index 45d991a3..48ed4139 100644 --- a/tools/src/asset_processor/offsets.cpp +++ b/tools/src/asset_processor/offsets.cpp @@ -1,6 +1,6 @@ #include "offsets.h" -OffsetCalculator::OffsetCalculator(std::filesystem::path outputFile, int baseOffset): baseOffset(baseOffset) { +OffsetCalculator::OffsetCalculator(std::filesystem::path outputFile, int baseOffset) : baseOffset(baseOffset) { output = std::ofstream(outputFile); } diff --git a/tools/src/asset_processor/offsets.h b/tools/src/asset_processor/offsets.h index 2130f6cb..bf9fef4e 100644 --- a/tools/src/asset_processor/offsets.h +++ b/tools/src/asset_processor/offsets.h @@ -6,11 +6,11 @@ class OffsetCalculator { -public: + public: OffsetCalculator(std::filesystem::path offsetsFile, int baseOffset); void addAsset(int start, std::string symbol); -private: + private: std::ofstream output; int baseOffset; }; diff --git a/tools/src/bin2c/bin2c.c b/tools/src/bin2c/bin2c.c index b4bd437f..18d2fd27 100755..100644 --- a/tools/src/bin2c/bin2c.c +++ b/tools/src/bin2c/bin2c.c @@ -25,27 +25,24 @@ #ifdef _MSC_VER -#define FATAL_ERROR(format, ...) \ -do \ -{ \ - fprintf(stderr, format, __VA_ARGS__); \ - exit(1); \ -} while (0) +#define FATAL_ERROR(format, ...) \ + do { \ + fprintf(stderr, format, __VA_ARGS__); \ + exit(1); \ + } while (0) #else -#define FATAL_ERROR(format, ...) \ -do \ -{ \ - fprintf(stderr, format, ##__VA_ARGS__); \ - exit(1); \ -} while (0) +#define FATAL_ERROR(format, ...) \ + do { \ + fprintf(stderr, format, ##__VA_ARGS__); \ + exit(1); \ + } while (0) #endif // _MSC_VER -unsigned char *ReadWholeFile(char *path, int *size) -{ - FILE *fp = fopen(path, "rb"); +unsigned char* ReadWholeFile(char* path, int* size) { + FILE* fp = fopen(path, "rb"); if (fp == NULL) FATAL_ERROR("Failed to open \"%s\" for reading.\n", path); @@ -54,7 +51,7 @@ unsigned char *ReadWholeFile(char *path, int *size) *size = ftell(fp); - unsigned char *buffer = malloc(*size); + unsigned char* buffer = malloc(*size); if (buffer == NULL) FATAL_ERROR("Failed to allocate memory for reading \"%s\".\n", path); @@ -69,33 +66,26 @@ unsigned char *ReadWholeFile(char *path, int *size) return buffer; } -int ExtractData(unsigned char *buffer, int offset, int size) -{ - switch (size) - { - case 1: - return buffer[offset]; - case 2: - return (buffer[offset + 1] << 8) - | buffer[offset]; - case 4: - return (buffer[offset + 3] << 24) - | (buffer[offset + 2] << 16) - | (buffer[offset + 1] << 8) - | buffer[offset]; - default: - FATAL_ERROR("Invalid size passed to ExtractData.\n"); +int ExtractData(unsigned char* buffer, int offset, int size) { + switch (size) { + case 1: + return buffer[offset]; + case 2: + return (buffer[offset + 1] << 8) | buffer[offset]; + case 4: + return (buffer[offset + 3] << 24) | (buffer[offset + 2] << 16) | (buffer[offset + 1] << 8) | buffer[offset]; + default: + FATAL_ERROR("Invalid size passed to ExtractData.\n"); } } -int main(int argc, char **argv) -{ +int main(int argc, char** argv) { if (argc < 3) FATAL_ERROR("Usage: bin2c INPUT_FILE VAR_NAME [OPTIONS...]\n"); int fileSize; - unsigned char *buffer = ReadWholeFile(argv[1], &fileSize); - char *var_name = argv[2]; + unsigned char* buffer = ReadWholeFile(argv[1], &fileSize); + char* var_name = argv[2]; int col = 1; int pad = 0; int size = 1; @@ -103,28 +93,22 @@ int main(int argc, char **argv) bool isStatic = false; bool isDecimal = false; - for (int i = 3; i < argc; i++) - { - if (!strcmp(argv[i], "-col")) - { + for (int i = 3; i < argc; i++) { + if (!strcmp(argv[i], "-col")) { i++; if (i >= argc) FATAL_ERROR("Missing argument after '-col'.\n"); col = atoi(argv[i]); - } - else if (!strcmp(argv[i], "-pad")) - { + } else if (!strcmp(argv[i], "-pad")) { i++; if (i >= argc) FATAL_ERROR("Missing argument after '-pad'.\n"); pad = atoi(argv[i]); - } - else if (!strcmp(argv[i], "-size")) - { + } else if (!strcmp(argv[i], "-size")) { i++; if (i >= argc) @@ -134,22 +118,14 @@ int main(int argc, char **argv) if (size != 1 && size != 2 && size != 4) FATAL_ERROR("Size must be 1, 2, or 4.\n"); - } - else if (!strcmp(argv[i], "-signed")) - { + } else if (!strcmp(argv[i], "-signed")) { isSigned = true; isDecimal = true; - } - else if (!strcmp(argv[i], "-static")) - { + } else if (!strcmp(argv[i], "-static")) { isStatic = true; - } - else if (!strcmp(argv[i], "-decimal")) - { + } else if (!strcmp(argv[i], "-decimal")) { isDecimal = true; - } - else - { + } else { FATAL_ERROR("Unrecognized option '%s'.\n", argv[i]); } } @@ -174,23 +150,19 @@ int main(int argc, char **argv) int count = fileSize / size; int offset = 0; - for (int i = 0; i < count; i++) - { + for (int i = 0; i < count; i++) { if (i % col == 0) printf("\n "); int data = ExtractData(buffer, offset, size); offset += size; - if (isDecimal) - { + if (isDecimal) { if (isSigned) printf("%*d, ", pad, data); else printf("%*uu, ", pad, data); - } - else - { + } else { printf("%#*xu, ", pad, data); } } diff --git a/tools/src/gbafix/elf.h b/tools/src/gbafix/elf.h index 79d3b974..73592286 100755..100644 --- a/tools/src/gbafix/elf.h +++ b/tools/src/gbafix/elf.h @@ -36,14 +36,14 @@ typedef uint16_t Elf32_Half; typedef uint16_t Elf64_Half; typedef uint32_t Elf32_Word; -typedef int32_t Elf32_Sword; +typedef int32_t Elf32_Sword; typedef uint32_t Elf64_Word; -typedef int32_t Elf64_Sword; +typedef int32_t Elf64_Sword; typedef uint64_t Elf32_Xword; -typedef int64_t Elf32_Sxword; +typedef int64_t Elf32_Sxword; typedef uint64_t Elf64_Xword; -typedef int64_t Elf64_Sxword; +typedef int64_t Elf64_Sxword; typedef uint32_t Elf32_Addr; typedef uint64_t Elf64_Addr; @@ -60,1526 +60,1385 @@ typedef Elf64_Half Elf64_Versym; #define EI_NIDENT (16) typedef struct { - unsigned char e_ident[EI_NIDENT]; - Elf32_Half e_type; - Elf32_Half e_machine; - Elf32_Word e_version; - Elf32_Addr e_entry; - Elf32_Off e_phoff; - Elf32_Off e_shoff; - Elf32_Word e_flags; - Elf32_Half e_ehsize; - Elf32_Half e_phentsize; - Elf32_Half e_phnum; - Elf32_Half e_shentsize; - Elf32_Half e_shnum; - Elf32_Half e_shstrndx; + unsigned char e_ident[EI_NIDENT]; + Elf32_Half e_type; + Elf32_Half e_machine; + Elf32_Word e_version; + Elf32_Addr e_entry; + Elf32_Off e_phoff; + Elf32_Off e_shoff; + Elf32_Word e_flags; + Elf32_Half e_ehsize; + Elf32_Half e_phentsize; + Elf32_Half e_phnum; + Elf32_Half e_shentsize; + Elf32_Half e_shnum; + Elf32_Half e_shstrndx; } Elf32_Ehdr; typedef struct { - unsigned char e_ident[EI_NIDENT]; - Elf64_Half e_type; - Elf64_Half e_machine; - Elf64_Word e_version; - Elf64_Addr e_entry; - Elf64_Off e_phoff; - Elf64_Off e_shoff; - Elf64_Word e_flags; - Elf64_Half e_ehsize; - Elf64_Half e_phentsize; - Elf64_Half e_phnum; - Elf64_Half e_shentsize; - Elf64_Half e_shnum; - Elf64_Half e_shstrndx; + unsigned char e_ident[EI_NIDENT]; + Elf64_Half e_type; + Elf64_Half e_machine; + Elf64_Word e_version; + Elf64_Addr e_entry; + Elf64_Off e_phoff; + Elf64_Off e_shoff; + Elf64_Word e_flags; + Elf64_Half e_ehsize; + Elf64_Half e_phentsize; + Elf64_Half e_phnum; + Elf64_Half e_shentsize; + Elf64_Half e_shnum; + Elf64_Half e_shstrndx; } Elf64_Ehdr; -#define EI_MAG0 0 -#define ELFMAG0 0x7f - -#define EI_MAG1 1 -#define ELFMAG1 'E' - -#define EI_MAG2 2 -#define ELFMAG2 'L' - -#define EI_MAG3 3 -#define ELFMAG3 'F' - - -#define ELFMAG "\177ELF" -#define SELFMAG 4 - -#define EI_CLASS 4 -#define ELFCLASSNONE 0 -#define ELFCLASS32 1 -#define ELFCLASS64 2 -#define ELFCLASSNUM 3 - -#define EI_DATA 5 -#define ELFDATANONE 0 -#define ELFDATA2LSB 1 -#define ELFDATA2MSB 2 -#define ELFDATANUM 3 - -#define EI_VERSION 6 - - -#define EI_OSABI 7 -#define ELFOSABI_NONE 0 -#define ELFOSABI_SYSV 0 -#define ELFOSABI_HPUX 1 -#define ELFOSABI_NETBSD 2 -#define ELFOSABI_LINUX 3 -#define ELFOSABI_GNU 3 -#define ELFOSABI_SOLARIS 6 -#define ELFOSABI_AIX 7 -#define ELFOSABI_IRIX 8 -#define ELFOSABI_FREEBSD 9 -#define ELFOSABI_TRU64 10 -#define ELFOSABI_MODESTO 11 -#define ELFOSABI_OPENBSD 12 -#define ELFOSABI_ARM 97 -#define ELFOSABI_STANDALONE 255 - -#define EI_ABIVERSION 8 - -#define EI_PAD 9 - - - -#define ET_NONE 0 -#define ET_REL 1 -#define ET_EXEC 2 -#define ET_DYN 3 -#define ET_CORE 4 -#define ET_NUM 5 -#define ET_LOOS 0xfe00 -#define ET_HIOS 0xfeff -#define ET_LOPROC 0xff00 -#define ET_HIPROC 0xffff - - - -#define EM_NONE 0 -#define EM_M32 1 -#define EM_SPARC 2 -#define EM_386 3 -#define EM_68K 4 -#define EM_88K 5 -#define EM_860 7 -#define EM_MIPS 8 -#define EM_S370 9 -#define EM_MIPS_RS3_LE 10 - -#define EM_PARISC 15 -#define EM_VPP500 17 -#define EM_SPARC32PLUS 18 -#define EM_960 19 -#define EM_PPC 20 -#define EM_PPC64 21 -#define EM_S390 22 - -#define EM_V800 36 -#define EM_FR20 37 -#define EM_RH32 38 -#define EM_RCE 39 -#define EM_ARM 40 -#define EM_FAKE_ALPHA 41 -#define EM_SH 42 -#define EM_SPARCV9 43 -#define EM_TRICORE 44 -#define EM_ARC 45 -#define EM_H8_300 46 -#define EM_H8_300H 47 -#define EM_H8S 48 -#define EM_H8_500 49 -#define EM_IA_64 50 -#define EM_MIPS_X 51 -#define EM_COLDFIRE 52 -#define EM_68HC12 53 -#define EM_MMA 54 -#define EM_PCP 55 -#define EM_NCPU 56 -#define EM_NDR1 57 -#define EM_STARCORE 58 -#define EM_ME16 59 -#define EM_ST100 60 -#define EM_TINYJ 61 -#define EM_X86_64 62 -#define EM_PDSP 63 - -#define EM_FX66 66 -#define EM_ST9PLUS 67 -#define EM_ST7 68 -#define EM_68HC16 69 -#define EM_68HC11 70 -#define EM_68HC08 71 -#define EM_68HC05 72 -#define EM_SVX 73 -#define EM_ST19 74 -#define EM_VAX 75 -#define EM_CRIS 76 -#define EM_JAVELIN 77 -#define EM_FIREPATH 78 -#define EM_ZSP 79 -#define EM_MMIX 80 -#define EM_HUANY 81 -#define EM_PRISM 82 -#define EM_AVR 83 -#define EM_FR30 84 -#define EM_D10V 85 -#define EM_D30V 86 -#define EM_V850 87 -#define EM_M32R 88 -#define EM_MN10300 89 -#define EM_MN10200 90 -#define EM_PJ 91 -#define EM_OR1K 92 -#define EM_OPENRISC 92 -#define EM_ARC_A5 93 -#define EM_ARC_COMPACT 93 -#define EM_XTENSA 94 -#define EM_VIDEOCORE 95 -#define EM_TMM_GPP 96 -#define EM_NS32K 97 -#define EM_TPC 98 -#define EM_SNP1K 99 -#define EM_ST200 100 -#define EM_IP2K 101 -#define EM_MAX 102 -#define EM_CR 103 -#define EM_F2MC16 104 -#define EM_MSP430 105 -#define EM_BLACKFIN 106 -#define EM_SE_C33 107 -#define EM_SEP 108 -#define EM_ARCA 109 -#define EM_UNICORE 110 -#define EM_EXCESS 111 -#define EM_DXP 112 +#define EI_MAG0 0 +#define ELFMAG0 0x7f + +#define EI_MAG1 1 +#define ELFMAG1 'E' + +#define EI_MAG2 2 +#define ELFMAG2 'L' + +#define EI_MAG3 3 +#define ELFMAG3 'F' + +#define ELFMAG "\177ELF" +#define SELFMAG 4 + +#define EI_CLASS 4 +#define ELFCLASSNONE 0 +#define ELFCLASS32 1 +#define ELFCLASS64 2 +#define ELFCLASSNUM 3 + +#define EI_DATA 5 +#define ELFDATANONE 0 +#define ELFDATA2LSB 1 +#define ELFDATA2MSB 2 +#define ELFDATANUM 3 + +#define EI_VERSION 6 + +#define EI_OSABI 7 +#define ELFOSABI_NONE 0 +#define ELFOSABI_SYSV 0 +#define ELFOSABI_HPUX 1 +#define ELFOSABI_NETBSD 2 +#define ELFOSABI_LINUX 3 +#define ELFOSABI_GNU 3 +#define ELFOSABI_SOLARIS 6 +#define ELFOSABI_AIX 7 +#define ELFOSABI_IRIX 8 +#define ELFOSABI_FREEBSD 9 +#define ELFOSABI_TRU64 10 +#define ELFOSABI_MODESTO 11 +#define ELFOSABI_OPENBSD 12 +#define ELFOSABI_ARM 97 +#define ELFOSABI_STANDALONE 255 + +#define EI_ABIVERSION 8 + +#define EI_PAD 9 + +#define ET_NONE 0 +#define ET_REL 1 +#define ET_EXEC 2 +#define ET_DYN 3 +#define ET_CORE 4 +#define ET_NUM 5 +#define ET_LOOS 0xfe00 +#define ET_HIOS 0xfeff +#define ET_LOPROC 0xff00 +#define ET_HIPROC 0xffff + +#define EM_NONE 0 +#define EM_M32 1 +#define EM_SPARC 2 +#define EM_386 3 +#define EM_68K 4 +#define EM_88K 5 +#define EM_860 7 +#define EM_MIPS 8 +#define EM_S370 9 +#define EM_MIPS_RS3_LE 10 + +#define EM_PARISC 15 +#define EM_VPP500 17 +#define EM_SPARC32PLUS 18 +#define EM_960 19 +#define EM_PPC 20 +#define EM_PPC64 21 +#define EM_S390 22 + +#define EM_V800 36 +#define EM_FR20 37 +#define EM_RH32 38 +#define EM_RCE 39 +#define EM_ARM 40 +#define EM_FAKE_ALPHA 41 +#define EM_SH 42 +#define EM_SPARCV9 43 +#define EM_TRICORE 44 +#define EM_ARC 45 +#define EM_H8_300 46 +#define EM_H8_300H 47 +#define EM_H8S 48 +#define EM_H8_500 49 +#define EM_IA_64 50 +#define EM_MIPS_X 51 +#define EM_COLDFIRE 52 +#define EM_68HC12 53 +#define EM_MMA 54 +#define EM_PCP 55 +#define EM_NCPU 56 +#define EM_NDR1 57 +#define EM_STARCORE 58 +#define EM_ME16 59 +#define EM_ST100 60 +#define EM_TINYJ 61 +#define EM_X86_64 62 +#define EM_PDSP 63 + +#define EM_FX66 66 +#define EM_ST9PLUS 67 +#define EM_ST7 68 +#define EM_68HC16 69 +#define EM_68HC11 70 +#define EM_68HC08 71 +#define EM_68HC05 72 +#define EM_SVX 73 +#define EM_ST19 74 +#define EM_VAX 75 +#define EM_CRIS 76 +#define EM_JAVELIN 77 +#define EM_FIREPATH 78 +#define EM_ZSP 79 +#define EM_MMIX 80 +#define EM_HUANY 81 +#define EM_PRISM 82 +#define EM_AVR 83 +#define EM_FR30 84 +#define EM_D10V 85 +#define EM_D30V 86 +#define EM_V850 87 +#define EM_M32R 88 +#define EM_MN10300 89 +#define EM_MN10200 90 +#define EM_PJ 91 +#define EM_OR1K 92 +#define EM_OPENRISC 92 +#define EM_ARC_A5 93 +#define EM_ARC_COMPACT 93 +#define EM_XTENSA 94 +#define EM_VIDEOCORE 95 +#define EM_TMM_GPP 96 +#define EM_NS32K 97 +#define EM_TPC 98 +#define EM_SNP1K 99 +#define EM_ST200 100 +#define EM_IP2K 101 +#define EM_MAX 102 +#define EM_CR 103 +#define EM_F2MC16 104 +#define EM_MSP430 105 +#define EM_BLACKFIN 106 +#define EM_SE_C33 107 +#define EM_SEP 108 +#define EM_ARCA 109 +#define EM_UNICORE 110 +#define EM_EXCESS 111 +#define EM_DXP 112 #define EM_ALTERA_NIOS2 113 -#define EM_CRX 114 -#define EM_XGATE 115 -#define EM_C166 116 -#define EM_M16C 117 -#define EM_DSPIC30F 118 -#define EM_CE 119 -#define EM_M32C 120 -#define EM_TSK3000 131 -#define EM_RS08 132 -#define EM_SHARC 133 -#define EM_ECOG2 134 -#define EM_SCORE7 135 -#define EM_DSP24 136 -#define EM_VIDEOCORE3 137 +#define EM_CRX 114 +#define EM_XGATE 115 +#define EM_C166 116 +#define EM_M16C 117 +#define EM_DSPIC30F 118 +#define EM_CE 119 +#define EM_M32C 120 +#define EM_TSK3000 131 +#define EM_RS08 132 +#define EM_SHARC 133 +#define EM_ECOG2 134 +#define EM_SCORE7 135 +#define EM_DSP24 136 +#define EM_VIDEOCORE3 137 #define EM_LATTICEMICO32 138 -#define EM_SE_C17 139 -#define EM_TI_C6000 140 -#define EM_TI_C2000 141 -#define EM_TI_C5500 142 -#define EM_TI_ARP32 143 -#define EM_TI_PRU 144 -#define EM_MMDSP_PLUS 160 -#define EM_CYPRESS_M8C 161 -#define EM_R32C 162 -#define EM_TRIMEDIA 163 -#define EM_QDSP6 164 -#define EM_8051 165 -#define EM_STXP7X 166 -#define EM_NDS32 167 -#define EM_ECOG1X 168 -#define EM_MAXQ30 169 -#define EM_XIMO16 170 -#define EM_MANIK 171 -#define EM_CRAYNV2 172 -#define EM_RX 173 -#define EM_METAG 174 -#define EM_MCST_ELBRUS 175 -#define EM_ECOG16 176 -#define EM_CR16 177 -#define EM_ETPU 178 -#define EM_SLE9X 179 -#define EM_L10M 180 -#define EM_K10M 181 -#define EM_AARCH64 183 -#define EM_AVR32 185 -#define EM_STM8 186 -#define EM_TILE64 187 -#define EM_TILEPRO 188 -#define EM_MICROBLAZE 189 -#define EM_CUDA 190 -#define EM_TILEGX 191 -#define EM_CLOUDSHIELD 192 -#define EM_COREA_1ST 193 -#define EM_COREA_2ND 194 -#define EM_ARC_COMPACT2 195 -#define EM_OPEN8 196 -#define EM_RL78 197 -#define EM_VIDEOCORE5 198 -#define EM_78KOR 199 -#define EM_56800EX 200 -#define EM_BA1 201 -#define EM_BA2 202 -#define EM_XCORE 203 -#define EM_MCHP_PIC 204 -#define EM_KM32 210 -#define EM_KMX32 211 -#define EM_EMX16 212 -#define EM_EMX8 213 -#define EM_KVARC 214 -#define EM_CDP 215 -#define EM_COGE 216 -#define EM_COOL 217 -#define EM_NORC 218 -#define EM_CSR_KALIMBA 219 -#define EM_Z80 220 -#define EM_VISIUM 221 -#define EM_FT32 222 -#define EM_MOXIE 223 -#define EM_AMDGPU 224 -#define EM_RISCV 243 -#define EM_BPF 247 -#define EM_NUM 248 - -#define EM_ALPHA 0x9026 - -#define EV_NONE 0 -#define EV_CURRENT 1 -#define EV_NUM 2 +#define EM_SE_C17 139 +#define EM_TI_C6000 140 +#define EM_TI_C2000 141 +#define EM_TI_C5500 142 +#define EM_TI_ARP32 143 +#define EM_TI_PRU 144 +#define EM_MMDSP_PLUS 160 +#define EM_CYPRESS_M8C 161 +#define EM_R32C 162 +#define EM_TRIMEDIA 163 +#define EM_QDSP6 164 +#define EM_8051 165 +#define EM_STXP7X 166 +#define EM_NDS32 167 +#define EM_ECOG1X 168 +#define EM_MAXQ30 169 +#define EM_XIMO16 170 +#define EM_MANIK 171 +#define EM_CRAYNV2 172 +#define EM_RX 173 +#define EM_METAG 174 +#define EM_MCST_ELBRUS 175 +#define EM_ECOG16 176 +#define EM_CR16 177 +#define EM_ETPU 178 +#define EM_SLE9X 179 +#define EM_L10M 180 +#define EM_K10M 181 +#define EM_AARCH64 183 +#define EM_AVR32 185 +#define EM_STM8 186 +#define EM_TILE64 187 +#define EM_TILEPRO 188 +#define EM_MICROBLAZE 189 +#define EM_CUDA 190 +#define EM_TILEGX 191 +#define EM_CLOUDSHIELD 192 +#define EM_COREA_1ST 193 +#define EM_COREA_2ND 194 +#define EM_ARC_COMPACT2 195 +#define EM_OPEN8 196 +#define EM_RL78 197 +#define EM_VIDEOCORE5 198 +#define EM_78KOR 199 +#define EM_56800EX 200 +#define EM_BA1 201 +#define EM_BA2 202 +#define EM_XCORE 203 +#define EM_MCHP_PIC 204 +#define EM_KM32 210 +#define EM_KMX32 211 +#define EM_EMX16 212 +#define EM_EMX8 213 +#define EM_KVARC 214 +#define EM_CDP 215 +#define EM_COGE 216 +#define EM_COOL 217 +#define EM_NORC 218 +#define EM_CSR_KALIMBA 219 +#define EM_Z80 220 +#define EM_VISIUM 221 +#define EM_FT32 222 +#define EM_MOXIE 223 +#define EM_AMDGPU 224 +#define EM_RISCV 243 +#define EM_BPF 247 +#define EM_NUM 248 + +#define EM_ALPHA 0x9026 + +#define EV_NONE 0 +#define EV_CURRENT 1 +#define EV_NUM 2 typedef struct { - Elf32_Word sh_name; - Elf32_Word sh_type; - Elf32_Word sh_flags; - Elf32_Addr sh_addr; - Elf32_Off sh_offset; - Elf32_Word sh_size; - Elf32_Word sh_link; - Elf32_Word sh_info; - Elf32_Word sh_addralign; - Elf32_Word sh_entsize; + Elf32_Word sh_name; + Elf32_Word sh_type; + Elf32_Word sh_flags; + Elf32_Addr sh_addr; + Elf32_Off sh_offset; + Elf32_Word sh_size; + Elf32_Word sh_link; + Elf32_Word sh_info; + Elf32_Word sh_addralign; + Elf32_Word sh_entsize; } Elf32_Shdr; typedef struct { - Elf64_Word sh_name; - Elf64_Word sh_type; - Elf64_Xword sh_flags; - Elf64_Addr sh_addr; - Elf64_Off sh_offset; - Elf64_Xword sh_size; - Elf64_Word sh_link; - Elf64_Word sh_info; - Elf64_Xword sh_addralign; - Elf64_Xword sh_entsize; + Elf64_Word sh_name; + Elf64_Word sh_type; + Elf64_Xword sh_flags; + Elf64_Addr sh_addr; + Elf64_Off sh_offset; + Elf64_Xword sh_size; + Elf64_Word sh_link; + Elf64_Word sh_info; + Elf64_Xword sh_addralign; + Elf64_Xword sh_entsize; } Elf64_Shdr; - - -#define SHN_UNDEF 0 -#define SHN_LORESERVE 0xff00 -#define SHN_LOPROC 0xff00 -#define SHN_BEFORE 0xff00 - -#define SHN_AFTER 0xff01 - -#define SHN_HIPROC 0xff1f -#define SHN_LOOS 0xff20 -#define SHN_HIOS 0xff3f -#define SHN_ABS 0xfff1 -#define SHN_COMMON 0xfff2 -#define SHN_XINDEX 0xffff -#define SHN_HIRESERVE 0xffff - - - -#define SHT_NULL 0 -#define SHT_PROGBITS 1 -#define SHT_SYMTAB 2 -#define SHT_STRTAB 3 -#define SHT_RELA 4 -#define SHT_HASH 5 -#define SHT_DYNAMIC 6 -#define SHT_NOTE 7 -#define SHT_NOBITS 8 -#define SHT_REL 9 -#define SHT_SHLIB 10 -#define SHT_DYNSYM 11 -#define SHT_INIT_ARRAY 14 -#define SHT_FINI_ARRAY 15 +#define SHN_UNDEF 0 +#define SHN_LORESERVE 0xff00 +#define SHN_LOPROC 0xff00 +#define SHN_BEFORE 0xff00 + +#define SHN_AFTER 0xff01 + +#define SHN_HIPROC 0xff1f +#define SHN_LOOS 0xff20 +#define SHN_HIOS 0xff3f +#define SHN_ABS 0xfff1 +#define SHN_COMMON 0xfff2 +#define SHN_XINDEX 0xffff +#define SHN_HIRESERVE 0xffff + +#define SHT_NULL 0 +#define SHT_PROGBITS 1 +#define SHT_SYMTAB 2 +#define SHT_STRTAB 3 +#define SHT_RELA 4 +#define SHT_HASH 5 +#define SHT_DYNAMIC 6 +#define SHT_NOTE 7 +#define SHT_NOBITS 8 +#define SHT_REL 9 +#define SHT_SHLIB 10 +#define SHT_DYNSYM 11 +#define SHT_INIT_ARRAY 14 +#define SHT_FINI_ARRAY 15 #define SHT_PREINIT_ARRAY 16 -#define SHT_GROUP 17 -#define SHT_SYMTAB_SHNDX 18 -#define SHT_NUM 19 -#define SHT_LOOS 0x60000000 +#define SHT_GROUP 17 +#define SHT_SYMTAB_SHNDX 18 +#define SHT_NUM 19 +#define SHT_LOOS 0x60000000 #define SHT_GNU_ATTRIBUTES 0x6ffffff5 -#define SHT_GNU_HASH 0x6ffffff6 -#define SHT_GNU_LIBLIST 0x6ffffff7 -#define SHT_CHECKSUM 0x6ffffff8 -#define SHT_LOSUNW 0x6ffffffa -#define SHT_SUNW_move 0x6ffffffa -#define SHT_SUNW_COMDAT 0x6ffffffb -#define SHT_SUNW_syminfo 0x6ffffffc -#define SHT_GNU_verdef 0x6ffffffd -#define SHT_GNU_verneed 0x6ffffffe -#define SHT_GNU_versym 0x6fffffff -#define SHT_HISUNW 0x6fffffff -#define SHT_HIOS 0x6fffffff -#define SHT_LOPROC 0x70000000 -#define SHT_HIPROC 0x7fffffff -#define SHT_LOUSER 0x80000000 -#define SHT_HIUSER 0x8fffffff - -#define SHF_WRITE (1 << 0) -#define SHF_ALLOC (1 << 1) -#define SHF_EXECINSTR (1 << 2) -#define SHF_MERGE (1 << 4) -#define SHF_STRINGS (1 << 5) -#define SHF_INFO_LINK (1 << 6) -#define SHF_LINK_ORDER (1 << 7) +#define SHT_GNU_HASH 0x6ffffff6 +#define SHT_GNU_LIBLIST 0x6ffffff7 +#define SHT_CHECKSUM 0x6ffffff8 +#define SHT_LOSUNW 0x6ffffffa +#define SHT_SUNW_move 0x6ffffffa +#define SHT_SUNW_COMDAT 0x6ffffffb +#define SHT_SUNW_syminfo 0x6ffffffc +#define SHT_GNU_verdef 0x6ffffffd +#define SHT_GNU_verneed 0x6ffffffe +#define SHT_GNU_versym 0x6fffffff +#define SHT_HISUNW 0x6fffffff +#define SHT_HIOS 0x6fffffff +#define SHT_LOPROC 0x70000000 +#define SHT_HIPROC 0x7fffffff +#define SHT_LOUSER 0x80000000 +#define SHT_HIUSER 0x8fffffff + +#define SHF_WRITE (1 << 0) +#define SHF_ALLOC (1 << 1) +#define SHF_EXECINSTR (1 << 2) +#define SHF_MERGE (1 << 4) +#define SHF_STRINGS (1 << 5) +#define SHF_INFO_LINK (1 << 6) +#define SHF_LINK_ORDER (1 << 7) #define SHF_OS_NONCONFORMING (1 << 8) -#define SHF_GROUP (1 << 9) -#define SHF_TLS (1 << 10) -#define SHF_COMPRESSED (1 << 11) -#define SHF_MASKOS 0x0ff00000 -#define SHF_MASKPROC 0xf0000000 -#define SHF_ORDERED (1 << 30) -#define SHF_EXCLUDE (1U << 31) +#define SHF_GROUP (1 << 9) +#define SHF_TLS (1 << 10) +#define SHF_COMPRESSED (1 << 11) +#define SHF_MASKOS 0x0ff00000 +#define SHF_MASKPROC 0xf0000000 +#define SHF_ORDERED (1 << 30) +#define SHF_EXCLUDE (1U << 31) typedef struct { - Elf32_Word ch_type; - Elf32_Word ch_size; - Elf32_Word ch_addralign; + Elf32_Word ch_type; + Elf32_Word ch_size; + Elf32_Word ch_addralign; } Elf32_Chdr; typedef struct { - Elf64_Word ch_type; - Elf64_Word ch_reserved; - Elf64_Xword ch_size; - Elf64_Xword ch_addralign; + Elf64_Word ch_type; + Elf64_Word ch_reserved; + Elf64_Xword ch_size; + Elf64_Xword ch_addralign; } Elf64_Chdr; -#define ELFCOMPRESS_ZLIB 1 -#define ELFCOMPRESS_LOOS 0x60000000 -#define ELFCOMPRESS_HIOS 0x6fffffff -#define ELFCOMPRESS_LOPROC 0x70000000 -#define ELFCOMPRESS_HIPROC 0x7fffffff - +#define ELFCOMPRESS_ZLIB 1 +#define ELFCOMPRESS_LOOS 0x60000000 +#define ELFCOMPRESS_HIOS 0x6fffffff +#define ELFCOMPRESS_LOPROC 0x70000000 +#define ELFCOMPRESS_HIPROC 0x7fffffff -#define GRP_COMDAT 0x1 +#define GRP_COMDAT 0x1 typedef struct { - Elf32_Word st_name; - Elf32_Addr st_value; - Elf32_Word st_size; - unsigned char st_info; - unsigned char st_other; - Elf32_Section st_shndx; + Elf32_Word st_name; + Elf32_Addr st_value; + Elf32_Word st_size; + unsigned char st_info; + unsigned char st_other; + Elf32_Section st_shndx; } Elf32_Sym; typedef struct { - Elf64_Word st_name; - unsigned char st_info; - unsigned char st_other; - Elf64_Section st_shndx; - Elf64_Addr st_value; - Elf64_Xword st_size; + Elf64_Word st_name; + unsigned char st_info; + unsigned char st_other; + Elf64_Section st_shndx; + Elf64_Addr st_value; + Elf64_Xword st_size; } Elf64_Sym; typedef struct { - Elf32_Half si_boundto; - Elf32_Half si_flags; + Elf32_Half si_boundto; + Elf32_Half si_flags; } Elf32_Syminfo; typedef struct { - Elf64_Half si_boundto; - Elf64_Half si_flags; + Elf64_Half si_boundto; + Elf64_Half si_flags; } Elf64_Syminfo; -#define SYMINFO_BT_SELF 0xffff -#define SYMINFO_BT_PARENT 0xfffe -#define SYMINFO_BT_LOWRESERVE 0xff00 - -#define SYMINFO_FLG_DIRECT 0x0001 -#define SYMINFO_FLG_PASSTHRU 0x0002 -#define SYMINFO_FLG_COPY 0x0004 -#define SYMINFO_FLG_LAZYLOAD 0x0008 - -#define SYMINFO_NONE 0 -#define SYMINFO_CURRENT 1 -#define SYMINFO_NUM 2 - -#define ELF32_ST_BIND(val) (((unsigned char) (val)) >> 4) -#define ELF32_ST_TYPE(val) ((val) & 0xf) -#define ELF32_ST_INFO(bind, type) (((bind) << 4) + ((type) & 0xf)) - -#define ELF64_ST_BIND(val) ELF32_ST_BIND (val) -#define ELF64_ST_TYPE(val) ELF32_ST_TYPE (val) -#define ELF64_ST_INFO(bind, type) ELF32_ST_INFO ((bind), (type)) - -#define STB_LOCAL 0 -#define STB_GLOBAL 1 -#define STB_WEAK 2 -#define STB_NUM 3 -#define STB_LOOS 10 -#define STB_GNU_UNIQUE 10 -#define STB_HIOS 12 -#define STB_LOPROC 13 -#define STB_HIPROC 15 - -#define STT_NOTYPE 0 -#define STT_OBJECT 1 -#define STT_FUNC 2 -#define STT_SECTION 3 -#define STT_FILE 4 -#define STT_COMMON 5 -#define STT_TLS 6 -#define STT_NUM 7 -#define STT_LOOS 10 -#define STT_GNU_IFUNC 10 -#define STT_HIOS 12 -#define STT_LOPROC 13 -#define STT_HIPROC 15 - -#define STN_UNDEF 0 - -#define ELF32_ST_VISIBILITY(o) ((o) & 0x03) -#define ELF64_ST_VISIBILITY(o) ELF32_ST_VISIBILITY (o) - -#define STV_DEFAULT 0 -#define STV_INTERNAL 1 -#define STV_HIDDEN 2 -#define STV_PROTECTED 3 - - - +#define SYMINFO_BT_SELF 0xffff +#define SYMINFO_BT_PARENT 0xfffe +#define SYMINFO_BT_LOWRESERVE 0xff00 + +#define SYMINFO_FLG_DIRECT 0x0001 +#define SYMINFO_FLG_PASSTHRU 0x0002 +#define SYMINFO_FLG_COPY 0x0004 +#define SYMINFO_FLG_LAZYLOAD 0x0008 + +#define SYMINFO_NONE 0 +#define SYMINFO_CURRENT 1 +#define SYMINFO_NUM 2 + +#define ELF32_ST_BIND(val) (((unsigned char)(val)) >> 4) +#define ELF32_ST_TYPE(val) ((val)&0xf) +#define ELF32_ST_INFO(bind, type) (((bind) << 4) + ((type)&0xf)) + +#define ELF64_ST_BIND(val) ELF32_ST_BIND(val) +#define ELF64_ST_TYPE(val) ELF32_ST_TYPE(val) +#define ELF64_ST_INFO(bind, type) ELF32_ST_INFO((bind), (type)) + +#define STB_LOCAL 0 +#define STB_GLOBAL 1 +#define STB_WEAK 2 +#define STB_NUM 3 +#define STB_LOOS 10 +#define STB_GNU_UNIQUE 10 +#define STB_HIOS 12 +#define STB_LOPROC 13 +#define STB_HIPROC 15 + +#define STT_NOTYPE 0 +#define STT_OBJECT 1 +#define STT_FUNC 2 +#define STT_SECTION 3 +#define STT_FILE 4 +#define STT_COMMON 5 +#define STT_TLS 6 +#define STT_NUM 7 +#define STT_LOOS 10 +#define STT_GNU_IFUNC 10 +#define STT_HIOS 12 +#define STT_LOPROC 13 +#define STT_HIPROC 15 + +#define STN_UNDEF 0 + +#define ELF32_ST_VISIBILITY(o) ((o)&0x03) +#define ELF64_ST_VISIBILITY(o) ELF32_ST_VISIBILITY(o) + +#define STV_DEFAULT 0 +#define STV_INTERNAL 1 +#define STV_HIDDEN 2 +#define STV_PROTECTED 3 typedef struct { - Elf32_Addr r_offset; - Elf32_Word r_info; + Elf32_Addr r_offset; + Elf32_Word r_info; } Elf32_Rel; typedef struct { - Elf64_Addr r_offset; - Elf64_Xword r_info; + Elf64_Addr r_offset; + Elf64_Xword r_info; } Elf64_Rel; - - typedef struct { - Elf32_Addr r_offset; - Elf32_Word r_info; - Elf32_Sword r_addend; + Elf32_Addr r_offset; + Elf32_Word r_info; + Elf32_Sword r_addend; } Elf32_Rela; typedef struct { - Elf64_Addr r_offset; - Elf64_Xword r_info; - Elf64_Sxword r_addend; + Elf64_Addr r_offset; + Elf64_Xword r_info; + Elf64_Sxword r_addend; } Elf64_Rela; +#define ELF32_R_SYM(val) ((val) >> 8) +#define ELF32_R_TYPE(val) ((val)&0xff) +#define ELF32_R_INFO(sym, type) (((sym) << 8) + ((type)&0xff)) - -#define ELF32_R_SYM(val) ((val) >> 8) -#define ELF32_R_TYPE(val) ((val) & 0xff) -#define ELF32_R_INFO(sym, type) (((sym) << 8) + ((type) & 0xff)) - -#define ELF64_R_SYM(i) ((i) >> 32) -#define ELF64_R_TYPE(i) ((i) & 0xffffffff) -#define ELF64_R_INFO(sym,type) ((((Elf64_Xword) (sym)) << 32) + (type)) - - +#define ELF64_R_SYM(i) ((i) >> 32) +#define ELF64_R_TYPE(i) ((i)&0xffffffff) +#define ELF64_R_INFO(sym, type) ((((Elf64_Xword)(sym)) << 32) + (type)) typedef struct { - Elf32_Word p_type; - Elf32_Off p_offset; - Elf32_Addr p_vaddr; - Elf32_Addr p_paddr; - Elf32_Word p_filesz; - Elf32_Word p_memsz; - Elf32_Word p_flags; - Elf32_Word p_align; + Elf32_Word p_type; + Elf32_Off p_offset; + Elf32_Addr p_vaddr; + Elf32_Addr p_paddr; + Elf32_Word p_filesz; + Elf32_Word p_memsz; + Elf32_Word p_flags; + Elf32_Word p_align; } Elf32_Phdr; typedef struct { - Elf64_Word p_type; - Elf64_Word p_flags; - Elf64_Off p_offset; - Elf64_Addr p_vaddr; - Elf64_Addr p_paddr; - Elf64_Xword p_filesz; - Elf64_Xword p_memsz; - Elf64_Xword p_align; + Elf64_Word p_type; + Elf64_Word p_flags; + Elf64_Off p_offset; + Elf64_Addr p_vaddr; + Elf64_Addr p_paddr; + Elf64_Xword p_filesz; + Elf64_Xword p_memsz; + Elf64_Xword p_align; } Elf64_Phdr; - - -#define PT_NULL 0 -#define PT_LOAD 1 -#define PT_DYNAMIC 2 -#define PT_INTERP 3 -#define PT_NOTE 4 -#define PT_SHLIB 5 -#define PT_PHDR 6 -#define PT_TLS 7 -#define PT_NUM 8 -#define PT_LOOS 0x60000000 -#define PT_GNU_EH_FRAME 0x6474e550 -#define PT_GNU_STACK 0x6474e551 -#define PT_GNU_RELRO 0x6474e552 -#define PT_LOSUNW 0x6ffffffa -#define PT_SUNWBSS 0x6ffffffa -#define PT_SUNWSTACK 0x6ffffffb -#define PT_HISUNW 0x6fffffff -#define PT_HIOS 0x6fffffff -#define PT_LOPROC 0x70000000 -#define PT_HIPROC 0x7fffffff - +#define PT_NULL 0 +#define PT_LOAD 1 +#define PT_DYNAMIC 2 +#define PT_INTERP 3 +#define PT_NOTE 4 +#define PT_SHLIB 5 +#define PT_PHDR 6 +#define PT_TLS 7 +#define PT_NUM 8 +#define PT_LOOS 0x60000000 +#define PT_GNU_EH_FRAME 0x6474e550 +#define PT_GNU_STACK 0x6474e551 +#define PT_GNU_RELRO 0x6474e552 +#define PT_LOSUNW 0x6ffffffa +#define PT_SUNWBSS 0x6ffffffa +#define PT_SUNWSTACK 0x6ffffffb +#define PT_HISUNW 0x6fffffff +#define PT_HIOS 0x6fffffff +#define PT_LOPROC 0x70000000 +#define PT_HIPROC 0x7fffffff #define PN_XNUM 0xffff - -#define PF_X (1 << 0) -#define PF_W (1 << 1) -#define PF_R (1 << 2) -#define PF_MASKOS 0x0ff00000 -#define PF_MASKPROC 0xf0000000 - - - -#define NT_PRSTATUS 1 -#define NT_FPREGSET 2 -#define NT_PRPSINFO 3 -#define NT_PRXREG 4 -#define NT_TASKSTRUCT 4 -#define NT_PLATFORM 5 -#define NT_AUXV 6 -#define NT_GWINDOWS 7 -#define NT_ASRS 8 -#define NT_PSTATUS 10 -#define NT_PSINFO 13 -#define NT_PRCRED 14 -#define NT_UTSNAME 15 -#define NT_LWPSTATUS 16 -#define NT_LWPSINFO 17 -#define NT_PRFPXREG 20 -#define NT_SIGINFO 0x53494749 -#define NT_FILE 0x46494c45 -#define NT_PRXFPREG 0x46e62b7f -#define NT_PPC_VMX 0x100 -#define NT_PPC_SPE 0x101 -#define NT_PPC_VSX 0x102 -#define NT_386_TLS 0x200 -#define NT_386_IOPERM 0x201 -#define NT_X86_XSTATE 0x202 -#define NT_S390_HIGH_GPRS 0x300 -#define NT_S390_TIMER 0x301 -#define NT_S390_TODCMP 0x302 -#define NT_S390_TODPREG 0x303 -#define NT_S390_CTRS 0x304 -#define NT_S390_PREFIX 0x305 -#define NT_S390_LAST_BREAK 0x306 -#define NT_S390_SYSTEM_CALL 0x307 -#define NT_S390_TDB 0x308 -#define NT_ARM_VFP 0x400 -#define NT_ARM_TLS 0x401 -#define NT_ARM_HW_BREAK 0x402 -#define NT_ARM_HW_WATCH 0x403 -#define NT_ARM_SYSTEM_CALL 0x404 -#define NT_ARM_SVE 0x405 -#define NT_METAG_CBUF 0x500 -#define NT_METAG_RPIPE 0x501 -#define NT_METAG_TLS 0x502 -#define NT_VERSION 1 - - - +#define PF_X (1 << 0) +#define PF_W (1 << 1) +#define PF_R (1 << 2) +#define PF_MASKOS 0x0ff00000 +#define PF_MASKPROC 0xf0000000 + +#define NT_PRSTATUS 1 +#define NT_FPREGSET 2 +#define NT_PRPSINFO 3 +#define NT_PRXREG 4 +#define NT_TASKSTRUCT 4 +#define NT_PLATFORM 5 +#define NT_AUXV 6 +#define NT_GWINDOWS 7 +#define NT_ASRS 8 +#define NT_PSTATUS 10 +#define NT_PSINFO 13 +#define NT_PRCRED 14 +#define NT_UTSNAME 15 +#define NT_LWPSTATUS 16 +#define NT_LWPSINFO 17 +#define NT_PRFPXREG 20 +#define NT_SIGINFO 0x53494749 +#define NT_FILE 0x46494c45 +#define NT_PRXFPREG 0x46e62b7f +#define NT_PPC_VMX 0x100 +#define NT_PPC_SPE 0x101 +#define NT_PPC_VSX 0x102 +#define NT_386_TLS 0x200 +#define NT_386_IOPERM 0x201 +#define NT_X86_XSTATE 0x202 +#define NT_S390_HIGH_GPRS 0x300 +#define NT_S390_TIMER 0x301 +#define NT_S390_TODCMP 0x302 +#define NT_S390_TODPREG 0x303 +#define NT_S390_CTRS 0x304 +#define NT_S390_PREFIX 0x305 +#define NT_S390_LAST_BREAK 0x306 +#define NT_S390_SYSTEM_CALL 0x307 +#define NT_S390_TDB 0x308 +#define NT_ARM_VFP 0x400 +#define NT_ARM_TLS 0x401 +#define NT_ARM_HW_BREAK 0x402 +#define NT_ARM_HW_WATCH 0x403 +#define NT_ARM_SYSTEM_CALL 0x404 +#define NT_ARM_SVE 0x405 +#define NT_METAG_CBUF 0x500 +#define NT_METAG_RPIPE 0x501 +#define NT_METAG_TLS 0x502 +#define NT_VERSION 1 typedef struct { - Elf32_Sword d_tag; - union { - Elf32_Word d_val; - Elf32_Addr d_ptr; - } d_un; + Elf32_Sword d_tag; + union { + Elf32_Word d_val; + Elf32_Addr d_ptr; + } d_un; } Elf32_Dyn; typedef struct { - Elf64_Sxword d_tag; - union { - Elf64_Xword d_val; - Elf64_Addr d_ptr; - } d_un; + Elf64_Sxword d_tag; + union { + Elf64_Xword d_val; + Elf64_Addr d_ptr; + } d_un; } Elf64_Dyn; - - -#define DT_NULL 0 -#define DT_NEEDED 1 -#define DT_PLTRELSZ 2 -#define DT_PLTGOT 3 -#define DT_HASH 4 -#define DT_STRTAB 5 -#define DT_SYMTAB 6 -#define DT_RELA 7 -#define DT_RELASZ 8 -#define DT_RELAENT 9 -#define DT_STRSZ 10 -#define DT_SYMENT 11 -#define DT_INIT 12 -#define DT_FINI 13 -#define DT_SONAME 14 -#define DT_RPATH 15 -#define DT_SYMBOLIC 16 -#define DT_REL 17 -#define DT_RELSZ 18 -#define DT_RELENT 19 -#define DT_PLTREL 20 -#define DT_DEBUG 21 -#define DT_TEXTREL 22 -#define DT_JMPREL 23 -#define DT_BIND_NOW 24 -#define DT_INIT_ARRAY 25 -#define DT_FINI_ARRAY 26 -#define DT_INIT_ARRAYSZ 27 -#define DT_FINI_ARRAYSZ 28 -#define DT_RUNPATH 29 -#define DT_FLAGS 30 -#define DT_ENCODING 32 +#define DT_NULL 0 +#define DT_NEEDED 1 +#define DT_PLTRELSZ 2 +#define DT_PLTGOT 3 +#define DT_HASH 4 +#define DT_STRTAB 5 +#define DT_SYMTAB 6 +#define DT_RELA 7 +#define DT_RELASZ 8 +#define DT_RELAENT 9 +#define DT_STRSZ 10 +#define DT_SYMENT 11 +#define DT_INIT 12 +#define DT_FINI 13 +#define DT_SONAME 14 +#define DT_RPATH 15 +#define DT_SYMBOLIC 16 +#define DT_REL 17 +#define DT_RELSZ 18 +#define DT_RELENT 19 +#define DT_PLTREL 20 +#define DT_DEBUG 21 +#define DT_TEXTREL 22 +#define DT_JMPREL 23 +#define DT_BIND_NOW 24 +#define DT_INIT_ARRAY 25 +#define DT_FINI_ARRAY 26 +#define DT_INIT_ARRAYSZ 27 +#define DT_FINI_ARRAYSZ 28 +#define DT_RUNPATH 29 +#define DT_FLAGS 30 +#define DT_ENCODING 32 #define DT_PREINIT_ARRAY 32 #define DT_PREINIT_ARRAYSZ 33 -#define DT_NUM 34 -#define DT_LOOS 0x6000000d -#define DT_HIOS 0x6ffff000 -#define DT_LOPROC 0x70000000 -#define DT_HIPROC 0x7fffffff -#define DT_PROCNUM DT_MIPS_NUM - -#define DT_VALRNGLO 0x6ffffd00 +#define DT_NUM 34 +#define DT_LOOS 0x6000000d +#define DT_HIOS 0x6ffff000 +#define DT_LOPROC 0x70000000 +#define DT_HIPROC 0x7fffffff +#define DT_PROCNUM DT_MIPS_NUM + +#define DT_VALRNGLO 0x6ffffd00 #define DT_GNU_PRELINKED 0x6ffffdf5 #define DT_GNU_CONFLICTSZ 0x6ffffdf6 #define DT_GNU_LIBLISTSZ 0x6ffffdf7 -#define DT_CHECKSUM 0x6ffffdf8 -#define DT_PLTPADSZ 0x6ffffdf9 -#define DT_MOVEENT 0x6ffffdfa -#define DT_MOVESZ 0x6ffffdfb -#define DT_FEATURE_1 0x6ffffdfc -#define DT_POSFLAG_1 0x6ffffdfd - -#define DT_SYMINSZ 0x6ffffdfe -#define DT_SYMINENT 0x6ffffdff -#define DT_VALRNGHI 0x6ffffdff -#define DT_VALTAGIDX(tag) (DT_VALRNGHI - (tag)) +#define DT_CHECKSUM 0x6ffffdf8 +#define DT_PLTPADSZ 0x6ffffdf9 +#define DT_MOVEENT 0x6ffffdfa +#define DT_MOVESZ 0x6ffffdfb +#define DT_FEATURE_1 0x6ffffdfc +#define DT_POSFLAG_1 0x6ffffdfd + +#define DT_SYMINSZ 0x6ffffdfe +#define DT_SYMINENT 0x6ffffdff +#define DT_VALRNGHI 0x6ffffdff +#define DT_VALTAGIDX(tag) (DT_VALRNGHI - (tag)) #define DT_VALNUM 12 -#define DT_ADDRRNGLO 0x6ffffe00 -#define DT_GNU_HASH 0x6ffffef5 -#define DT_TLSDESC_PLT 0x6ffffef6 -#define DT_TLSDESC_GOT 0x6ffffef7 -#define DT_GNU_CONFLICT 0x6ffffef8 -#define DT_GNU_LIBLIST 0x6ffffef9 -#define DT_CONFIG 0x6ffffefa -#define DT_DEPAUDIT 0x6ffffefb -#define DT_AUDIT 0x6ffffefc -#define DT_PLTPAD 0x6ffffefd -#define DT_MOVETAB 0x6ffffefe -#define DT_SYMINFO 0x6ffffeff -#define DT_ADDRRNGHI 0x6ffffeff -#define DT_ADDRTAGIDX(tag) (DT_ADDRRNGHI - (tag)) +#define DT_ADDRRNGLO 0x6ffffe00 +#define DT_GNU_HASH 0x6ffffef5 +#define DT_TLSDESC_PLT 0x6ffffef6 +#define DT_TLSDESC_GOT 0x6ffffef7 +#define DT_GNU_CONFLICT 0x6ffffef8 +#define DT_GNU_LIBLIST 0x6ffffef9 +#define DT_CONFIG 0x6ffffefa +#define DT_DEPAUDIT 0x6ffffefb +#define DT_AUDIT 0x6ffffefc +#define DT_PLTPAD 0x6ffffefd +#define DT_MOVETAB 0x6ffffefe +#define DT_SYMINFO 0x6ffffeff +#define DT_ADDRRNGHI 0x6ffffeff +#define DT_ADDRTAGIDX(tag) (DT_ADDRRNGHI - (tag)) #define DT_ADDRNUM 11 +#define DT_VERSYM 0x6ffffff0 +#define DT_RELACOUNT 0x6ffffff9 +#define DT_RELCOUNT 0x6ffffffa -#define DT_VERSYM 0x6ffffff0 - -#define DT_RELACOUNT 0x6ffffff9 -#define DT_RELCOUNT 0x6ffffffa +#define DT_FLAGS_1 0x6ffffffb +#define DT_VERDEF 0x6ffffffc +#define DT_VERDEFNUM 0x6ffffffd +#define DT_VERNEED 0x6ffffffe -#define DT_FLAGS_1 0x6ffffffb -#define DT_VERDEF 0x6ffffffc - -#define DT_VERDEFNUM 0x6ffffffd -#define DT_VERNEED 0x6ffffffe - -#define DT_VERNEEDNUM 0x6fffffff -#define DT_VERSIONTAGIDX(tag) (DT_VERNEEDNUM - (tag)) +#define DT_VERNEEDNUM 0x6fffffff +#define DT_VERSIONTAGIDX(tag) (DT_VERNEEDNUM - (tag)) #define DT_VERSIONTAGNUM 16 - - -#define DT_AUXILIARY 0x7ffffffd -#define DT_FILTER 0x7fffffff -#define DT_EXTRATAGIDX(tag) ((Elf32_Word)-((Elf32_Sword) (tag) <<1>>1)-1) -#define DT_EXTRANUM 3 - - -#define DF_ORIGIN 0x00000001 -#define DF_SYMBOLIC 0x00000002 -#define DF_TEXTREL 0x00000004 -#define DF_BIND_NOW 0x00000008 -#define DF_STATIC_TLS 0x00000010 - - - -#define DF_1_NOW 0x00000001 -#define DF_1_GLOBAL 0x00000002 -#define DF_1_GROUP 0x00000004 -#define DF_1_NODELETE 0x00000008 -#define DF_1_LOADFLTR 0x00000010 -#define DF_1_INITFIRST 0x00000020 -#define DF_1_NOOPEN 0x00000040 -#define DF_1_ORIGIN 0x00000080 -#define DF_1_DIRECT 0x00000100 -#define DF_1_TRANS 0x00000200 -#define DF_1_INTERPOSE 0x00000400 -#define DF_1_NODEFLIB 0x00000800 -#define DF_1_NODUMP 0x00001000 -#define DF_1_CONFALT 0x00002000 -#define DF_1_ENDFILTEE 0x00004000 -#define DF_1_DISPRELDNE 0x00008000 -#define DF_1_DISPRELPND 0x00010000 -#define DF_1_NODIRECT 0x00020000 -#define DF_1_IGNMULDEF 0x00040000 -#define DF_1_NOKSYMS 0x00080000 -#define DF_1_NOHDR 0x00100000 -#define DF_1_EDITED 0x00200000 -#define DF_1_NORELOC 0x00400000 -#define DF_1_SYMINTPOSE 0x00800000 -#define DF_1_GLOBAUDIT 0x01000000 -#define DF_1_SINGLETON 0x02000000 - -#define DTF_1_PARINIT 0x00000001 -#define DTF_1_CONFEXP 0x00000002 - - -#define DF_P1_LAZYLOAD 0x00000001 -#define DF_P1_GROUPPERM 0x00000002 - - - +#define DT_AUXILIARY 0x7ffffffd +#define DT_FILTER 0x7fffffff +#define DT_EXTRATAGIDX(tag) ((Elf32_Word) - ((Elf32_Sword)(tag) << 1 >> 1) - 1) +#define DT_EXTRANUM 3 + +#define DF_ORIGIN 0x00000001 +#define DF_SYMBOLIC 0x00000002 +#define DF_TEXTREL 0x00000004 +#define DF_BIND_NOW 0x00000008 +#define DF_STATIC_TLS 0x00000010 + +#define DF_1_NOW 0x00000001 +#define DF_1_GLOBAL 0x00000002 +#define DF_1_GROUP 0x00000004 +#define DF_1_NODELETE 0x00000008 +#define DF_1_LOADFLTR 0x00000010 +#define DF_1_INITFIRST 0x00000020 +#define DF_1_NOOPEN 0x00000040 +#define DF_1_ORIGIN 0x00000080 +#define DF_1_DIRECT 0x00000100 +#define DF_1_TRANS 0x00000200 +#define DF_1_INTERPOSE 0x00000400 +#define DF_1_NODEFLIB 0x00000800 +#define DF_1_NODUMP 0x00001000 +#define DF_1_CONFALT 0x00002000 +#define DF_1_ENDFILTEE 0x00004000 +#define DF_1_DISPRELDNE 0x00008000 +#define DF_1_DISPRELPND 0x00010000 +#define DF_1_NODIRECT 0x00020000 +#define DF_1_IGNMULDEF 0x00040000 +#define DF_1_NOKSYMS 0x00080000 +#define DF_1_NOHDR 0x00100000 +#define DF_1_EDITED 0x00200000 +#define DF_1_NORELOC 0x00400000 +#define DF_1_SYMINTPOSE 0x00800000 +#define DF_1_GLOBAUDIT 0x01000000 +#define DF_1_SINGLETON 0x02000000 + +#define DTF_1_PARINIT 0x00000001 +#define DTF_1_CONFEXP 0x00000002 + +#define DF_P1_LAZYLOAD 0x00000001 +#define DF_P1_GROUPPERM 0x00000002 typedef struct { - Elf32_Half vd_version; - Elf32_Half vd_flags; - Elf32_Half vd_ndx; - Elf32_Half vd_cnt; - Elf32_Word vd_hash; - Elf32_Word vd_aux; - Elf32_Word vd_next; + Elf32_Half vd_version; + Elf32_Half vd_flags; + Elf32_Half vd_ndx; + Elf32_Half vd_cnt; + Elf32_Word vd_hash; + Elf32_Word vd_aux; + Elf32_Word vd_next; } Elf32_Verdef; typedef struct { - Elf64_Half vd_version; - Elf64_Half vd_flags; - Elf64_Half vd_ndx; - Elf64_Half vd_cnt; - Elf64_Word vd_hash; - Elf64_Word vd_aux; - Elf64_Word vd_next; + Elf64_Half vd_version; + Elf64_Half vd_flags; + Elf64_Half vd_ndx; + Elf64_Half vd_cnt; + Elf64_Word vd_hash; + Elf64_Word vd_aux; + Elf64_Word vd_next; } Elf64_Verdef; +#define VER_DEF_NONE 0 +#define VER_DEF_CURRENT 1 +#define VER_DEF_NUM 2 +#define VER_FLG_BASE 0x1 +#define VER_FLG_WEAK 0x2 -#define VER_DEF_NONE 0 -#define VER_DEF_CURRENT 1 -#define VER_DEF_NUM 2 - - -#define VER_FLG_BASE 0x1 -#define VER_FLG_WEAK 0x2 - - -#define VER_NDX_LOCAL 0 -#define VER_NDX_GLOBAL 1 -#define VER_NDX_LORESERVE 0xff00 -#define VER_NDX_ELIMINATE 0xff01 - - +#define VER_NDX_LOCAL 0 +#define VER_NDX_GLOBAL 1 +#define VER_NDX_LORESERVE 0xff00 +#define VER_NDX_ELIMINATE 0xff01 typedef struct { - Elf32_Word vda_name; - Elf32_Word vda_next; + Elf32_Word vda_name; + Elf32_Word vda_next; } Elf32_Verdaux; typedef struct { - Elf64_Word vda_name; - Elf64_Word vda_next; + Elf64_Word vda_name; + Elf64_Word vda_next; } Elf64_Verdaux; - - - typedef struct { - Elf32_Half vn_version; - Elf32_Half vn_cnt; - Elf32_Word vn_file; - Elf32_Word vn_aux; - Elf32_Word vn_next; + Elf32_Half vn_version; + Elf32_Half vn_cnt; + Elf32_Word vn_file; + Elf32_Word vn_aux; + Elf32_Word vn_next; } Elf32_Verneed; typedef struct { - Elf64_Half vn_version; - Elf64_Half vn_cnt; - Elf64_Word vn_file; - Elf64_Word vn_aux; - Elf64_Word vn_next; + Elf64_Half vn_version; + Elf64_Half vn_cnt; + Elf64_Word vn_file; + Elf64_Word vn_aux; + Elf64_Word vn_next; } Elf64_Verneed; - - -#define VER_NEED_NONE 0 +#define VER_NEED_NONE 0 #define VER_NEED_CURRENT 1 -#define VER_NEED_NUM 2 - - +#define VER_NEED_NUM 2 typedef struct { - Elf32_Word vna_hash; - Elf32_Half vna_flags; - Elf32_Half vna_other; - Elf32_Word vna_name; - Elf32_Word vna_next; + Elf32_Word vna_hash; + Elf32_Half vna_flags; + Elf32_Half vna_other; + Elf32_Word vna_name; + Elf32_Word vna_next; } Elf32_Vernaux; typedef struct { - Elf64_Word vna_hash; - Elf64_Half vna_flags; - Elf64_Half vna_other; - Elf64_Word vna_name; - Elf64_Word vna_next; + Elf64_Word vna_hash; + Elf64_Half vna_flags; + Elf64_Half vna_other; + Elf64_Word vna_name; + Elf64_Word vna_next; } Elf64_Vernaux; - - -#define VER_FLG_WEAK 0x2 - - +#define VER_FLG_WEAK 0x2 typedef struct { - uint32_t a_type; - union { - uint32_t a_val; - } a_un; + uint32_t a_type; + union { + uint32_t a_val; + } a_un; } Elf32_auxv_t; typedef struct { - uint64_t a_type; - union { - uint64_t a_val; - } a_un; + uint64_t a_type; + union { + uint64_t a_val; + } a_un; } Elf64_auxv_t; +#define AT_NULL 0 +#define AT_IGNORE 1 +#define AT_EXECFD 2 +#define AT_PHDR 3 +#define AT_PHENT 4 +#define AT_PHNUM 5 +#define AT_PAGESZ 6 +#define AT_BASE 7 +#define AT_FLAGS 8 +#define AT_ENTRY 9 +#define AT_NOTELF 10 +#define AT_UID 11 +#define AT_EUID 12 +#define AT_GID 13 +#define AT_EGID 14 +#define AT_CLKTCK 17 +#define AT_PLATFORM 15 +#define AT_HWCAP 16 -#define AT_NULL 0 -#define AT_IGNORE 1 -#define AT_EXECFD 2 -#define AT_PHDR 3 -#define AT_PHENT 4 -#define AT_PHNUM 5 -#define AT_PAGESZ 6 -#define AT_BASE 7 -#define AT_FLAGS 8 -#define AT_ENTRY 9 -#define AT_NOTELF 10 -#define AT_UID 11 -#define AT_EUID 12 -#define AT_GID 13 -#define AT_EGID 14 -#define AT_CLKTCK 17 - - -#define AT_PLATFORM 15 -#define AT_HWCAP 16 +#define AT_FPUCW 18 +#define AT_DCACHEBSIZE 19 +#define AT_ICACHEBSIZE 20 +#define AT_UCACHEBSIZE 21 +#define AT_IGNOREPPC 22 - -#define AT_FPUCW 18 - - -#define AT_DCACHEBSIZE 19 -#define AT_ICACHEBSIZE 20 -#define AT_UCACHEBSIZE 21 - - - -#define AT_IGNOREPPC 22 - -#define AT_SECURE 23 +#define AT_SECURE 23 #define AT_BASE_PLATFORM 24 -#define AT_RANDOM 25 - -#define AT_HWCAP2 26 - -#define AT_EXECFN 31 - - - -#define AT_SYSINFO 32 -#define AT_SYSINFO_EHDR 33 +#define AT_RANDOM 25 +#define AT_HWCAP2 26 +#define AT_EXECFN 31 -#define AT_L1I_CACHESHAPE 34 -#define AT_L1D_CACHESHAPE 35 -#define AT_L2_CACHESHAPE 36 -#define AT_L3_CACHESHAPE 37 - - +#define AT_SYSINFO 32 +#define AT_SYSINFO_EHDR 33 +#define AT_L1I_CACHESHAPE 34 +#define AT_L1D_CACHESHAPE 35 +#define AT_L2_CACHESHAPE 36 +#define AT_L3_CACHESHAPE 37 typedef struct { - Elf32_Word n_namesz; - Elf32_Word n_descsz; - Elf32_Word n_type; + Elf32_Word n_namesz; + Elf32_Word n_descsz; + Elf32_Word n_type; } Elf32_Nhdr; typedef struct { - Elf64_Word n_namesz; - Elf64_Word n_descsz; - Elf64_Word n_type; + Elf64_Word n_namesz; + Elf64_Word n_descsz; + Elf64_Word n_type; } Elf64_Nhdr; +#define ELF_NOTE_SOLARIS "SUNW Solaris" +#define ELF_NOTE_GNU "GNU" +#define ELF_NOTE_PAGESIZE_HINT 1 -#define ELF_NOTE_SOLARIS "SUNW Solaris" - - -#define ELF_NOTE_GNU "GNU" - - - - - -#define ELF_NOTE_PAGESIZE_HINT 1 - - -#define NT_GNU_ABI_TAG 1 -#define ELF_NOTE_ABI NT_GNU_ABI_TAG - - - -#define ELF_NOTE_OS_LINUX 0 -#define ELF_NOTE_OS_GNU 1 -#define ELF_NOTE_OS_SOLARIS2 2 -#define ELF_NOTE_OS_FREEBSD 3 - -#define NT_GNU_BUILD_ID 3 -#define NT_GNU_GOLD_VERSION 4 +#define NT_GNU_ABI_TAG 1 +#define ELF_NOTE_ABI NT_GNU_ABI_TAG +#define ELF_NOTE_OS_LINUX 0 +#define ELF_NOTE_OS_GNU 1 +#define ELF_NOTE_OS_SOLARIS2 2 +#define ELF_NOTE_OS_FREEBSD 3 +#define NT_GNU_BUILD_ID 3 +#define NT_GNU_GOLD_VERSION 4 typedef struct { - Elf32_Xword m_value; - Elf32_Word m_info; - Elf32_Word m_poffset; - Elf32_Half m_repeat; - Elf32_Half m_stride; + Elf32_Xword m_value; + Elf32_Word m_info; + Elf32_Word m_poffset; + Elf32_Half m_repeat; + Elf32_Half m_stride; } Elf32_Move; typedef struct { - Elf64_Xword m_value; - Elf64_Xword m_info; - Elf64_Xword m_poffset; - Elf64_Half m_repeat; - Elf64_Half m_stride; + Elf64_Xword m_value; + Elf64_Xword m_info; + Elf64_Xword m_poffset; + Elf64_Half m_repeat; + Elf64_Half m_stride; } Elf64_Move; - -#define ELF32_M_SYM(info) ((info) >> 8) -#define ELF32_M_SIZE(info) ((unsigned char) (info)) -#define ELF32_M_INFO(sym, size) (((sym) << 8) + (unsigned char) (size)) - -#define ELF64_M_SYM(info) ELF32_M_SYM (info) -#define ELF64_M_SIZE(info) ELF32_M_SIZE (info) -#define ELF64_M_INFO(sym, size) ELF32_M_INFO (sym, size) - -#define EF_CPU32 0x00810000 - -#define R_68K_NONE 0 -#define R_68K_32 1 -#define R_68K_16 2 -#define R_68K_8 3 -#define R_68K_PC32 4 -#define R_68K_PC16 5 -#define R_68K_PC8 6 -#define R_68K_GOT32 7 -#define R_68K_GOT16 8 -#define R_68K_GOT8 9 -#define R_68K_GOT32O 10 -#define R_68K_GOT16O 11 -#define R_68K_GOT8O 12 -#define R_68K_PLT32 13 -#define R_68K_PLT16 14 -#define R_68K_PLT8 15 -#define R_68K_PLT32O 16 -#define R_68K_PLT16O 17 -#define R_68K_PLT8O 18 -#define R_68K_COPY 19 -#define R_68K_GLOB_DAT 20 -#define R_68K_JMP_SLOT 21 -#define R_68K_RELATIVE 22 -#define R_68K_NUM 23 - -#define R_386_NONE 0 -#define R_386_32 1 -#define R_386_PC32 2 -#define R_386_GOT32 3 -#define R_386_PLT32 4 -#define R_386_COPY 5 -#define R_386_GLOB_DAT 6 -#define R_386_JMP_SLOT 7 -#define R_386_RELATIVE 8 -#define R_386_GOTOFF 9 -#define R_386_GOTPC 10 -#define R_386_32PLT 11 -#define R_386_TLS_TPOFF 14 -#define R_386_TLS_IE 15 -#define R_386_TLS_GOTIE 16 -#define R_386_TLS_LE 17 -#define R_386_TLS_GD 18 -#define R_386_TLS_LDM 19 -#define R_386_16 20 -#define R_386_PC16 21 -#define R_386_8 22 -#define R_386_PC8 23 -#define R_386_TLS_GD_32 24 -#define R_386_TLS_GD_PUSH 25 -#define R_386_TLS_GD_CALL 26 -#define R_386_TLS_GD_POP 27 -#define R_386_TLS_LDM_32 28 +#define ELF32_M_SYM(info) ((info) >> 8) +#define ELF32_M_SIZE(info) ((unsigned char)(info)) +#define ELF32_M_INFO(sym, size) (((sym) << 8) + (unsigned char)(size)) + +#define ELF64_M_SYM(info) ELF32_M_SYM(info) +#define ELF64_M_SIZE(info) ELF32_M_SIZE(info) +#define ELF64_M_INFO(sym, size) ELF32_M_INFO(sym, size) + +#define EF_CPU32 0x00810000 + +#define R_68K_NONE 0 +#define R_68K_32 1 +#define R_68K_16 2 +#define R_68K_8 3 +#define R_68K_PC32 4 +#define R_68K_PC16 5 +#define R_68K_PC8 6 +#define R_68K_GOT32 7 +#define R_68K_GOT16 8 +#define R_68K_GOT8 9 +#define R_68K_GOT32O 10 +#define R_68K_GOT16O 11 +#define R_68K_GOT8O 12 +#define R_68K_PLT32 13 +#define R_68K_PLT16 14 +#define R_68K_PLT8 15 +#define R_68K_PLT32O 16 +#define R_68K_PLT16O 17 +#define R_68K_PLT8O 18 +#define R_68K_COPY 19 +#define R_68K_GLOB_DAT 20 +#define R_68K_JMP_SLOT 21 +#define R_68K_RELATIVE 22 +#define R_68K_NUM 23 + +#define R_386_NONE 0 +#define R_386_32 1 +#define R_386_PC32 2 +#define R_386_GOT32 3 +#define R_386_PLT32 4 +#define R_386_COPY 5 +#define R_386_GLOB_DAT 6 +#define R_386_JMP_SLOT 7 +#define R_386_RELATIVE 8 +#define R_386_GOTOFF 9 +#define R_386_GOTPC 10 +#define R_386_32PLT 11 +#define R_386_TLS_TPOFF 14 +#define R_386_TLS_IE 15 +#define R_386_TLS_GOTIE 16 +#define R_386_TLS_LE 17 +#define R_386_TLS_GD 18 +#define R_386_TLS_LDM 19 +#define R_386_16 20 +#define R_386_PC16 21 +#define R_386_8 22 +#define R_386_PC8 23 +#define R_386_TLS_GD_32 24 +#define R_386_TLS_GD_PUSH 25 +#define R_386_TLS_GD_CALL 26 +#define R_386_TLS_GD_POP 27 +#define R_386_TLS_LDM_32 28 #define R_386_TLS_LDM_PUSH 29 #define R_386_TLS_LDM_CALL 30 -#define R_386_TLS_LDM_POP 31 -#define R_386_TLS_LDO_32 32 -#define R_386_TLS_IE_32 33 -#define R_386_TLS_LE_32 34 +#define R_386_TLS_LDM_POP 31 +#define R_386_TLS_LDO_32 32 +#define R_386_TLS_IE_32 33 +#define R_386_TLS_LE_32 34 #define R_386_TLS_DTPMOD32 35 #define R_386_TLS_DTPOFF32 36 -#define R_386_TLS_TPOFF32 37 -#define R_386_SIZE32 38 -#define R_386_TLS_GOTDESC 39 +#define R_386_TLS_TPOFF32 37 +#define R_386_SIZE32 38 +#define R_386_TLS_GOTDESC 39 #define R_386_TLS_DESC_CALL 40 -#define R_386_TLS_DESC 41 -#define R_386_IRELATIVE 42 -#define R_386_GOT32X 43 -#define R_386_NUM 44 - - - - - -#define STT_SPARC_REGISTER 13 - - - -#define EF_SPARCV9_MM 3 -#define EF_SPARCV9_TSO 0 -#define EF_SPARCV9_PSO 1 -#define EF_SPARCV9_RMO 2 -#define EF_SPARC_LEDATA 0x800000 -#define EF_SPARC_EXT_MASK 0xFFFF00 -#define EF_SPARC_32PLUS 0x000100 -#define EF_SPARC_SUN_US1 0x000200 -#define EF_SPARC_HAL_R1 0x000400 -#define EF_SPARC_SUN_US3 0x000800 - - - -#define R_SPARC_NONE 0 -#define R_SPARC_8 1 -#define R_SPARC_16 2 -#define R_SPARC_32 3 -#define R_SPARC_DISP8 4 -#define R_SPARC_DISP16 5 -#define R_SPARC_DISP32 6 -#define R_SPARC_WDISP30 7 -#define R_SPARC_WDISP22 8 -#define R_SPARC_HI22 9 -#define R_SPARC_22 10 -#define R_SPARC_13 11 -#define R_SPARC_LO10 12 -#define R_SPARC_GOT10 13 -#define R_SPARC_GOT13 14 -#define R_SPARC_GOT22 15 -#define R_SPARC_PC10 16 -#define R_SPARC_PC22 17 -#define R_SPARC_WPLT30 18 -#define R_SPARC_COPY 19 -#define R_SPARC_GLOB_DAT 20 -#define R_SPARC_JMP_SLOT 21 -#define R_SPARC_RELATIVE 22 -#define R_SPARC_UA32 23 - - - -#define R_SPARC_PLT32 24 -#define R_SPARC_HIPLT22 25 -#define R_SPARC_LOPLT10 26 -#define R_SPARC_PCPLT32 27 -#define R_SPARC_PCPLT22 28 -#define R_SPARC_PCPLT10 29 -#define R_SPARC_10 30 -#define R_SPARC_11 31 -#define R_SPARC_64 32 -#define R_SPARC_OLO10 33 -#define R_SPARC_HH22 34 -#define R_SPARC_HM10 35 -#define R_SPARC_LM22 36 -#define R_SPARC_PC_HH22 37 -#define R_SPARC_PC_HM10 38 -#define R_SPARC_PC_LM22 39 -#define R_SPARC_WDISP16 40 -#define R_SPARC_WDISP19 41 -#define R_SPARC_GLOB_JMP 42 -#define R_SPARC_7 43 -#define R_SPARC_5 44 -#define R_SPARC_6 45 -#define R_SPARC_DISP64 46 -#define R_SPARC_PLT64 47 -#define R_SPARC_HIX22 48 -#define R_SPARC_LOX10 49 -#define R_SPARC_H44 50 -#define R_SPARC_M44 51 -#define R_SPARC_L44 52 -#define R_SPARC_REGISTER 53 -#define R_SPARC_UA64 54 -#define R_SPARC_UA16 55 -#define R_SPARC_TLS_GD_HI22 56 -#define R_SPARC_TLS_GD_LO10 57 -#define R_SPARC_TLS_GD_ADD 58 -#define R_SPARC_TLS_GD_CALL 59 -#define R_SPARC_TLS_LDM_HI22 60 -#define R_SPARC_TLS_LDM_LO10 61 -#define R_SPARC_TLS_LDM_ADD 62 -#define R_SPARC_TLS_LDM_CALL 63 -#define R_SPARC_TLS_LDO_HIX22 64 -#define R_SPARC_TLS_LDO_LOX10 65 -#define R_SPARC_TLS_LDO_ADD 66 -#define R_SPARC_TLS_IE_HI22 67 -#define R_SPARC_TLS_IE_LO10 68 -#define R_SPARC_TLS_IE_LD 69 -#define R_SPARC_TLS_IE_LDX 70 -#define R_SPARC_TLS_IE_ADD 71 -#define R_SPARC_TLS_LE_HIX22 72 -#define R_SPARC_TLS_LE_LOX10 73 -#define R_SPARC_TLS_DTPMOD32 74 -#define R_SPARC_TLS_DTPMOD64 75 -#define R_SPARC_TLS_DTPOFF32 76 -#define R_SPARC_TLS_DTPOFF64 77 -#define R_SPARC_TLS_TPOFF32 78 -#define R_SPARC_TLS_TPOFF64 79 -#define R_SPARC_GOTDATA_HIX22 80 -#define R_SPARC_GOTDATA_LOX10 81 -#define R_SPARC_GOTDATA_OP_HIX22 82 -#define R_SPARC_GOTDATA_OP_LOX10 83 -#define R_SPARC_GOTDATA_OP 84 -#define R_SPARC_H34 85 -#define R_SPARC_SIZE32 86 -#define R_SPARC_SIZE64 87 -#define R_SPARC_GNU_VTINHERIT 250 -#define R_SPARC_GNU_VTENTRY 251 -#define R_SPARC_REV32 252 - -#define R_SPARC_NUM 253 - - +#define R_386_TLS_DESC 41 +#define R_386_IRELATIVE 42 +#define R_386_GOT32X 43 +#define R_386_NUM 44 + +#define STT_SPARC_REGISTER 13 + +#define EF_SPARCV9_MM 3 +#define EF_SPARCV9_TSO 0 +#define EF_SPARCV9_PSO 1 +#define EF_SPARCV9_RMO 2 +#define EF_SPARC_LEDATA 0x800000 +#define EF_SPARC_EXT_MASK 0xFFFF00 +#define EF_SPARC_32PLUS 0x000100 +#define EF_SPARC_SUN_US1 0x000200 +#define EF_SPARC_HAL_R1 0x000400 +#define EF_SPARC_SUN_US3 0x000800 + +#define R_SPARC_NONE 0 +#define R_SPARC_8 1 +#define R_SPARC_16 2 +#define R_SPARC_32 3 +#define R_SPARC_DISP8 4 +#define R_SPARC_DISP16 5 +#define R_SPARC_DISP32 6 +#define R_SPARC_WDISP30 7 +#define R_SPARC_WDISP22 8 +#define R_SPARC_HI22 9 +#define R_SPARC_22 10 +#define R_SPARC_13 11 +#define R_SPARC_LO10 12 +#define R_SPARC_GOT10 13 +#define R_SPARC_GOT13 14 +#define R_SPARC_GOT22 15 +#define R_SPARC_PC10 16 +#define R_SPARC_PC22 17 +#define R_SPARC_WPLT30 18 +#define R_SPARC_COPY 19 +#define R_SPARC_GLOB_DAT 20 +#define R_SPARC_JMP_SLOT 21 +#define R_SPARC_RELATIVE 22 +#define R_SPARC_UA32 23 + +#define R_SPARC_PLT32 24 +#define R_SPARC_HIPLT22 25 +#define R_SPARC_LOPLT10 26 +#define R_SPARC_PCPLT32 27 +#define R_SPARC_PCPLT22 28 +#define R_SPARC_PCPLT10 29 +#define R_SPARC_10 30 +#define R_SPARC_11 31 +#define R_SPARC_64 32 +#define R_SPARC_OLO10 33 +#define R_SPARC_HH22 34 +#define R_SPARC_HM10 35 +#define R_SPARC_LM22 36 +#define R_SPARC_PC_HH22 37 +#define R_SPARC_PC_HM10 38 +#define R_SPARC_PC_LM22 39 +#define R_SPARC_WDISP16 40 +#define R_SPARC_WDISP19 41 +#define R_SPARC_GLOB_JMP 42 +#define R_SPARC_7 43 +#define R_SPARC_5 44 +#define R_SPARC_6 45 +#define R_SPARC_DISP64 46 +#define R_SPARC_PLT64 47 +#define R_SPARC_HIX22 48 +#define R_SPARC_LOX10 49 +#define R_SPARC_H44 50 +#define R_SPARC_M44 51 +#define R_SPARC_L44 52 +#define R_SPARC_REGISTER 53 +#define R_SPARC_UA64 54 +#define R_SPARC_UA16 55 +#define R_SPARC_TLS_GD_HI22 56 +#define R_SPARC_TLS_GD_LO10 57 +#define R_SPARC_TLS_GD_ADD 58 +#define R_SPARC_TLS_GD_CALL 59 +#define R_SPARC_TLS_LDM_HI22 60 +#define R_SPARC_TLS_LDM_LO10 61 +#define R_SPARC_TLS_LDM_ADD 62 +#define R_SPARC_TLS_LDM_CALL 63 +#define R_SPARC_TLS_LDO_HIX22 64 +#define R_SPARC_TLS_LDO_LOX10 65 +#define R_SPARC_TLS_LDO_ADD 66 +#define R_SPARC_TLS_IE_HI22 67 +#define R_SPARC_TLS_IE_LO10 68 +#define R_SPARC_TLS_IE_LD 69 +#define R_SPARC_TLS_IE_LDX 70 +#define R_SPARC_TLS_IE_ADD 71 +#define R_SPARC_TLS_LE_HIX22 72 +#define R_SPARC_TLS_LE_LOX10 73 +#define R_SPARC_TLS_DTPMOD32 74 +#define R_SPARC_TLS_DTPMOD64 75 +#define R_SPARC_TLS_DTPOFF32 76 +#define R_SPARC_TLS_DTPOFF64 77 +#define R_SPARC_TLS_TPOFF32 78 +#define R_SPARC_TLS_TPOFF64 79 +#define R_SPARC_GOTDATA_HIX22 80 +#define R_SPARC_GOTDATA_LOX10 81 +#define R_SPARC_GOTDATA_OP_HIX22 82 +#define R_SPARC_GOTDATA_OP_LOX10 83 +#define R_SPARC_GOTDATA_OP 84 +#define R_SPARC_H34 85 +#define R_SPARC_SIZE32 86 +#define R_SPARC_SIZE64 87 +#define R_SPARC_GNU_VTINHERIT 250 +#define R_SPARC_GNU_VTENTRY 251 +#define R_SPARC_REV32 252 + +#define R_SPARC_NUM 253 #define DT_SPARC_REGISTER 0x70000001 -#define DT_SPARC_NUM 2 - +#define DT_SPARC_NUM 2 -#define EF_MIPS_NOREORDER 1 -#define EF_MIPS_PIC 2 -#define EF_MIPS_CPIC 4 -#define EF_MIPS_XGOT 8 +#define EF_MIPS_NOREORDER 1 +#define EF_MIPS_PIC 2 +#define EF_MIPS_CPIC 4 +#define EF_MIPS_XGOT 8 #define EF_MIPS_64BIT_WHIRL 16 -#define EF_MIPS_ABI2 32 -#define EF_MIPS_ABI_ON32 64 -#define EF_MIPS_FP64 512 -#define EF_MIPS_NAN2008 1024 -#define EF_MIPS_ARCH 0xf0000000 - - - -#define EF_MIPS_ARCH_1 0x00000000 -#define EF_MIPS_ARCH_2 0x10000000 -#define EF_MIPS_ARCH_3 0x20000000 -#define EF_MIPS_ARCH_4 0x30000000 -#define EF_MIPS_ARCH_5 0x40000000 -#define EF_MIPS_ARCH_32 0x50000000 -#define EF_MIPS_ARCH_64 0x60000000 -#define EF_MIPS_ARCH_32R2 0x70000000 -#define EF_MIPS_ARCH_64R2 0x80000000 - - -#define E_MIPS_ARCH_1 0x00000000 -#define E_MIPS_ARCH_2 0x10000000 -#define E_MIPS_ARCH_3 0x20000000 -#define E_MIPS_ARCH_4 0x30000000 -#define E_MIPS_ARCH_5 0x40000000 -#define E_MIPS_ARCH_32 0x50000000 -#define E_MIPS_ARCH_64 0x60000000 - - - -#define SHN_MIPS_ACOMMON 0xff00 -#define SHN_MIPS_TEXT 0xff01 -#define SHN_MIPS_DATA 0xff02 -#define SHN_MIPS_SCOMMON 0xff03 +#define EF_MIPS_ABI2 32 +#define EF_MIPS_ABI_ON32 64 +#define EF_MIPS_FP64 512 +#define EF_MIPS_NAN2008 1024 +#define EF_MIPS_ARCH 0xf0000000 + +#define EF_MIPS_ARCH_1 0x00000000 +#define EF_MIPS_ARCH_2 0x10000000 +#define EF_MIPS_ARCH_3 0x20000000 +#define EF_MIPS_ARCH_4 0x30000000 +#define EF_MIPS_ARCH_5 0x40000000 +#define EF_MIPS_ARCH_32 0x50000000 +#define EF_MIPS_ARCH_64 0x60000000 +#define EF_MIPS_ARCH_32R2 0x70000000 +#define EF_MIPS_ARCH_64R2 0x80000000 + +#define E_MIPS_ARCH_1 0x00000000 +#define E_MIPS_ARCH_2 0x10000000 +#define E_MIPS_ARCH_3 0x20000000 +#define E_MIPS_ARCH_4 0x30000000 +#define E_MIPS_ARCH_5 0x40000000 +#define E_MIPS_ARCH_32 0x50000000 +#define E_MIPS_ARCH_64 0x60000000 + +#define SHN_MIPS_ACOMMON 0xff00 +#define SHN_MIPS_TEXT 0xff01 +#define SHN_MIPS_DATA 0xff02 +#define SHN_MIPS_SCOMMON 0xff03 #define SHN_MIPS_SUNDEFINED 0xff04 - - -#define SHT_MIPS_LIBLIST 0x70000000 -#define SHT_MIPS_MSYM 0x70000001 -#define SHT_MIPS_CONFLICT 0x70000002 -#define SHT_MIPS_GPTAB 0x70000003 -#define SHT_MIPS_UCODE 0x70000004 -#define SHT_MIPS_DEBUG 0x70000005 -#define SHT_MIPS_REGINFO 0x70000006 -#define SHT_MIPS_PACKAGE 0x70000007 -#define SHT_MIPS_PACKSYM 0x70000008 -#define SHT_MIPS_RELD 0x70000009 -#define SHT_MIPS_IFACE 0x7000000b -#define SHT_MIPS_CONTENT 0x7000000c -#define SHT_MIPS_OPTIONS 0x7000000d -#define SHT_MIPS_SHDR 0x70000010 -#define SHT_MIPS_FDESC 0x70000011 -#define SHT_MIPS_EXTSYM 0x70000012 -#define SHT_MIPS_DENSE 0x70000013 -#define SHT_MIPS_PDESC 0x70000014 -#define SHT_MIPS_LOCSYM 0x70000015 -#define SHT_MIPS_AUXSYM 0x70000016 -#define SHT_MIPS_OPTSYM 0x70000017 -#define SHT_MIPS_LOCSTR 0x70000018 -#define SHT_MIPS_LINE 0x70000019 -#define SHT_MIPS_RFDESC 0x7000001a -#define SHT_MIPS_DELTASYM 0x7000001b -#define SHT_MIPS_DELTAINST 0x7000001c -#define SHT_MIPS_DELTACLASS 0x7000001d -#define SHT_MIPS_DWARF 0x7000001e -#define SHT_MIPS_DELTADECL 0x7000001f -#define SHT_MIPS_SYMBOL_LIB 0x70000020 -#define SHT_MIPS_EVENTS 0x70000021 -#define SHT_MIPS_TRANSLATE 0x70000022 -#define SHT_MIPS_PIXIE 0x70000023 -#define SHT_MIPS_XLATE 0x70000024 -#define SHT_MIPS_XLATE_DEBUG 0x70000025 -#define SHT_MIPS_WHIRL 0x70000026 -#define SHT_MIPS_EH_REGION 0x70000027 -#define SHT_MIPS_XLATE_OLD 0x70000028 +#define SHT_MIPS_LIBLIST 0x70000000 +#define SHT_MIPS_MSYM 0x70000001 +#define SHT_MIPS_CONFLICT 0x70000002 +#define SHT_MIPS_GPTAB 0x70000003 +#define SHT_MIPS_UCODE 0x70000004 +#define SHT_MIPS_DEBUG 0x70000005 +#define SHT_MIPS_REGINFO 0x70000006 +#define SHT_MIPS_PACKAGE 0x70000007 +#define SHT_MIPS_PACKSYM 0x70000008 +#define SHT_MIPS_RELD 0x70000009 +#define SHT_MIPS_IFACE 0x7000000b +#define SHT_MIPS_CONTENT 0x7000000c +#define SHT_MIPS_OPTIONS 0x7000000d +#define SHT_MIPS_SHDR 0x70000010 +#define SHT_MIPS_FDESC 0x70000011 +#define SHT_MIPS_EXTSYM 0x70000012 +#define SHT_MIPS_DENSE 0x70000013 +#define SHT_MIPS_PDESC 0x70000014 +#define SHT_MIPS_LOCSYM 0x70000015 +#define SHT_MIPS_AUXSYM 0x70000016 +#define SHT_MIPS_OPTSYM 0x70000017 +#define SHT_MIPS_LOCSTR 0x70000018 +#define SHT_MIPS_LINE 0x70000019 +#define SHT_MIPS_RFDESC 0x7000001a +#define SHT_MIPS_DELTASYM 0x7000001b +#define SHT_MIPS_DELTAINST 0x7000001c +#define SHT_MIPS_DELTACLASS 0x7000001d +#define SHT_MIPS_DWARF 0x7000001e +#define SHT_MIPS_DELTADECL 0x7000001f +#define SHT_MIPS_SYMBOL_LIB 0x70000020 +#define SHT_MIPS_EVENTS 0x70000021 +#define SHT_MIPS_TRANSLATE 0x70000022 +#define SHT_MIPS_PIXIE 0x70000023 +#define SHT_MIPS_XLATE 0x70000024 +#define SHT_MIPS_XLATE_DEBUG 0x70000025 +#define SHT_MIPS_WHIRL 0x70000026 +#define SHT_MIPS_EH_REGION 0x70000027 +#define SHT_MIPS_XLATE_OLD 0x70000028 #define SHT_MIPS_PDR_EXCEPTION 0x70000029 - - -#define SHF_MIPS_GPREL 0x10000000 -#define SHF_MIPS_MERGE 0x20000000 -#define SHF_MIPS_ADDR 0x40000000 +#define SHF_MIPS_GPREL 0x10000000 +#define SHF_MIPS_MERGE 0x20000000 +#define SHF_MIPS_ADDR 0x40000000 #define SHF_MIPS_STRINGS 0x80000000 #define SHF_MIPS_NOSTRIP 0x08000000 -#define SHF_MIPS_LOCAL 0x04000000 -#define SHF_MIPS_NAMES 0x02000000 -#define SHF_MIPS_NODUPE 0x01000000 - - - - - -#define STO_MIPS_DEFAULT 0x0 -#define STO_MIPS_INTERNAL 0x1 -#define STO_MIPS_HIDDEN 0x2 -#define STO_MIPS_PROTECTED 0x3 -#define STO_MIPS_PLT 0x8 -#define STO_MIPS_SC_ALIGN_UNUSED 0xff - - -#define STB_MIPS_SPLIT_COMMON 13 +#define SHF_MIPS_LOCAL 0x04000000 +#define SHF_MIPS_NAMES 0x02000000 +#define SHF_MIPS_NODUPE 0x01000000 +#define STO_MIPS_DEFAULT 0x0 +#define STO_MIPS_INTERNAL 0x1 +#define STO_MIPS_HIDDEN 0x2 +#define STO_MIPS_PROTECTED 0x3 +#define STO_MIPS_PLT 0x8 +#define STO_MIPS_SC_ALIGN_UNUSED 0xff +#define STB_MIPS_SPLIT_COMMON 13 typedef union { - struct { - Elf32_Word gt_current_g_value; - Elf32_Word gt_unused; - } gt_header; - struct { - Elf32_Word gt_g_value; - Elf32_Word gt_bytes; - } gt_entry; + struct { + Elf32_Word gt_current_g_value; + Elf32_Word gt_unused; + } gt_header; + struct { + Elf32_Word gt_g_value; + Elf32_Word gt_bytes; + } gt_entry; } Elf32_gptab; - - typedef struct { - Elf32_Word ri_gprmask; - Elf32_Word ri_cprmask[4]; - Elf32_Sword ri_gp_value; + Elf32_Word ri_gprmask; + Elf32_Word ri_cprmask[4]; + Elf32_Sword ri_gp_value; } Elf32_RegInfo; - - typedef struct { - unsigned char kind; + unsigned char kind; - unsigned char size; - Elf32_Section section; + unsigned char size; + Elf32_Section section; - Elf32_Word info; + Elf32_Word info; } Elf_Options; - - -#define ODK_NULL 0 -#define ODK_REGINFO 1 -#define ODK_EXCEPTIONS 2 -#define ODK_PAD 3 -#define ODK_HWPATCH 4 -#define ODK_FILL 5 -#define ODK_TAGS 6 -#define ODK_HWAND 7 -#define ODK_HWOR 8 - - - -#define OEX_FPU_MIN 0x1f -#define OEX_FPU_MAX 0x1f00 -#define OEX_PAGE0 0x10000 -#define OEX_SMM 0x20000 -#define OEX_FPDBUG 0x40000 -#define OEX_PRECISEFP OEX_FPDBUG -#define OEX_DISMISS 0x80000 - -#define OEX_FPU_INVAL 0x10 -#define OEX_FPU_DIV0 0x08 -#define OEX_FPU_OFLO 0x04 -#define OEX_FPU_UFLO 0x02 -#define OEX_FPU_INEX 0x01 - - - -#define OHW_R4KEOP 0x1 -#define OHW_R8KPFETCH 0x2 -#define OHW_R5KEOP 0x4 -#define OHW_R5KCVTL 0x8 - -#define OPAD_PREFIX 0x1 -#define OPAD_POSTFIX 0x2 -#define OPAD_SYMBOL 0x4 - - +#define ODK_NULL 0 +#define ODK_REGINFO 1 +#define ODK_EXCEPTIONS 2 +#define ODK_PAD 3 +#define ODK_HWPATCH 4 +#define ODK_FILL 5 +#define ODK_TAGS 6 +#define ODK_HWAND 7 +#define ODK_HWOR 8 + +#define OEX_FPU_MIN 0x1f +#define OEX_FPU_MAX 0x1f00 +#define OEX_PAGE0 0x10000 +#define OEX_SMM 0x20000 +#define OEX_FPDBUG 0x40000 +#define OEX_PRECISEFP OEX_FPDBUG +#define OEX_DISMISS 0x80000 + +#define OEX_FPU_INVAL 0x10 +#define OEX_FPU_DIV0 0x08 +#define OEX_FPU_OFLO 0x04 +#define OEX_FPU_UFLO 0x02 +#define OEX_FPU_INEX 0x01 + +#define OHW_R4KEOP 0x1 +#define OHW_R8KPFETCH 0x2 +#define OHW_R5KEOP 0x4 +#define OHW_R5KCVTL 0x8 + +#define OPAD_PREFIX 0x1 +#define OPAD_POSTFIX 0x2 +#define OPAD_SYMBOL 0x4 typedef struct { - Elf32_Word hwp_flags1; - Elf32_Word hwp_flags2; + Elf32_Word hwp_flags1; + Elf32_Word hwp_flags2; } Elf_Options_Hw; - - -#define OHWA0_R4KEOP_CHECKED 0x00000001 -#define OHWA1_R4KEOP_CLEAN 0x00000002 - - - -#define R_MIPS_NONE 0 -#define R_MIPS_16 1 -#define R_MIPS_32 2 -#define R_MIPS_REL32 3 -#define R_MIPS_26 4 -#define R_MIPS_HI16 5 -#define R_MIPS_LO16 6 -#define R_MIPS_GPREL16 7 -#define R_MIPS_LITERAL 8 -#define R_MIPS_GOT16 9 -#define R_MIPS_PC16 10 -#define R_MIPS_CALL16 11 -#define R_MIPS_GPREL32 12 - -#define R_MIPS_SHIFT5 16 -#define R_MIPS_SHIFT6 17 -#define R_MIPS_64 18 -#define R_MIPS_GOT_DISP 19 -#define R_MIPS_GOT_PAGE 20 -#define R_MIPS_GOT_OFST 21 -#define R_MIPS_GOT_HI16 22 -#define R_MIPS_GOT_LO16 23 -#define R_MIPS_SUB 24 -#define R_MIPS_INSERT_A 25 -#define R_MIPS_INSERT_B 26 -#define R_MIPS_DELETE 27 -#define R_MIPS_HIGHER 28 -#define R_MIPS_HIGHEST 29 -#define R_MIPS_CALL_HI16 30 -#define R_MIPS_CALL_LO16 31 -#define R_MIPS_SCN_DISP 32 -#define R_MIPS_REL16 33 -#define R_MIPS_ADD_IMMEDIATE 34 -#define R_MIPS_PJUMP 35 -#define R_MIPS_RELGOT 36 -#define R_MIPS_JALR 37 -#define R_MIPS_TLS_DTPMOD32 38 -#define R_MIPS_TLS_DTPREL32 39 -#define R_MIPS_TLS_DTPMOD64 40 -#define R_MIPS_TLS_DTPREL64 41 -#define R_MIPS_TLS_GD 42 -#define R_MIPS_TLS_LDM 43 -#define R_MIPS_TLS_DTPREL_HI16 44 -#define R_MIPS_TLS_DTPREL_LO16 45 -#define R_MIPS_TLS_GOTTPREL 46 -#define R_MIPS_TLS_TPREL32 47 -#define R_MIPS_TLS_TPREL64 48 -#define R_MIPS_TLS_TPREL_HI16 49 -#define R_MIPS_TLS_TPREL_LO16 50 -#define R_MIPS_GLOB_DAT 51 -#define R_MIPS_COPY 126 -#define R_MIPS_JUMP_SLOT 127 - -#define R_MIPS_NUM 128 - - - -#define PT_MIPS_REGINFO 0x70000000 -#define PT_MIPS_RTPROC 0x70000001 +#define OHWA0_R4KEOP_CHECKED 0x00000001 +#define OHWA1_R4KEOP_CLEAN 0x00000002 + +#define R_MIPS_NONE 0 +#define R_MIPS_16 1 +#define R_MIPS_32 2 +#define R_MIPS_REL32 3 +#define R_MIPS_26 4 +#define R_MIPS_HI16 5 +#define R_MIPS_LO16 6 +#define R_MIPS_GPREL16 7 +#define R_MIPS_LITERAL 8 +#define R_MIPS_GOT16 9 +#define R_MIPS_PC16 10 +#define R_MIPS_CALL16 11 +#define R_MIPS_GPREL32 12 + +#define R_MIPS_SHIFT5 16 +#define R_MIPS_SHIFT6 17 +#define R_MIPS_64 18 +#define R_MIPS_GOT_DISP 19 +#define R_MIPS_GOT_PAGE 20 +#define R_MIPS_GOT_OFST 21 +#define R_MIPS_GOT_HI16 22 +#define R_MIPS_GOT_LO16 23 +#define R_MIPS_SUB 24 +#define R_MIPS_INSERT_A 25 +#define R_MIPS_INSERT_B 26 +#define R_MIPS_DELETE 27 +#define R_MIPS_HIGHER 28 +#define R_MIPS_HIGHEST 29 +#define R_MIPS_CALL_HI16 30 +#define R_MIPS_CALL_LO16 31 +#define R_MIPS_SCN_DISP 32 +#define R_MIPS_REL16 33 +#define R_MIPS_ADD_IMMEDIATE 34 +#define R_MIPS_PJUMP 35 +#define R_MIPS_RELGOT 36 +#define R_MIPS_JALR 37 +#define R_MIPS_TLS_DTPMOD32 38 +#define R_MIPS_TLS_DTPREL32 39 +#define R_MIPS_TLS_DTPMOD64 40 +#define R_MIPS_TLS_DTPREL64 41 +#define R_MIPS_TLS_GD 42 +#define R_MIPS_TLS_LDM 43 +#define R_MIPS_TLS_DTPREL_HI16 44 +#define R_MIPS_TLS_DTPREL_LO16 45 +#define R_MIPS_TLS_GOTTPREL 46 +#define R_MIPS_TLS_TPREL32 47 +#define R_MIPS_TLS_TPREL64 48 +#define R_MIPS_TLS_TPREL_HI16 49 +#define R_MIPS_TLS_TPREL_LO16 50 +#define R_MIPS_GLOB_DAT 51 +#define R_MIPS_COPY 126 +#define R_MIPS_JUMP_SLOT 127 + +#define R_MIPS_NUM 128 + +#define PT_MIPS_REGINFO 0x70000000 +#define PT_MIPS_RTPROC 0x70000001 #define PT_MIPS_OPTIONS 0x70000002 #define PT_MIPS_ABIFLAGS 0x70000003 +#define PF_MIPS_LOCAL 0x10000000 - -#define PF_MIPS_LOCAL 0x10000000 - - - -#define DT_MIPS_RLD_VERSION 0x70000001 -#define DT_MIPS_TIME_STAMP 0x70000002 -#define DT_MIPS_ICHECKSUM 0x70000003 -#define DT_MIPS_IVERSION 0x70000004 -#define DT_MIPS_FLAGS 0x70000005 +#define DT_MIPS_RLD_VERSION 0x70000001 +#define DT_MIPS_TIME_STAMP 0x70000002 +#define DT_MIPS_ICHECKSUM 0x70000003 +#define DT_MIPS_IVERSION 0x70000004 +#define DT_MIPS_FLAGS 0x70000005 #define DT_MIPS_BASE_ADDRESS 0x70000006 -#define DT_MIPS_MSYM 0x70000007 -#define DT_MIPS_CONFLICT 0x70000008 -#define DT_MIPS_LIBLIST 0x70000009 -#define DT_MIPS_LOCAL_GOTNO 0x7000000a -#define DT_MIPS_CONFLICTNO 0x7000000b -#define DT_MIPS_LIBLISTNO 0x70000010 -#define DT_MIPS_SYMTABNO 0x70000011 -#define DT_MIPS_UNREFEXTNO 0x70000012 -#define DT_MIPS_GOTSYM 0x70000013 -#define DT_MIPS_HIPAGENO 0x70000014 -#define DT_MIPS_RLD_MAP 0x70000016 -#define DT_MIPS_DELTA_CLASS 0x70000017 -#define DT_MIPS_DELTA_CLASS_NO 0x70000018 - -#define DT_MIPS_DELTA_INSTANCE 0x70000019 +#define DT_MIPS_MSYM 0x70000007 +#define DT_MIPS_CONFLICT 0x70000008 +#define DT_MIPS_LIBLIST 0x70000009 +#define DT_MIPS_LOCAL_GOTNO 0x7000000a +#define DT_MIPS_CONFLICTNO 0x7000000b +#define DT_MIPS_LIBLISTNO 0x70000010 +#define DT_MIPS_SYMTABNO 0x70000011 +#define DT_MIPS_UNREFEXTNO 0x70000012 +#define DT_MIPS_GOTSYM 0x70000013 +#define DT_MIPS_HIPAGENO 0x70000014 +#define DT_MIPS_RLD_MAP 0x70000016 +#define DT_MIPS_DELTA_CLASS 0x70000017 +#define DT_MIPS_DELTA_CLASS_NO 0x70000018 + +#define DT_MIPS_DELTA_INSTANCE 0x70000019 #define DT_MIPS_DELTA_INSTANCE_NO 0x7000001a -#define DT_MIPS_DELTA_RELOC 0x7000001b +#define DT_MIPS_DELTA_RELOC 0x7000001b #define DT_MIPS_DELTA_RELOC_NO 0x7000001c -#define DT_MIPS_DELTA_SYM 0x7000001d +#define DT_MIPS_DELTA_SYM 0x7000001d #define DT_MIPS_DELTA_SYM_NO 0x7000001e @@ -1587,788 +1446,718 @@ typedef struct { #define DT_MIPS_DELTA_CLASSSYM_NO 0x70000021 -#define DT_MIPS_CXX_FLAGS 0x70000022 -#define DT_MIPS_PIXIE_INIT 0x70000023 -#define DT_MIPS_SYMBOL_LIB 0x70000024 +#define DT_MIPS_CXX_FLAGS 0x70000022 +#define DT_MIPS_PIXIE_INIT 0x70000023 +#define DT_MIPS_SYMBOL_LIB 0x70000024 #define DT_MIPS_LOCALPAGE_GOTIDX 0x70000025 #define DT_MIPS_LOCAL_GOTIDX 0x70000026 #define DT_MIPS_HIDDEN_GOTIDX 0x70000027 #define DT_MIPS_PROTECTED_GOTIDX 0x70000028 -#define DT_MIPS_OPTIONS 0x70000029 -#define DT_MIPS_INTERFACE 0x7000002a +#define DT_MIPS_OPTIONS 0x70000029 +#define DT_MIPS_INTERFACE 0x7000002a #define DT_MIPS_DYNSTR_ALIGN 0x7000002b #define DT_MIPS_INTERFACE_SIZE 0x7000002c #define DT_MIPS_RLD_TEXT_RESOLVE_ADDR 0x7000002d -#define DT_MIPS_PERF_SUFFIX 0x7000002e +#define DT_MIPS_PERF_SUFFIX 0x7000002e #define DT_MIPS_COMPACT_SIZE 0x7000002f -#define DT_MIPS_GP_VALUE 0x70000030 -#define DT_MIPS_AUX_DYNAMIC 0x70000031 +#define DT_MIPS_GP_VALUE 0x70000030 +#define DT_MIPS_AUX_DYNAMIC 0x70000031 -#define DT_MIPS_PLTGOT 0x70000032 +#define DT_MIPS_PLTGOT 0x70000032 -#define DT_MIPS_RWPLT 0x70000034 -#define DT_MIPS_RLD_MAP_REL 0x70000035 -#define DT_MIPS_NUM 0x36 +#define DT_MIPS_RWPLT 0x70000034 +#define DT_MIPS_RLD_MAP_REL 0x70000035 +#define DT_MIPS_NUM 0x36 - - -#define RHF_NONE 0 -#define RHF_QUICKSTART (1 << 0) -#define RHF_NOTPOT (1 << 1) +#define RHF_NONE 0 +#define RHF_QUICKSTART (1 << 0) +#define RHF_NOTPOT (1 << 1) #define RHF_NO_LIBRARY_REPLACEMENT (1 << 2) -#define RHF_NO_MOVE (1 << 3) -#define RHF_SGI_ONLY (1 << 4) -#define RHF_GUARANTEE_INIT (1 << 5) -#define RHF_DELTA_C_PLUS_PLUS (1 << 6) -#define RHF_GUARANTEE_START_INIT (1 << 7) -#define RHF_PIXIE (1 << 8) -#define RHF_DEFAULT_DELAY_LOAD (1 << 9) -#define RHF_REQUICKSTART (1 << 10) -#define RHF_REQUICKSTARTED (1 << 11) -#define RHF_CORD (1 << 12) -#define RHF_NO_UNRES_UNDEF (1 << 13) -#define RHF_RLD_ORDER_SAFE (1 << 14) - - +#define RHF_NO_MOVE (1 << 3) +#define RHF_SGI_ONLY (1 << 4) +#define RHF_GUARANTEE_INIT (1 << 5) +#define RHF_DELTA_C_PLUS_PLUS (1 << 6) +#define RHF_GUARANTEE_START_INIT (1 << 7) +#define RHF_PIXIE (1 << 8) +#define RHF_DEFAULT_DELAY_LOAD (1 << 9) +#define RHF_REQUICKSTART (1 << 10) +#define RHF_REQUICKSTARTED (1 << 11) +#define RHF_CORD (1 << 12) +#define RHF_NO_UNRES_UNDEF (1 << 13) +#define RHF_RLD_ORDER_SAFE (1 << 14) typedef struct { - Elf32_Word l_name; - Elf32_Word l_time_stamp; - Elf32_Word l_checksum; - Elf32_Word l_version; - Elf32_Word l_flags; + Elf32_Word l_name; + Elf32_Word l_time_stamp; + Elf32_Word l_checksum; + Elf32_Word l_version; + Elf32_Word l_flags; } Elf32_Lib; typedef struct { - Elf64_Word l_name; - Elf64_Word l_time_stamp; - Elf64_Word l_checksum; - Elf64_Word l_version; - Elf64_Word l_flags; + Elf64_Word l_name; + Elf64_Word l_time_stamp; + Elf64_Word l_checksum; + Elf64_Word l_version; + Elf64_Word l_flags; } Elf64_Lib; - - - -#define LL_NONE 0 -#define LL_EXACT_MATCH (1 << 0) +#define LL_NONE 0 +#define LL_EXACT_MATCH (1 << 0) #define LL_IGNORE_INT_VER (1 << 1) -#define LL_REQUIRE_MINOR (1 << 2) -#define LL_EXPORTS (1 << 3) -#define LL_DELAY_LOAD (1 << 4) -#define LL_DELTA (1 << 5) - - +#define LL_REQUIRE_MINOR (1 << 2) +#define LL_EXPORTS (1 << 3) +#define LL_DELAY_LOAD (1 << 4) +#define LL_DELTA (1 << 5) typedef Elf32_Addr Elf32_Conflict; typedef struct { - Elf32_Half version; - unsigned char isa_level; - unsigned char isa_rev; - unsigned char gpr_size; - unsigned char cpr1_size; - unsigned char cpr2_size; - unsigned char fp_abi; - Elf32_Word isa_ext; - Elf32_Word ases; - Elf32_Word flags1; - Elf32_Word flags2; + Elf32_Half version; + unsigned char isa_level; + unsigned char isa_rev; + unsigned char gpr_size; + unsigned char cpr1_size; + unsigned char cpr2_size; + unsigned char fp_abi; + Elf32_Word isa_ext; + Elf32_Word ases; + Elf32_Word flags1; + Elf32_Word flags2; } Elf_MIPS_ABIFlags_v0; -#define MIPS_AFL_REG_NONE 0x00 -#define MIPS_AFL_REG_32 0x01 -#define MIPS_AFL_REG_64 0x02 -#define MIPS_AFL_REG_128 0x03 - -#define MIPS_AFL_ASE_DSP 0x00000001 -#define MIPS_AFL_ASE_DSPR2 0x00000002 -#define MIPS_AFL_ASE_EVA 0x00000004 -#define MIPS_AFL_ASE_MCU 0x00000008 -#define MIPS_AFL_ASE_MDMX 0x00000010 -#define MIPS_AFL_ASE_MIPS3D 0x00000020 -#define MIPS_AFL_ASE_MT 0x00000040 -#define MIPS_AFL_ASE_SMARTMIPS 0x00000080 -#define MIPS_AFL_ASE_VIRT 0x00000100 -#define MIPS_AFL_ASE_MSA 0x00000200 -#define MIPS_AFL_ASE_MIPS16 0x00000400 -#define MIPS_AFL_ASE_MICROMIPS 0x00000800 -#define MIPS_AFL_ASE_XPA 0x00001000 -#define MIPS_AFL_ASE_MASK 0x00001fff - -#define MIPS_AFL_EXT_XLR 1 -#define MIPS_AFL_EXT_OCTEON2 2 -#define MIPS_AFL_EXT_OCTEONP 3 -#define MIPS_AFL_EXT_LOONGSON_3A 4 -#define MIPS_AFL_EXT_OCTEON 5 -#define MIPS_AFL_EXT_5900 6 -#define MIPS_AFL_EXT_4650 7 -#define MIPS_AFL_EXT_4010 8 -#define MIPS_AFL_EXT_4100 9 -#define MIPS_AFL_EXT_3900 10 -#define MIPS_AFL_EXT_10000 11 -#define MIPS_AFL_EXT_SB1 12 -#define MIPS_AFL_EXT_4111 13 -#define MIPS_AFL_EXT_4120 14 -#define MIPS_AFL_EXT_5400 15 -#define MIPS_AFL_EXT_5500 16 -#define MIPS_AFL_EXT_LOONGSON_2E 17 -#define MIPS_AFL_EXT_LOONGSON_2F 18 - -#define MIPS_AFL_FLAGS1_ODDSPREG 1 - -enum -{ - Val_GNU_MIPS_ABI_FP_ANY = 0, - Val_GNU_MIPS_ABI_FP_DOUBLE = 1, - Val_GNU_MIPS_ABI_FP_SINGLE = 2, - Val_GNU_MIPS_ABI_FP_SOFT = 3, - Val_GNU_MIPS_ABI_FP_OLD_64 = 4, - Val_GNU_MIPS_ABI_FP_XX = 5, - Val_GNU_MIPS_ABI_FP_64 = 6, - Val_GNU_MIPS_ABI_FP_64A = 7, - Val_GNU_MIPS_ABI_FP_MAX = 7 +#define MIPS_AFL_REG_NONE 0x00 +#define MIPS_AFL_REG_32 0x01 +#define MIPS_AFL_REG_64 0x02 +#define MIPS_AFL_REG_128 0x03 + +#define MIPS_AFL_ASE_DSP 0x00000001 +#define MIPS_AFL_ASE_DSPR2 0x00000002 +#define MIPS_AFL_ASE_EVA 0x00000004 +#define MIPS_AFL_ASE_MCU 0x00000008 +#define MIPS_AFL_ASE_MDMX 0x00000010 +#define MIPS_AFL_ASE_MIPS3D 0x00000020 +#define MIPS_AFL_ASE_MT 0x00000040 +#define MIPS_AFL_ASE_SMARTMIPS 0x00000080 +#define MIPS_AFL_ASE_VIRT 0x00000100 +#define MIPS_AFL_ASE_MSA 0x00000200 +#define MIPS_AFL_ASE_MIPS16 0x00000400 +#define MIPS_AFL_ASE_MICROMIPS 0x00000800 +#define MIPS_AFL_ASE_XPA 0x00001000 +#define MIPS_AFL_ASE_MASK 0x00001fff + +#define MIPS_AFL_EXT_XLR 1 +#define MIPS_AFL_EXT_OCTEON2 2 +#define MIPS_AFL_EXT_OCTEONP 3 +#define MIPS_AFL_EXT_LOONGSON_3A 4 +#define MIPS_AFL_EXT_OCTEON 5 +#define MIPS_AFL_EXT_5900 6 +#define MIPS_AFL_EXT_4650 7 +#define MIPS_AFL_EXT_4010 8 +#define MIPS_AFL_EXT_4100 9 +#define MIPS_AFL_EXT_3900 10 +#define MIPS_AFL_EXT_10000 11 +#define MIPS_AFL_EXT_SB1 12 +#define MIPS_AFL_EXT_4111 13 +#define MIPS_AFL_EXT_4120 14 +#define MIPS_AFL_EXT_5400 15 +#define MIPS_AFL_EXT_5500 16 +#define MIPS_AFL_EXT_LOONGSON_2E 17 +#define MIPS_AFL_EXT_LOONGSON_2F 18 + +#define MIPS_AFL_FLAGS1_ODDSPREG 1 + +enum { + Val_GNU_MIPS_ABI_FP_ANY = 0, + Val_GNU_MIPS_ABI_FP_DOUBLE = 1, + Val_GNU_MIPS_ABI_FP_SINGLE = 2, + Val_GNU_MIPS_ABI_FP_SOFT = 3, + Val_GNU_MIPS_ABI_FP_OLD_64 = 4, + Val_GNU_MIPS_ABI_FP_XX = 5, + Val_GNU_MIPS_ABI_FP_64 = 6, + Val_GNU_MIPS_ABI_FP_64A = 7, + Val_GNU_MIPS_ABI_FP_MAX = 7 }; - - - -#define EF_PARISC_TRAPNIL 0x00010000 -#define EF_PARISC_EXT 0x00020000 -#define EF_PARISC_LSB 0x00040000 -#define EF_PARISC_WIDE 0x00080000 -#define EF_PARISC_NO_KABP 0x00100000 - -#define EF_PARISC_LAZYSWAP 0x00400000 -#define EF_PARISC_ARCH 0x0000ffff - - - -#define EFA_PARISC_1_0 0x020b -#define EFA_PARISC_1_1 0x0210 -#define EFA_PARISC_2_0 0x0214 - - - -#define SHN_PARISC_ANSI_COMMON 0xff00 - -#define SHN_PARISC_HUGE_COMMON 0xff01 - - - -#define SHT_PARISC_EXT 0x70000000 -#define SHT_PARISC_UNWIND 0x70000001 -#define SHT_PARISC_DOC 0x70000002 - - - -#define SHF_PARISC_SHORT 0x20000000 -#define SHF_PARISC_HUGE 0x40000000 -#define SHF_PARISC_SBP 0x80000000 - - - -#define STT_PARISC_MILLICODE 13 - -#define STT_HP_OPAQUE (STT_LOOS + 0x1) -#define STT_HP_STUB (STT_LOOS + 0x2) - - - -#define R_PARISC_NONE 0 -#define R_PARISC_DIR32 1 -#define R_PARISC_DIR21L 2 -#define R_PARISC_DIR17R 3 -#define R_PARISC_DIR17F 4 -#define R_PARISC_DIR14R 6 -#define R_PARISC_PCREL32 9 -#define R_PARISC_PCREL21L 10 -#define R_PARISC_PCREL17R 11 -#define R_PARISC_PCREL17F 12 -#define R_PARISC_PCREL14R 14 -#define R_PARISC_DPREL21L 18 -#define R_PARISC_DPREL14R 22 -#define R_PARISC_GPREL21L 26 -#define R_PARISC_GPREL14R 30 -#define R_PARISC_LTOFF21L 34 -#define R_PARISC_LTOFF14R 38 -#define R_PARISC_SECREL32 41 -#define R_PARISC_SEGBASE 48 -#define R_PARISC_SEGREL32 49 -#define R_PARISC_PLTOFF21L 50 -#define R_PARISC_PLTOFF14R 54 -#define R_PARISC_LTOFF_FPTR32 57 -#define R_PARISC_LTOFF_FPTR21L 58 -#define R_PARISC_LTOFF_FPTR14R 62 -#define R_PARISC_FPTR64 64 -#define R_PARISC_PLABEL32 65 -#define R_PARISC_PLABEL21L 66 -#define R_PARISC_PLABEL14R 70 -#define R_PARISC_PCREL64 72 -#define R_PARISC_PCREL22F 74 -#define R_PARISC_PCREL14WR 75 -#define R_PARISC_PCREL14DR 76 -#define R_PARISC_PCREL16F 77 -#define R_PARISC_PCREL16WF 78 -#define R_PARISC_PCREL16DF 79 -#define R_PARISC_DIR64 80 -#define R_PARISC_DIR14WR 83 -#define R_PARISC_DIR14DR 84 -#define R_PARISC_DIR16F 85 -#define R_PARISC_DIR16WF 86 -#define R_PARISC_DIR16DF 87 -#define R_PARISC_GPREL64 88 -#define R_PARISC_GPREL14WR 91 -#define R_PARISC_GPREL14DR 92 -#define R_PARISC_GPREL16F 93 -#define R_PARISC_GPREL16WF 94 -#define R_PARISC_GPREL16DF 95 -#define R_PARISC_LTOFF64 96 -#define R_PARISC_LTOFF14WR 99 -#define R_PARISC_LTOFF14DR 100 -#define R_PARISC_LTOFF16F 101 -#define R_PARISC_LTOFF16WF 102 -#define R_PARISC_LTOFF16DF 103 -#define R_PARISC_SECREL64 104 -#define R_PARISC_SEGREL64 112 -#define R_PARISC_PLTOFF14WR 115 -#define R_PARISC_PLTOFF14DR 116 -#define R_PARISC_PLTOFF16F 117 -#define R_PARISC_PLTOFF16WF 118 -#define R_PARISC_PLTOFF16DF 119 -#define R_PARISC_LTOFF_FPTR64 120 -#define R_PARISC_LTOFF_FPTR14WR 123 -#define R_PARISC_LTOFF_FPTR14DR 124 -#define R_PARISC_LTOFF_FPTR16F 125 -#define R_PARISC_LTOFF_FPTR16WF 126 -#define R_PARISC_LTOFF_FPTR16DF 127 -#define R_PARISC_LORESERVE 128 -#define R_PARISC_COPY 128 -#define R_PARISC_IPLT 129 -#define R_PARISC_EPLT 130 -#define R_PARISC_TPREL32 153 -#define R_PARISC_TPREL21L 154 -#define R_PARISC_TPREL14R 158 -#define R_PARISC_LTOFF_TP21L 162 -#define R_PARISC_LTOFF_TP14R 166 -#define R_PARISC_LTOFF_TP14F 167 -#define R_PARISC_TPREL64 216 -#define R_PARISC_TPREL14WR 219 -#define R_PARISC_TPREL14DR 220 -#define R_PARISC_TPREL16F 221 -#define R_PARISC_TPREL16WF 222 -#define R_PARISC_TPREL16DF 223 -#define R_PARISC_LTOFF_TP64 224 -#define R_PARISC_LTOFF_TP14WR 227 -#define R_PARISC_LTOFF_TP14DR 228 -#define R_PARISC_LTOFF_TP16F 229 -#define R_PARISC_LTOFF_TP16WF 230 -#define R_PARISC_LTOFF_TP16DF 231 -#define R_PARISC_GNU_VTENTRY 232 -#define R_PARISC_GNU_VTINHERIT 233 -#define R_PARISC_TLS_GD21L 234 -#define R_PARISC_TLS_GD14R 235 -#define R_PARISC_TLS_GDCALL 236 -#define R_PARISC_TLS_LDM21L 237 -#define R_PARISC_TLS_LDM14R 238 -#define R_PARISC_TLS_LDMCALL 239 -#define R_PARISC_TLS_LDO21L 240 -#define R_PARISC_TLS_LDO14R 241 -#define R_PARISC_TLS_DTPMOD32 242 -#define R_PARISC_TLS_DTPMOD64 243 -#define R_PARISC_TLS_DTPOFF32 244 -#define R_PARISC_TLS_DTPOFF64 245 -#define R_PARISC_TLS_LE21L R_PARISC_TPREL21L -#define R_PARISC_TLS_LE14R R_PARISC_TPREL14R -#define R_PARISC_TLS_IE21L R_PARISC_LTOFF_TP21L -#define R_PARISC_TLS_IE14R R_PARISC_LTOFF_TP14R -#define R_PARISC_TLS_TPREL32 R_PARISC_TPREL32 -#define R_PARISC_TLS_TPREL64 R_PARISC_TPREL64 -#define R_PARISC_HIRESERVE 255 - - - -#define PT_HP_TLS (PT_LOOS + 0x0) -#define PT_HP_CORE_NONE (PT_LOOS + 0x1) -#define PT_HP_CORE_VERSION (PT_LOOS + 0x2) -#define PT_HP_CORE_KERNEL (PT_LOOS + 0x3) -#define PT_HP_CORE_COMM (PT_LOOS + 0x4) -#define PT_HP_CORE_PROC (PT_LOOS + 0x5) -#define PT_HP_CORE_LOADABLE (PT_LOOS + 0x6) -#define PT_HP_CORE_STACK (PT_LOOS + 0x7) -#define PT_HP_CORE_SHM (PT_LOOS + 0x8) -#define PT_HP_CORE_MMF (PT_LOOS + 0x9) -#define PT_HP_PARALLEL (PT_LOOS + 0x10) -#define PT_HP_FASTBIND (PT_LOOS + 0x11) -#define PT_HP_OPT_ANNOT (PT_LOOS + 0x12) -#define PT_HP_HSL_ANNOT (PT_LOOS + 0x13) -#define PT_HP_STACK (PT_LOOS + 0x14) - -#define PT_PARISC_ARCHEXT 0x70000000 -#define PT_PARISC_UNWIND 0x70000001 - - - -#define PF_PARISC_SBP 0x08000000 - -#define PF_HP_PAGE_SIZE 0x00100000 -#define PF_HP_FAR_SHARED 0x00200000 -#define PF_HP_NEAR_SHARED 0x00400000 -#define PF_HP_CODE 0x01000000 -#define PF_HP_MODIFY 0x02000000 -#define PF_HP_LAZYSWAP 0x04000000 -#define PF_HP_SBP 0x08000000 - - - - - - -#define EF_ALPHA_32BIT 1 -#define EF_ALPHA_CANRELAX 2 - - - - -#define SHT_ALPHA_DEBUG 0x70000001 -#define SHT_ALPHA_REGINFO 0x70000002 - - - -#define SHF_ALPHA_GPREL 0x10000000 - - -#define STO_ALPHA_NOPV 0x80 -#define STO_ALPHA_STD_GPLOAD 0x88 - - - -#define R_ALPHA_NONE 0 -#define R_ALPHA_REFLONG 1 -#define R_ALPHA_REFQUAD 2 -#define R_ALPHA_GPREL32 3 -#define R_ALPHA_LITERAL 4 -#define R_ALPHA_LITUSE 5 -#define R_ALPHA_GPDISP 6 -#define R_ALPHA_BRADDR 7 -#define R_ALPHA_HINT 8 -#define R_ALPHA_SREL16 9 -#define R_ALPHA_SREL32 10 -#define R_ALPHA_SREL64 11 -#define R_ALPHA_GPRELHIGH 17 -#define R_ALPHA_GPRELLOW 18 -#define R_ALPHA_GPREL16 19 -#define R_ALPHA_COPY 24 -#define R_ALPHA_GLOB_DAT 25 -#define R_ALPHA_JMP_SLOT 26 -#define R_ALPHA_RELATIVE 27 -#define R_ALPHA_TLS_GD_HI 28 -#define R_ALPHA_TLSGD 29 -#define R_ALPHA_TLS_LDM 30 -#define R_ALPHA_DTPMOD64 31 -#define R_ALPHA_GOTDTPREL 32 -#define R_ALPHA_DTPREL64 33 -#define R_ALPHA_DTPRELHI 34 -#define R_ALPHA_DTPRELLO 35 -#define R_ALPHA_DTPREL16 36 -#define R_ALPHA_GOTTPREL 37 -#define R_ALPHA_TPREL64 38 -#define R_ALPHA_TPRELHI 39 -#define R_ALPHA_TPRELLO 40 -#define R_ALPHA_TPREL16 41 - -#define R_ALPHA_NUM 46 - - -#define LITUSE_ALPHA_ADDR 0 -#define LITUSE_ALPHA_BASE 1 -#define LITUSE_ALPHA_BYTOFF 2 -#define LITUSE_ALPHA_JSR 3 -#define LITUSE_ALPHA_TLS_GD 4 -#define LITUSE_ALPHA_TLS_LDM 5 - - -#define DT_ALPHA_PLTRO (DT_LOPROC + 0) -#define DT_ALPHA_NUM 1 - - - - -#define EF_PPC_EMB 0x80000000 - - -#define EF_PPC_RELOCATABLE 0x00010000 -#define EF_PPC_RELOCATABLE_LIB 0x00008000 - - - -#define R_PPC_NONE 0 -#define R_PPC_ADDR32 1 -#define R_PPC_ADDR24 2 -#define R_PPC_ADDR16 3 -#define R_PPC_ADDR16_LO 4 -#define R_PPC_ADDR16_HI 5 -#define R_PPC_ADDR16_HA 6 -#define R_PPC_ADDR14 7 -#define R_PPC_ADDR14_BRTAKEN 8 -#define R_PPC_ADDR14_BRNTAKEN 9 -#define R_PPC_REL24 10 -#define R_PPC_REL14 11 -#define R_PPC_REL14_BRTAKEN 12 -#define R_PPC_REL14_BRNTAKEN 13 -#define R_PPC_GOT16 14 -#define R_PPC_GOT16_LO 15 -#define R_PPC_GOT16_HI 16 -#define R_PPC_GOT16_HA 17 -#define R_PPC_PLTREL24 18 -#define R_PPC_COPY 19 -#define R_PPC_GLOB_DAT 20 -#define R_PPC_JMP_SLOT 21 -#define R_PPC_RELATIVE 22 -#define R_PPC_LOCAL24PC 23 -#define R_PPC_UADDR32 24 -#define R_PPC_UADDR16 25 -#define R_PPC_REL32 26 -#define R_PPC_PLT32 27 -#define R_PPC_PLTREL32 28 -#define R_PPC_PLT16_LO 29 -#define R_PPC_PLT16_HI 30 -#define R_PPC_PLT16_HA 31 -#define R_PPC_SDAREL16 32 -#define R_PPC_SECTOFF 33 -#define R_PPC_SECTOFF_LO 34 -#define R_PPC_SECTOFF_HI 35 -#define R_PPC_SECTOFF_HA 36 - - -#define R_PPC_TLS 67 -#define R_PPC_DTPMOD32 68 -#define R_PPC_TPREL16 69 -#define R_PPC_TPREL16_LO 70 -#define R_PPC_TPREL16_HI 71 -#define R_PPC_TPREL16_HA 72 -#define R_PPC_TPREL32 73 -#define R_PPC_DTPREL16 74 -#define R_PPC_DTPREL16_LO 75 -#define R_PPC_DTPREL16_HI 76 -#define R_PPC_DTPREL16_HA 77 -#define R_PPC_DTPREL32 78 -#define R_PPC_GOT_TLSGD16 79 -#define R_PPC_GOT_TLSGD16_LO 80 -#define R_PPC_GOT_TLSGD16_HI 81 -#define R_PPC_GOT_TLSGD16_HA 82 -#define R_PPC_GOT_TLSLD16 83 -#define R_PPC_GOT_TLSLD16_LO 84 -#define R_PPC_GOT_TLSLD16_HI 85 -#define R_PPC_GOT_TLSLD16_HA 86 -#define R_PPC_GOT_TPREL16 87 -#define R_PPC_GOT_TPREL16_LO 88 -#define R_PPC_GOT_TPREL16_HI 89 -#define R_PPC_GOT_TPREL16_HA 90 -#define R_PPC_GOT_DTPREL16 91 -#define R_PPC_GOT_DTPREL16_LO 92 -#define R_PPC_GOT_DTPREL16_HI 93 -#define R_PPC_GOT_DTPREL16_HA 94 -#define R_PPC_TLSGD 95 -#define R_PPC_TLSLD 96 - - -#define R_PPC_EMB_NADDR32 101 -#define R_PPC_EMB_NADDR16 102 -#define R_PPC_EMB_NADDR16_LO 103 -#define R_PPC_EMB_NADDR16_HI 104 -#define R_PPC_EMB_NADDR16_HA 105 -#define R_PPC_EMB_SDAI16 106 -#define R_PPC_EMB_SDA2I16 107 -#define R_PPC_EMB_SDA2REL 108 -#define R_PPC_EMB_SDA21 109 -#define R_PPC_EMB_MRKREF 110 -#define R_PPC_EMB_RELSEC16 111 -#define R_PPC_EMB_RELST_LO 112 -#define R_PPC_EMB_RELST_HI 113 -#define R_PPC_EMB_RELST_HA 114 -#define R_PPC_EMB_BIT_FLD 115 -#define R_PPC_EMB_RELSDA 116 - - -#define R_PPC_DIAB_SDA21_LO 180 -#define R_PPC_DIAB_SDA21_HI 181 -#define R_PPC_DIAB_SDA21_HA 182 -#define R_PPC_DIAB_RELSDA_LO 183 -#define R_PPC_DIAB_RELSDA_HI 184 -#define R_PPC_DIAB_RELSDA_HA 185 - - -#define R_PPC_IRELATIVE 248 - - -#define R_PPC_REL16 249 -#define R_PPC_REL16_LO 250 -#define R_PPC_REL16_HI 251 -#define R_PPC_REL16_HA 252 - - - -#define R_PPC_TOC16 255 - - -#define DT_PPC_GOT (DT_LOPROC + 0) -#define DT_PPC_OPT (DT_LOPROC + 1) -#define DT_PPC_NUM 2 - -#define PPC_OPT_TLS 1 - - -#define R_PPC64_NONE R_PPC_NONE -#define R_PPC64_ADDR32 R_PPC_ADDR32 -#define R_PPC64_ADDR24 R_PPC_ADDR24 -#define R_PPC64_ADDR16 R_PPC_ADDR16 -#define R_PPC64_ADDR16_LO R_PPC_ADDR16_LO -#define R_PPC64_ADDR16_HI R_PPC_ADDR16_HI -#define R_PPC64_ADDR16_HA R_PPC_ADDR16_HA -#define R_PPC64_ADDR14 R_PPC_ADDR14 -#define R_PPC64_ADDR14_BRTAKEN R_PPC_ADDR14_BRTAKEN -#define R_PPC64_ADDR14_BRNTAKEN R_PPC_ADDR14_BRNTAKEN -#define R_PPC64_REL24 R_PPC_REL24 -#define R_PPC64_REL14 R_PPC_REL14 -#define R_PPC64_REL14_BRTAKEN R_PPC_REL14_BRTAKEN -#define R_PPC64_REL14_BRNTAKEN R_PPC_REL14_BRNTAKEN -#define R_PPC64_GOT16 R_PPC_GOT16 -#define R_PPC64_GOT16_LO R_PPC_GOT16_LO -#define R_PPC64_GOT16_HI R_PPC_GOT16_HI -#define R_PPC64_GOT16_HA R_PPC_GOT16_HA - -#define R_PPC64_COPY R_PPC_COPY -#define R_PPC64_GLOB_DAT R_PPC_GLOB_DAT -#define R_PPC64_JMP_SLOT R_PPC_JMP_SLOT -#define R_PPC64_RELATIVE R_PPC_RELATIVE - -#define R_PPC64_UADDR32 R_PPC_UADDR32 -#define R_PPC64_UADDR16 R_PPC_UADDR16 -#define R_PPC64_REL32 R_PPC_REL32 -#define R_PPC64_PLT32 R_PPC_PLT32 -#define R_PPC64_PLTREL32 R_PPC_PLTREL32 -#define R_PPC64_PLT16_LO R_PPC_PLT16_LO -#define R_PPC64_PLT16_HI R_PPC_PLT16_HI -#define R_PPC64_PLT16_HA R_PPC_PLT16_HA - -#define R_PPC64_SECTOFF R_PPC_SECTOFF -#define R_PPC64_SECTOFF_LO R_PPC_SECTOFF_LO -#define R_PPC64_SECTOFF_HI R_PPC_SECTOFF_HI -#define R_PPC64_SECTOFF_HA R_PPC_SECTOFF_HA -#define R_PPC64_ADDR30 37 -#define R_PPC64_ADDR64 38 -#define R_PPC64_ADDR16_HIGHER 39 -#define R_PPC64_ADDR16_HIGHERA 40 -#define R_PPC64_ADDR16_HIGHEST 41 -#define R_PPC64_ADDR16_HIGHESTA 42 -#define R_PPC64_UADDR64 43 -#define R_PPC64_REL64 44 -#define R_PPC64_PLT64 45 -#define R_PPC64_PLTREL64 46 -#define R_PPC64_TOC16 47 -#define R_PPC64_TOC16_LO 48 -#define R_PPC64_TOC16_HI 49 -#define R_PPC64_TOC16_HA 50 -#define R_PPC64_TOC 51 -#define R_PPC64_PLTGOT16 52 -#define R_PPC64_PLTGOT16_LO 53 -#define R_PPC64_PLTGOT16_HI 54 -#define R_PPC64_PLTGOT16_HA 55 - -#define R_PPC64_ADDR16_DS 56 -#define R_PPC64_ADDR16_LO_DS 57 -#define R_PPC64_GOT16_DS 58 -#define R_PPC64_GOT16_LO_DS 59 -#define R_PPC64_PLT16_LO_DS 60 -#define R_PPC64_SECTOFF_DS 61 -#define R_PPC64_SECTOFF_LO_DS 62 -#define R_PPC64_TOC16_DS 63 -#define R_PPC64_TOC16_LO_DS 64 -#define R_PPC64_PLTGOT16_DS 65 -#define R_PPC64_PLTGOT16_LO_DS 66 - - -#define R_PPC64_TLS 67 -#define R_PPC64_DTPMOD64 68 -#define R_PPC64_TPREL16 69 -#define R_PPC64_TPREL16_LO 70 -#define R_PPC64_TPREL16_HI 71 -#define R_PPC64_TPREL16_HA 72 -#define R_PPC64_TPREL64 73 -#define R_PPC64_DTPREL16 74 -#define R_PPC64_DTPREL16_LO 75 -#define R_PPC64_DTPREL16_HI 76 -#define R_PPC64_DTPREL16_HA 77 -#define R_PPC64_DTPREL64 78 -#define R_PPC64_GOT_TLSGD16 79 -#define R_PPC64_GOT_TLSGD16_LO 80 -#define R_PPC64_GOT_TLSGD16_HI 81 -#define R_PPC64_GOT_TLSGD16_HA 82 -#define R_PPC64_GOT_TLSLD16 83 -#define R_PPC64_GOT_TLSLD16_LO 84 -#define R_PPC64_GOT_TLSLD16_HI 85 -#define R_PPC64_GOT_TLSLD16_HA 86 -#define R_PPC64_GOT_TPREL16_DS 87 +#define EF_PARISC_TRAPNIL 0x00010000 +#define EF_PARISC_EXT 0x00020000 +#define EF_PARISC_LSB 0x00040000 +#define EF_PARISC_WIDE 0x00080000 +#define EF_PARISC_NO_KABP 0x00100000 + +#define EF_PARISC_LAZYSWAP 0x00400000 +#define EF_PARISC_ARCH 0x0000ffff + +#define EFA_PARISC_1_0 0x020b +#define EFA_PARISC_1_1 0x0210 +#define EFA_PARISC_2_0 0x0214 + +#define SHN_PARISC_ANSI_COMMON 0xff00 + +#define SHN_PARISC_HUGE_COMMON 0xff01 + +#define SHT_PARISC_EXT 0x70000000 +#define SHT_PARISC_UNWIND 0x70000001 +#define SHT_PARISC_DOC 0x70000002 + +#define SHF_PARISC_SHORT 0x20000000 +#define SHF_PARISC_HUGE 0x40000000 +#define SHF_PARISC_SBP 0x80000000 + +#define STT_PARISC_MILLICODE 13 + +#define STT_HP_OPAQUE (STT_LOOS + 0x1) +#define STT_HP_STUB (STT_LOOS + 0x2) + +#define R_PARISC_NONE 0 +#define R_PARISC_DIR32 1 +#define R_PARISC_DIR21L 2 +#define R_PARISC_DIR17R 3 +#define R_PARISC_DIR17F 4 +#define R_PARISC_DIR14R 6 +#define R_PARISC_PCREL32 9 +#define R_PARISC_PCREL21L 10 +#define R_PARISC_PCREL17R 11 +#define R_PARISC_PCREL17F 12 +#define R_PARISC_PCREL14R 14 +#define R_PARISC_DPREL21L 18 +#define R_PARISC_DPREL14R 22 +#define R_PARISC_GPREL21L 26 +#define R_PARISC_GPREL14R 30 +#define R_PARISC_LTOFF21L 34 +#define R_PARISC_LTOFF14R 38 +#define R_PARISC_SECREL32 41 +#define R_PARISC_SEGBASE 48 +#define R_PARISC_SEGREL32 49 +#define R_PARISC_PLTOFF21L 50 +#define R_PARISC_PLTOFF14R 54 +#define R_PARISC_LTOFF_FPTR32 57 +#define R_PARISC_LTOFF_FPTR21L 58 +#define R_PARISC_LTOFF_FPTR14R 62 +#define R_PARISC_FPTR64 64 +#define R_PARISC_PLABEL32 65 +#define R_PARISC_PLABEL21L 66 +#define R_PARISC_PLABEL14R 70 +#define R_PARISC_PCREL64 72 +#define R_PARISC_PCREL22F 74 +#define R_PARISC_PCREL14WR 75 +#define R_PARISC_PCREL14DR 76 +#define R_PARISC_PCREL16F 77 +#define R_PARISC_PCREL16WF 78 +#define R_PARISC_PCREL16DF 79 +#define R_PARISC_DIR64 80 +#define R_PARISC_DIR14WR 83 +#define R_PARISC_DIR14DR 84 +#define R_PARISC_DIR16F 85 +#define R_PARISC_DIR16WF 86 +#define R_PARISC_DIR16DF 87 +#define R_PARISC_GPREL64 88 +#define R_PARISC_GPREL14WR 91 +#define R_PARISC_GPREL14DR 92 +#define R_PARISC_GPREL16F 93 +#define R_PARISC_GPREL16WF 94 +#define R_PARISC_GPREL16DF 95 +#define R_PARISC_LTOFF64 96 +#define R_PARISC_LTOFF14WR 99 +#define R_PARISC_LTOFF14DR 100 +#define R_PARISC_LTOFF16F 101 +#define R_PARISC_LTOFF16WF 102 +#define R_PARISC_LTOFF16DF 103 +#define R_PARISC_SECREL64 104 +#define R_PARISC_SEGREL64 112 +#define R_PARISC_PLTOFF14WR 115 +#define R_PARISC_PLTOFF14DR 116 +#define R_PARISC_PLTOFF16F 117 +#define R_PARISC_PLTOFF16WF 118 +#define R_PARISC_PLTOFF16DF 119 +#define R_PARISC_LTOFF_FPTR64 120 +#define R_PARISC_LTOFF_FPTR14WR 123 +#define R_PARISC_LTOFF_FPTR14DR 124 +#define R_PARISC_LTOFF_FPTR16F 125 +#define R_PARISC_LTOFF_FPTR16WF 126 +#define R_PARISC_LTOFF_FPTR16DF 127 +#define R_PARISC_LORESERVE 128 +#define R_PARISC_COPY 128 +#define R_PARISC_IPLT 129 +#define R_PARISC_EPLT 130 +#define R_PARISC_TPREL32 153 +#define R_PARISC_TPREL21L 154 +#define R_PARISC_TPREL14R 158 +#define R_PARISC_LTOFF_TP21L 162 +#define R_PARISC_LTOFF_TP14R 166 +#define R_PARISC_LTOFF_TP14F 167 +#define R_PARISC_TPREL64 216 +#define R_PARISC_TPREL14WR 219 +#define R_PARISC_TPREL14DR 220 +#define R_PARISC_TPREL16F 221 +#define R_PARISC_TPREL16WF 222 +#define R_PARISC_TPREL16DF 223 +#define R_PARISC_LTOFF_TP64 224 +#define R_PARISC_LTOFF_TP14WR 227 +#define R_PARISC_LTOFF_TP14DR 228 +#define R_PARISC_LTOFF_TP16F 229 +#define R_PARISC_LTOFF_TP16WF 230 +#define R_PARISC_LTOFF_TP16DF 231 +#define R_PARISC_GNU_VTENTRY 232 +#define R_PARISC_GNU_VTINHERIT 233 +#define R_PARISC_TLS_GD21L 234 +#define R_PARISC_TLS_GD14R 235 +#define R_PARISC_TLS_GDCALL 236 +#define R_PARISC_TLS_LDM21L 237 +#define R_PARISC_TLS_LDM14R 238 +#define R_PARISC_TLS_LDMCALL 239 +#define R_PARISC_TLS_LDO21L 240 +#define R_PARISC_TLS_LDO14R 241 +#define R_PARISC_TLS_DTPMOD32 242 +#define R_PARISC_TLS_DTPMOD64 243 +#define R_PARISC_TLS_DTPOFF32 244 +#define R_PARISC_TLS_DTPOFF64 245 +#define R_PARISC_TLS_LE21L R_PARISC_TPREL21L +#define R_PARISC_TLS_LE14R R_PARISC_TPREL14R +#define R_PARISC_TLS_IE21L R_PARISC_LTOFF_TP21L +#define R_PARISC_TLS_IE14R R_PARISC_LTOFF_TP14R +#define R_PARISC_TLS_TPREL32 R_PARISC_TPREL32 +#define R_PARISC_TLS_TPREL64 R_PARISC_TPREL64 +#define R_PARISC_HIRESERVE 255 + +#define PT_HP_TLS (PT_LOOS + 0x0) +#define PT_HP_CORE_NONE (PT_LOOS + 0x1) +#define PT_HP_CORE_VERSION (PT_LOOS + 0x2) +#define PT_HP_CORE_KERNEL (PT_LOOS + 0x3) +#define PT_HP_CORE_COMM (PT_LOOS + 0x4) +#define PT_HP_CORE_PROC (PT_LOOS + 0x5) +#define PT_HP_CORE_LOADABLE (PT_LOOS + 0x6) +#define PT_HP_CORE_STACK (PT_LOOS + 0x7) +#define PT_HP_CORE_SHM (PT_LOOS + 0x8) +#define PT_HP_CORE_MMF (PT_LOOS + 0x9) +#define PT_HP_PARALLEL (PT_LOOS + 0x10) +#define PT_HP_FASTBIND (PT_LOOS + 0x11) +#define PT_HP_OPT_ANNOT (PT_LOOS + 0x12) +#define PT_HP_HSL_ANNOT (PT_LOOS + 0x13) +#define PT_HP_STACK (PT_LOOS + 0x14) + +#define PT_PARISC_ARCHEXT 0x70000000 +#define PT_PARISC_UNWIND 0x70000001 + +#define PF_PARISC_SBP 0x08000000 + +#define PF_HP_PAGE_SIZE 0x00100000 +#define PF_HP_FAR_SHARED 0x00200000 +#define PF_HP_NEAR_SHARED 0x00400000 +#define PF_HP_CODE 0x01000000 +#define PF_HP_MODIFY 0x02000000 +#define PF_HP_LAZYSWAP 0x04000000 +#define PF_HP_SBP 0x08000000 + +#define EF_ALPHA_32BIT 1 +#define EF_ALPHA_CANRELAX 2 + +#define SHT_ALPHA_DEBUG 0x70000001 +#define SHT_ALPHA_REGINFO 0x70000002 + +#define SHF_ALPHA_GPREL 0x10000000 + +#define STO_ALPHA_NOPV 0x80 +#define STO_ALPHA_STD_GPLOAD 0x88 + +#define R_ALPHA_NONE 0 +#define R_ALPHA_REFLONG 1 +#define R_ALPHA_REFQUAD 2 +#define R_ALPHA_GPREL32 3 +#define R_ALPHA_LITERAL 4 +#define R_ALPHA_LITUSE 5 +#define R_ALPHA_GPDISP 6 +#define R_ALPHA_BRADDR 7 +#define R_ALPHA_HINT 8 +#define R_ALPHA_SREL16 9 +#define R_ALPHA_SREL32 10 +#define R_ALPHA_SREL64 11 +#define R_ALPHA_GPRELHIGH 17 +#define R_ALPHA_GPRELLOW 18 +#define R_ALPHA_GPREL16 19 +#define R_ALPHA_COPY 24 +#define R_ALPHA_GLOB_DAT 25 +#define R_ALPHA_JMP_SLOT 26 +#define R_ALPHA_RELATIVE 27 +#define R_ALPHA_TLS_GD_HI 28 +#define R_ALPHA_TLSGD 29 +#define R_ALPHA_TLS_LDM 30 +#define R_ALPHA_DTPMOD64 31 +#define R_ALPHA_GOTDTPREL 32 +#define R_ALPHA_DTPREL64 33 +#define R_ALPHA_DTPRELHI 34 +#define R_ALPHA_DTPRELLO 35 +#define R_ALPHA_DTPREL16 36 +#define R_ALPHA_GOTTPREL 37 +#define R_ALPHA_TPREL64 38 +#define R_ALPHA_TPRELHI 39 +#define R_ALPHA_TPRELLO 40 +#define R_ALPHA_TPREL16 41 + +#define R_ALPHA_NUM 46 + +#define LITUSE_ALPHA_ADDR 0 +#define LITUSE_ALPHA_BASE 1 +#define LITUSE_ALPHA_BYTOFF 2 +#define LITUSE_ALPHA_JSR 3 +#define LITUSE_ALPHA_TLS_GD 4 +#define LITUSE_ALPHA_TLS_LDM 5 + +#define DT_ALPHA_PLTRO (DT_LOPROC + 0) +#define DT_ALPHA_NUM 1 + +#define EF_PPC_EMB 0x80000000 + +#define EF_PPC_RELOCATABLE 0x00010000 +#define EF_PPC_RELOCATABLE_LIB 0x00008000 + +#define R_PPC_NONE 0 +#define R_PPC_ADDR32 1 +#define R_PPC_ADDR24 2 +#define R_PPC_ADDR16 3 +#define R_PPC_ADDR16_LO 4 +#define R_PPC_ADDR16_HI 5 +#define R_PPC_ADDR16_HA 6 +#define R_PPC_ADDR14 7 +#define R_PPC_ADDR14_BRTAKEN 8 +#define R_PPC_ADDR14_BRNTAKEN 9 +#define R_PPC_REL24 10 +#define R_PPC_REL14 11 +#define R_PPC_REL14_BRTAKEN 12 +#define R_PPC_REL14_BRNTAKEN 13 +#define R_PPC_GOT16 14 +#define R_PPC_GOT16_LO 15 +#define R_PPC_GOT16_HI 16 +#define R_PPC_GOT16_HA 17 +#define R_PPC_PLTREL24 18 +#define R_PPC_COPY 19 +#define R_PPC_GLOB_DAT 20 +#define R_PPC_JMP_SLOT 21 +#define R_PPC_RELATIVE 22 +#define R_PPC_LOCAL24PC 23 +#define R_PPC_UADDR32 24 +#define R_PPC_UADDR16 25 +#define R_PPC_REL32 26 +#define R_PPC_PLT32 27 +#define R_PPC_PLTREL32 28 +#define R_PPC_PLT16_LO 29 +#define R_PPC_PLT16_HI 30 +#define R_PPC_PLT16_HA 31 +#define R_PPC_SDAREL16 32 +#define R_PPC_SECTOFF 33 +#define R_PPC_SECTOFF_LO 34 +#define R_PPC_SECTOFF_HI 35 +#define R_PPC_SECTOFF_HA 36 + +#define R_PPC_TLS 67 +#define R_PPC_DTPMOD32 68 +#define R_PPC_TPREL16 69 +#define R_PPC_TPREL16_LO 70 +#define R_PPC_TPREL16_HI 71 +#define R_PPC_TPREL16_HA 72 +#define R_PPC_TPREL32 73 +#define R_PPC_DTPREL16 74 +#define R_PPC_DTPREL16_LO 75 +#define R_PPC_DTPREL16_HI 76 +#define R_PPC_DTPREL16_HA 77 +#define R_PPC_DTPREL32 78 +#define R_PPC_GOT_TLSGD16 79 +#define R_PPC_GOT_TLSGD16_LO 80 +#define R_PPC_GOT_TLSGD16_HI 81 +#define R_PPC_GOT_TLSGD16_HA 82 +#define R_PPC_GOT_TLSLD16 83 +#define R_PPC_GOT_TLSLD16_LO 84 +#define R_PPC_GOT_TLSLD16_HI 85 +#define R_PPC_GOT_TLSLD16_HA 86 +#define R_PPC_GOT_TPREL16 87 +#define R_PPC_GOT_TPREL16_LO 88 +#define R_PPC_GOT_TPREL16_HI 89 +#define R_PPC_GOT_TPREL16_HA 90 +#define R_PPC_GOT_DTPREL16 91 +#define R_PPC_GOT_DTPREL16_LO 92 +#define R_PPC_GOT_DTPREL16_HI 93 +#define R_PPC_GOT_DTPREL16_HA 94 +#define R_PPC_TLSGD 95 +#define R_PPC_TLSLD 96 + +#define R_PPC_EMB_NADDR32 101 +#define R_PPC_EMB_NADDR16 102 +#define R_PPC_EMB_NADDR16_LO 103 +#define R_PPC_EMB_NADDR16_HI 104 +#define R_PPC_EMB_NADDR16_HA 105 +#define R_PPC_EMB_SDAI16 106 +#define R_PPC_EMB_SDA2I16 107 +#define R_PPC_EMB_SDA2REL 108 +#define R_PPC_EMB_SDA21 109 +#define R_PPC_EMB_MRKREF 110 +#define R_PPC_EMB_RELSEC16 111 +#define R_PPC_EMB_RELST_LO 112 +#define R_PPC_EMB_RELST_HI 113 +#define R_PPC_EMB_RELST_HA 114 +#define R_PPC_EMB_BIT_FLD 115 +#define R_PPC_EMB_RELSDA 116 + +#define R_PPC_DIAB_SDA21_LO 180 +#define R_PPC_DIAB_SDA21_HI 181 +#define R_PPC_DIAB_SDA21_HA 182 +#define R_PPC_DIAB_RELSDA_LO 183 +#define R_PPC_DIAB_RELSDA_HI 184 +#define R_PPC_DIAB_RELSDA_HA 185 + +#define R_PPC_IRELATIVE 248 + +#define R_PPC_REL16 249 +#define R_PPC_REL16_LO 250 +#define R_PPC_REL16_HI 251 +#define R_PPC_REL16_HA 252 + +#define R_PPC_TOC16 255 + +#define DT_PPC_GOT (DT_LOPROC + 0) +#define DT_PPC_OPT (DT_LOPROC + 1) +#define DT_PPC_NUM 2 + +#define PPC_OPT_TLS 1 + +#define R_PPC64_NONE R_PPC_NONE +#define R_PPC64_ADDR32 R_PPC_ADDR32 +#define R_PPC64_ADDR24 R_PPC_ADDR24 +#define R_PPC64_ADDR16 R_PPC_ADDR16 +#define R_PPC64_ADDR16_LO R_PPC_ADDR16_LO +#define R_PPC64_ADDR16_HI R_PPC_ADDR16_HI +#define R_PPC64_ADDR16_HA R_PPC_ADDR16_HA +#define R_PPC64_ADDR14 R_PPC_ADDR14 +#define R_PPC64_ADDR14_BRTAKEN R_PPC_ADDR14_BRTAKEN +#define R_PPC64_ADDR14_BRNTAKEN R_PPC_ADDR14_BRNTAKEN +#define R_PPC64_REL24 R_PPC_REL24 +#define R_PPC64_REL14 R_PPC_REL14 +#define R_PPC64_REL14_BRTAKEN R_PPC_REL14_BRTAKEN +#define R_PPC64_REL14_BRNTAKEN R_PPC_REL14_BRNTAKEN +#define R_PPC64_GOT16 R_PPC_GOT16 +#define R_PPC64_GOT16_LO R_PPC_GOT16_LO +#define R_PPC64_GOT16_HI R_PPC_GOT16_HI +#define R_PPC64_GOT16_HA R_PPC_GOT16_HA + +#define R_PPC64_COPY R_PPC_COPY +#define R_PPC64_GLOB_DAT R_PPC_GLOB_DAT +#define R_PPC64_JMP_SLOT R_PPC_JMP_SLOT +#define R_PPC64_RELATIVE R_PPC_RELATIVE + +#define R_PPC64_UADDR32 R_PPC_UADDR32 +#define R_PPC64_UADDR16 R_PPC_UADDR16 +#define R_PPC64_REL32 R_PPC_REL32 +#define R_PPC64_PLT32 R_PPC_PLT32 +#define R_PPC64_PLTREL32 R_PPC_PLTREL32 +#define R_PPC64_PLT16_LO R_PPC_PLT16_LO +#define R_PPC64_PLT16_HI R_PPC_PLT16_HI +#define R_PPC64_PLT16_HA R_PPC_PLT16_HA + +#define R_PPC64_SECTOFF R_PPC_SECTOFF +#define R_PPC64_SECTOFF_LO R_PPC_SECTOFF_LO +#define R_PPC64_SECTOFF_HI R_PPC_SECTOFF_HI +#define R_PPC64_SECTOFF_HA R_PPC_SECTOFF_HA +#define R_PPC64_ADDR30 37 +#define R_PPC64_ADDR64 38 +#define R_PPC64_ADDR16_HIGHER 39 +#define R_PPC64_ADDR16_HIGHERA 40 +#define R_PPC64_ADDR16_HIGHEST 41 +#define R_PPC64_ADDR16_HIGHESTA 42 +#define R_PPC64_UADDR64 43 +#define R_PPC64_REL64 44 +#define R_PPC64_PLT64 45 +#define R_PPC64_PLTREL64 46 +#define R_PPC64_TOC16 47 +#define R_PPC64_TOC16_LO 48 +#define R_PPC64_TOC16_HI 49 +#define R_PPC64_TOC16_HA 50 +#define R_PPC64_TOC 51 +#define R_PPC64_PLTGOT16 52 +#define R_PPC64_PLTGOT16_LO 53 +#define R_PPC64_PLTGOT16_HI 54 +#define R_PPC64_PLTGOT16_HA 55 + +#define R_PPC64_ADDR16_DS 56 +#define R_PPC64_ADDR16_LO_DS 57 +#define R_PPC64_GOT16_DS 58 +#define R_PPC64_GOT16_LO_DS 59 +#define R_PPC64_PLT16_LO_DS 60 +#define R_PPC64_SECTOFF_DS 61 +#define R_PPC64_SECTOFF_LO_DS 62 +#define R_PPC64_TOC16_DS 63 +#define R_PPC64_TOC16_LO_DS 64 +#define R_PPC64_PLTGOT16_DS 65 +#define R_PPC64_PLTGOT16_LO_DS 66 + +#define R_PPC64_TLS 67 +#define R_PPC64_DTPMOD64 68 +#define R_PPC64_TPREL16 69 +#define R_PPC64_TPREL16_LO 70 +#define R_PPC64_TPREL16_HI 71 +#define R_PPC64_TPREL16_HA 72 +#define R_PPC64_TPREL64 73 +#define R_PPC64_DTPREL16 74 +#define R_PPC64_DTPREL16_LO 75 +#define R_PPC64_DTPREL16_HI 76 +#define R_PPC64_DTPREL16_HA 77 +#define R_PPC64_DTPREL64 78 +#define R_PPC64_GOT_TLSGD16 79 +#define R_PPC64_GOT_TLSGD16_LO 80 +#define R_PPC64_GOT_TLSGD16_HI 81 +#define R_PPC64_GOT_TLSGD16_HA 82 +#define R_PPC64_GOT_TLSLD16 83 +#define R_PPC64_GOT_TLSLD16_LO 84 +#define R_PPC64_GOT_TLSLD16_HI 85 +#define R_PPC64_GOT_TLSLD16_HA 86 +#define R_PPC64_GOT_TPREL16_DS 87 #define R_PPC64_GOT_TPREL16_LO_DS 88 -#define R_PPC64_GOT_TPREL16_HI 89 -#define R_PPC64_GOT_TPREL16_HA 90 -#define R_PPC64_GOT_DTPREL16_DS 91 +#define R_PPC64_GOT_TPREL16_HI 89 +#define R_PPC64_GOT_TPREL16_HA 90 +#define R_PPC64_GOT_DTPREL16_DS 91 #define R_PPC64_GOT_DTPREL16_LO_DS 92 -#define R_PPC64_GOT_DTPREL16_HI 93 -#define R_PPC64_GOT_DTPREL16_HA 94 -#define R_PPC64_TPREL16_DS 95 -#define R_PPC64_TPREL16_LO_DS 96 -#define R_PPC64_TPREL16_HIGHER 97 -#define R_PPC64_TPREL16_HIGHERA 98 -#define R_PPC64_TPREL16_HIGHEST 99 +#define R_PPC64_GOT_DTPREL16_HI 93 +#define R_PPC64_GOT_DTPREL16_HA 94 +#define R_PPC64_TPREL16_DS 95 +#define R_PPC64_TPREL16_LO_DS 96 +#define R_PPC64_TPREL16_HIGHER 97 +#define R_PPC64_TPREL16_HIGHERA 98 +#define R_PPC64_TPREL16_HIGHEST 99 #define R_PPC64_TPREL16_HIGHESTA 100 -#define R_PPC64_DTPREL16_DS 101 -#define R_PPC64_DTPREL16_LO_DS 102 -#define R_PPC64_DTPREL16_HIGHER 103 +#define R_PPC64_DTPREL16_DS 101 +#define R_PPC64_DTPREL16_LO_DS 102 +#define R_PPC64_DTPREL16_HIGHER 103 #define R_PPC64_DTPREL16_HIGHERA 104 #define R_PPC64_DTPREL16_HIGHEST 105 #define R_PPC64_DTPREL16_HIGHESTA 106 -#define R_PPC64_TLSGD 107 -#define R_PPC64_TLSLD 108 -#define R_PPC64_TOCSAVE 109 -#define R_PPC64_ADDR16_HIGH 110 -#define R_PPC64_ADDR16_HIGHA 111 -#define R_PPC64_TPREL16_HIGH 112 -#define R_PPC64_TPREL16_HIGHA 113 -#define R_PPC64_DTPREL16_HIGH 114 -#define R_PPC64_DTPREL16_HIGHA 115 - - -#define R_PPC64_JMP_IREL 247 -#define R_PPC64_IRELATIVE 248 -#define R_PPC64_REL16 249 -#define R_PPC64_REL16_LO 250 -#define R_PPC64_REL16_HI 251 -#define R_PPC64_REL16_HA 252 - -#define EF_PPC64_ABI 3 - -#define DT_PPC64_GLINK (DT_LOPROC + 0) -#define DT_PPC64_OPD (DT_LOPROC + 1) -#define DT_PPC64_OPDSZ (DT_LOPROC + 2) -#define DT_PPC64_OPT (DT_LOPROC + 3) -#define DT_PPC64_NUM 4 - -#define PPC64_OPT_TLS 1 -#define PPC64_OPT_MULTI_TOC 2 - -#define STO_PPC64_LOCAL_BIT 5 -#define STO_PPC64_LOCAL_MASK 0xe0 -#define PPC64_LOCAL_ENTRY_OFFSET(x) (1 << (((x)&0xe0)>>5) & 0xfc) - - -#define EF_ARM_RELEXEC 0x01 -#define EF_ARM_HASENTRY 0x02 -#define EF_ARM_INTERWORK 0x04 -#define EF_ARM_APCS_26 0x08 -#define EF_ARM_APCS_FLOAT 0x10 -#define EF_ARM_PIC 0x20 -#define EF_ARM_ALIGN8 0x40 -#define EF_ARM_NEW_ABI 0x80 -#define EF_ARM_OLD_ABI 0x100 -#define EF_ARM_SOFT_FLOAT 0x200 -#define EF_ARM_VFP_FLOAT 0x400 -#define EF_ARM_MAVERICK_FLOAT 0x800 - -#define EF_ARM_ABI_FLOAT_SOFT 0x200 -#define EF_ARM_ABI_FLOAT_HARD 0x400 - - -#define EF_ARM_SYMSARESORTED 0x04 -#define EF_ARM_DYNSYMSUSESEGIDX 0x08 -#define EF_ARM_MAPSYMSFIRST 0x10 -#define EF_ARM_EABIMASK 0XFF000000 - - -#define EF_ARM_BE8 0x00800000 -#define EF_ARM_LE8 0x00400000 - -#define EF_ARM_EABI_VERSION(flags) ((flags) & EF_ARM_EABIMASK) -#define EF_ARM_EABI_UNKNOWN 0x00000000 -#define EF_ARM_EABI_VER1 0x01000000 -#define EF_ARM_EABI_VER2 0x02000000 -#define EF_ARM_EABI_VER3 0x03000000 -#define EF_ARM_EABI_VER4 0x04000000 -#define EF_ARM_EABI_VER5 0x05000000 - - -#define STT_ARM_TFUNC STT_LOPROC -#define STT_ARM_16BIT STT_HIPROC - - -#define SHF_ARM_ENTRYSECT 0x10000000 -#define SHF_ARM_COMDEF 0x80000000 - - - -#define PF_ARM_SB 0x10000000 - -#define PF_ARM_PI 0x20000000 -#define PF_ARM_ABS 0x40000000 - - -#define PT_ARM_EXIDX (PT_LOPROC + 1) - - -#define SHT_ARM_EXIDX (SHT_LOPROC + 1) -#define SHT_ARM_PREEMPTMAP (SHT_LOPROC + 2) -#define SHT_ARM_ATTRIBUTES (SHT_LOPROC + 3) - -#define R_AARCH64_NONE 0 -#define R_AARCH64_P32_ABS32 1 -#define R_AARCH64_P32_COPY 180 -#define R_AARCH64_P32_GLOB_DAT 181 -#define R_AARCH64_P32_JUMP_SLOT 182 -#define R_AARCH64_P32_RELATIVE 183 +#define R_PPC64_TLSGD 107 +#define R_PPC64_TLSLD 108 +#define R_PPC64_TOCSAVE 109 +#define R_PPC64_ADDR16_HIGH 110 +#define R_PPC64_ADDR16_HIGHA 111 +#define R_PPC64_TPREL16_HIGH 112 +#define R_PPC64_TPREL16_HIGHA 113 +#define R_PPC64_DTPREL16_HIGH 114 +#define R_PPC64_DTPREL16_HIGHA 115 + +#define R_PPC64_JMP_IREL 247 +#define R_PPC64_IRELATIVE 248 +#define R_PPC64_REL16 249 +#define R_PPC64_REL16_LO 250 +#define R_PPC64_REL16_HI 251 +#define R_PPC64_REL16_HA 252 + +#define EF_PPC64_ABI 3 + +#define DT_PPC64_GLINK (DT_LOPROC + 0) +#define DT_PPC64_OPD (DT_LOPROC + 1) +#define DT_PPC64_OPDSZ (DT_LOPROC + 2) +#define DT_PPC64_OPT (DT_LOPROC + 3) +#define DT_PPC64_NUM 4 + +#define PPC64_OPT_TLS 1 +#define PPC64_OPT_MULTI_TOC 2 + +#define STO_PPC64_LOCAL_BIT 5 +#define STO_PPC64_LOCAL_MASK 0xe0 +#define PPC64_LOCAL_ENTRY_OFFSET(x) (1 << (((x)&0xe0) >> 5) & 0xfc) + +#define EF_ARM_RELEXEC 0x01 +#define EF_ARM_HASENTRY 0x02 +#define EF_ARM_INTERWORK 0x04 +#define EF_ARM_APCS_26 0x08 +#define EF_ARM_APCS_FLOAT 0x10 +#define EF_ARM_PIC 0x20 +#define EF_ARM_ALIGN8 0x40 +#define EF_ARM_NEW_ABI 0x80 +#define EF_ARM_OLD_ABI 0x100 +#define EF_ARM_SOFT_FLOAT 0x200 +#define EF_ARM_VFP_FLOAT 0x400 +#define EF_ARM_MAVERICK_FLOAT 0x800 + +#define EF_ARM_ABI_FLOAT_SOFT 0x200 +#define EF_ARM_ABI_FLOAT_HARD 0x400 + +#define EF_ARM_SYMSARESORTED 0x04 +#define EF_ARM_DYNSYMSUSESEGIDX 0x08 +#define EF_ARM_MAPSYMSFIRST 0x10 +#define EF_ARM_EABIMASK 0XFF000000 + +#define EF_ARM_BE8 0x00800000 +#define EF_ARM_LE8 0x00400000 + +#define EF_ARM_EABI_VERSION(flags) ((flags)&EF_ARM_EABIMASK) +#define EF_ARM_EABI_UNKNOWN 0x00000000 +#define EF_ARM_EABI_VER1 0x01000000 +#define EF_ARM_EABI_VER2 0x02000000 +#define EF_ARM_EABI_VER3 0x03000000 +#define EF_ARM_EABI_VER4 0x04000000 +#define EF_ARM_EABI_VER5 0x05000000 + +#define STT_ARM_TFUNC STT_LOPROC +#define STT_ARM_16BIT STT_HIPROC + +#define SHF_ARM_ENTRYSECT 0x10000000 +#define SHF_ARM_COMDEF 0x80000000 + +#define PF_ARM_SB 0x10000000 + +#define PF_ARM_PI 0x20000000 +#define PF_ARM_ABS 0x40000000 + +#define PT_ARM_EXIDX (PT_LOPROC + 1) + +#define SHT_ARM_EXIDX (SHT_LOPROC + 1) +#define SHT_ARM_PREEMPTMAP (SHT_LOPROC + 2) +#define SHT_ARM_ATTRIBUTES (SHT_LOPROC + 3) + +#define R_AARCH64_NONE 0 +#define R_AARCH64_P32_ABS32 1 +#define R_AARCH64_P32_COPY 180 +#define R_AARCH64_P32_GLOB_DAT 181 +#define R_AARCH64_P32_JUMP_SLOT 182 +#define R_AARCH64_P32_RELATIVE 183 #define R_AARCH64_P32_TLS_DTPMOD 184 #define R_AARCH64_P32_TLS_DTPREL 185 -#define R_AARCH64_P32_TLS_TPREL 186 -#define R_AARCH64_P32_TLSDESC 187 -#define R_AARCH64_P32_IRELATIVE 188 -#define R_AARCH64_ABS64 257 -#define R_AARCH64_ABS32 258 -#define R_AARCH64_ABS16 259 -#define R_AARCH64_PREL64 260 -#define R_AARCH64_PREL32 261 -#define R_AARCH64_PREL16 262 -#define R_AARCH64_MOVW_UABS_G0 263 +#define R_AARCH64_P32_TLS_TPREL 186 +#define R_AARCH64_P32_TLSDESC 187 +#define R_AARCH64_P32_IRELATIVE 188 +#define R_AARCH64_ABS64 257 +#define R_AARCH64_ABS32 258 +#define R_AARCH64_ABS16 259 +#define R_AARCH64_PREL64 260 +#define R_AARCH64_PREL32 261 +#define R_AARCH64_PREL16 262 +#define R_AARCH64_MOVW_UABS_G0 263 #define R_AARCH64_MOVW_UABS_G0_NC 264 -#define R_AARCH64_MOVW_UABS_G1 265 +#define R_AARCH64_MOVW_UABS_G1 265 #define R_AARCH64_MOVW_UABS_G1_NC 266 -#define R_AARCH64_MOVW_UABS_G2 267 +#define R_AARCH64_MOVW_UABS_G2 267 #define R_AARCH64_MOVW_UABS_G2_NC 268 -#define R_AARCH64_MOVW_UABS_G3 269 -#define R_AARCH64_MOVW_SABS_G0 270 -#define R_AARCH64_MOVW_SABS_G1 271 -#define R_AARCH64_MOVW_SABS_G2 272 -#define R_AARCH64_LD_PREL_LO19 273 -#define R_AARCH64_ADR_PREL_LO21 274 +#define R_AARCH64_MOVW_UABS_G3 269 +#define R_AARCH64_MOVW_SABS_G0 270 +#define R_AARCH64_MOVW_SABS_G1 271 +#define R_AARCH64_MOVW_SABS_G2 272 +#define R_AARCH64_LD_PREL_LO19 273 +#define R_AARCH64_ADR_PREL_LO21 274 #define R_AARCH64_ADR_PREL_PG_HI21 275 #define R_AARCH64_ADR_PREL_PG_HI21_NC 276 #define R_AARCH64_ADD_ABS_LO12_NC 277 #define R_AARCH64_LDST8_ABS_LO12_NC 278 -#define R_AARCH64_TSTBR14 279 -#define R_AARCH64_CONDBR19 280 -#define R_AARCH64_JUMP26 282 -#define R_AARCH64_CALL26 283 +#define R_AARCH64_TSTBR14 279 +#define R_AARCH64_CONDBR19 280 +#define R_AARCH64_JUMP26 282 +#define R_AARCH64_CALL26 283 #define R_AARCH64_LDST16_ABS_LO12_NC 284 #define R_AARCH64_LDST32_ABS_LO12_NC 285 #define R_AARCH64_LDST64_ABS_LO12_NC 286 -#define R_AARCH64_MOVW_PREL_G0 287 +#define R_AARCH64_MOVW_PREL_G0 287 #define R_AARCH64_MOVW_PREL_G0_NC 288 -#define R_AARCH64_MOVW_PREL_G1 289 +#define R_AARCH64_MOVW_PREL_G1 289 #define R_AARCH64_MOVW_PREL_G1_NC 290 -#define R_AARCH64_MOVW_PREL_G2 291 +#define R_AARCH64_MOVW_PREL_G2 291 #define R_AARCH64_MOVW_PREL_G2_NC 292 -#define R_AARCH64_MOVW_PREL_G3 293 +#define R_AARCH64_MOVW_PREL_G3 293 #define R_AARCH64_LDST128_ABS_LO12_NC 299 #define R_AARCH64_MOVW_GOTOFF_G0 300 #define R_AARCH64_MOVW_GOTOFF_G0_NC 301 @@ -2377,22 +2166,22 @@ enum #define R_AARCH64_MOVW_GOTOFF_G2 304 #define R_AARCH64_MOVW_GOTOFF_G2_NC 305 #define R_AARCH64_MOVW_GOTOFF_G3 306 -#define R_AARCH64_GOTREL64 307 -#define R_AARCH64_GOTREL32 308 -#define R_AARCH64_GOT_LD_PREL19 309 +#define R_AARCH64_GOTREL64 307 +#define R_AARCH64_GOTREL32 308 +#define R_AARCH64_GOT_LD_PREL19 309 #define R_AARCH64_LD64_GOTOFF_LO15 310 -#define R_AARCH64_ADR_GOT_PAGE 311 +#define R_AARCH64_ADR_GOT_PAGE 311 #define R_AARCH64_LD64_GOT_LO12_NC 312 #define R_AARCH64_LD64_GOTPAGE_LO15 313 #define R_AARCH64_TLSGD_ADR_PREL21 512 #define R_AARCH64_TLSGD_ADR_PAGE21 513 #define R_AARCH64_TLSGD_ADD_LO12_NC 514 -#define R_AARCH64_TLSGD_MOVW_G1 515 +#define R_AARCH64_TLSGD_MOVW_G1 515 #define R_AARCH64_TLSGD_MOVW_G0_NC 516 #define R_AARCH64_TLSLD_ADR_PREL21 517 #define R_AARCH64_TLSLD_ADR_PAGE21 518 #define R_AARCH64_TLSLD_ADD_LO12_NC 519 -#define R_AARCH64_TLSLD_MOVW_G1 520 +#define R_AARCH64_TLSLD_MOVW_G1 520 #define R_AARCH64_TLSLD_MOVW_G0_NC 521 #define R_AARCH64_TLSLD_LD_PREL19 522 #define R_AARCH64_TLSLD_MOVW_DTPREL_G2 523 @@ -2439,586 +2228,564 @@ enum #define R_AARCH64_TLSDESC_ADD_LO12 564 #define R_AARCH64_TLSDESC_OFF_G1 565 #define R_AARCH64_TLSDESC_OFF_G0_NC 566 -#define R_AARCH64_TLSDESC_LDR 567 -#define R_AARCH64_TLSDESC_ADD 568 -#define R_AARCH64_TLSDESC_CALL 569 +#define R_AARCH64_TLSDESC_LDR 567 +#define R_AARCH64_TLSDESC_ADD 568 +#define R_AARCH64_TLSDESC_CALL 569 #define R_AARCH64_TLSLE_LDST128_TPREL_LO12 570 #define R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC 571 #define R_AARCH64_TLSLD_LDST128_DTPREL_LO12 572 #define R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC 573 -#define R_AARCH64_COPY 1024 -#define R_AARCH64_GLOB_DAT 1025 -#define R_AARCH64_JUMP_SLOT 1026 -#define R_AARCH64_RELATIVE 1027 -#define R_AARCH64_TLS_DTPMOD 1028 +#define R_AARCH64_COPY 1024 +#define R_AARCH64_GLOB_DAT 1025 +#define R_AARCH64_JUMP_SLOT 1026 +#define R_AARCH64_RELATIVE 1027 +#define R_AARCH64_TLS_DTPMOD 1028 #define R_AARCH64_TLS_DTPMOD64 1028 -#define R_AARCH64_TLS_DTPREL 1029 +#define R_AARCH64_TLS_DTPREL 1029 #define R_AARCH64_TLS_DTPREL64 1029 -#define R_AARCH64_TLS_TPREL 1030 -#define R_AARCH64_TLS_TPREL64 1030 -#define R_AARCH64_TLSDESC 1031 - - -#define R_ARM_NONE 0 -#define R_ARM_PC24 1 -#define R_ARM_ABS32 2 -#define R_ARM_REL32 3 -#define R_ARM_PC13 4 -#define R_ARM_ABS16 5 -#define R_ARM_ABS12 6 -#define R_ARM_THM_ABS5 7 -#define R_ARM_ABS8 8 -#define R_ARM_SBREL32 9 -#define R_ARM_THM_PC22 10 -#define R_ARM_THM_PC8 11 -#define R_ARM_AMP_VCALL9 12 -#define R_ARM_TLS_DESC 13 -#define R_ARM_THM_SWI8 14 -#define R_ARM_XPC25 15 -#define R_ARM_THM_XPC22 16 -#define R_ARM_TLS_DTPMOD32 17 -#define R_ARM_TLS_DTPOFF32 18 -#define R_ARM_TLS_TPOFF32 19 -#define R_ARM_COPY 20 -#define R_ARM_GLOB_DAT 21 -#define R_ARM_JUMP_SLOT 22 -#define R_ARM_RELATIVE 23 -#define R_ARM_GOTOFF 24 -#define R_ARM_GOTPC 25 -#define R_ARM_GOT32 26 -#define R_ARM_PLT32 27 -#define R_ARM_CALL 28 -#define R_ARM_JUMP24 29 -#define R_ARM_THM_JUMP24 30 -#define R_ARM_BASE_ABS 31 -#define R_ARM_ALU_PCREL_7_0 32 -#define R_ARM_ALU_PCREL_15_8 33 -#define R_ARM_ALU_PCREL_23_15 34 -#define R_ARM_LDR_SBREL_11_0 35 -#define R_ARM_ALU_SBREL_19_12 36 -#define R_ARM_ALU_SBREL_27_20 37 -#define R_ARM_TARGET1 38 -#define R_ARM_SBREL31 39 -#define R_ARM_V4BX 40 -#define R_ARM_TARGET2 41 -#define R_ARM_PREL31 42 -#define R_ARM_MOVW_ABS_NC 43 -#define R_ARM_MOVT_ABS 44 -#define R_ARM_MOVW_PREL_NC 45 -#define R_ARM_MOVT_PREL 46 -#define R_ARM_THM_MOVW_ABS_NC 47 -#define R_ARM_THM_MOVT_ABS 48 -#define R_ARM_THM_MOVW_PREL_NC 49 -#define R_ARM_THM_MOVT_PREL 50 -#define R_ARM_THM_JUMP19 51 -#define R_ARM_THM_JUMP6 52 -#define R_ARM_THM_ALU_PREL_11_0 53 -#define R_ARM_THM_PC12 54 -#define R_ARM_ABS32_NOI 55 -#define R_ARM_REL32_NOI 56 -#define R_ARM_ALU_PC_G0_NC 57 -#define R_ARM_ALU_PC_G0 58 -#define R_ARM_ALU_PC_G1_NC 59 -#define R_ARM_ALU_PC_G1 60 -#define R_ARM_ALU_PC_G2 61 -#define R_ARM_LDR_PC_G1 62 -#define R_ARM_LDR_PC_G2 63 -#define R_ARM_LDRS_PC_G0 64 -#define R_ARM_LDRS_PC_G1 65 -#define R_ARM_LDRS_PC_G2 66 -#define R_ARM_LDC_PC_G0 67 -#define R_ARM_LDC_PC_G1 68 -#define R_ARM_LDC_PC_G2 69 -#define R_ARM_ALU_SB_G0_NC 70 -#define R_ARM_ALU_SB_G0 71 -#define R_ARM_ALU_SB_G1_NC 72 -#define R_ARM_ALU_SB_G1 73 -#define R_ARM_ALU_SB_G2 74 -#define R_ARM_LDR_SB_G0 75 -#define R_ARM_LDR_SB_G1 76 -#define R_ARM_LDR_SB_G2 77 -#define R_ARM_LDRS_SB_G0 78 -#define R_ARM_LDRS_SB_G1 79 -#define R_ARM_LDRS_SB_G2 80 -#define R_ARM_LDC_SB_G0 81 -#define R_ARM_LDC_SB_G1 82 -#define R_ARM_LDC_SB_G2 83 -#define R_ARM_MOVW_BREL_NC 84 -#define R_ARM_MOVT_BREL 85 -#define R_ARM_MOVW_BREL 86 -#define R_ARM_THM_MOVW_BREL_NC 87 -#define R_ARM_THM_MOVT_BREL 88 -#define R_ARM_THM_MOVW_BREL 89 -#define R_ARM_TLS_GOTDESC 90 -#define R_ARM_TLS_CALL 91 -#define R_ARM_TLS_DESCSEQ 92 -#define R_ARM_THM_TLS_CALL 93 -#define R_ARM_PLT32_ABS 94 -#define R_ARM_GOT_ABS 95 -#define R_ARM_GOT_PREL 96 -#define R_ARM_GOT_BREL12 97 -#define R_ARM_GOTOFF12 98 -#define R_ARM_GOTRELAX 99 -#define R_ARM_GNU_VTENTRY 100 -#define R_ARM_GNU_VTINHERIT 101 -#define R_ARM_THM_PC11 102 -#define R_ARM_THM_PC9 103 -#define R_ARM_TLS_GD32 104 - -#define R_ARM_TLS_LDM32 105 - -#define R_ARM_TLS_LDO32 106 - -#define R_ARM_TLS_IE32 107 - -#define R_ARM_TLS_LE32 108 -#define R_ARM_TLS_LDO12 109 -#define R_ARM_TLS_LE12 110 -#define R_ARM_TLS_IE12GP 111 -#define R_ARM_ME_TOO 128 -#define R_ARM_THM_TLS_DESCSEQ 129 -#define R_ARM_THM_TLS_DESCSEQ16 129 -#define R_ARM_THM_TLS_DESCSEQ32 130 -#define R_ARM_THM_GOT_BREL12 131 -#define R_ARM_IRELATIVE 160 -#define R_ARM_RXPC25 249 -#define R_ARM_RSBREL32 250 -#define R_ARM_THM_RPC22 251 -#define R_ARM_RREL32 252 -#define R_ARM_RABS22 253 -#define R_ARM_RPC24 254 -#define R_ARM_RBASE 255 - -#define R_ARM_NUM 256 - - - - -#define EF_IA_64_MASKOS 0x0000000f -#define EF_IA_64_ABI64 0x00000010 -#define EF_IA_64_ARCH 0xff000000 - - -#define PT_IA_64_ARCHEXT (PT_LOPROC + 0) -#define PT_IA_64_UNWIND (PT_LOPROC + 1) -#define PT_IA_64_HP_OPT_ANOT (PT_LOOS + 0x12) -#define PT_IA_64_HP_HSL_ANOT (PT_LOOS + 0x13) -#define PT_IA_64_HP_STACK (PT_LOOS + 0x14) - - -#define PF_IA_64_NORECOV 0x80000000 - - -#define SHT_IA_64_EXT (SHT_LOPROC + 0) -#define SHT_IA_64_UNWIND (SHT_LOPROC + 1) - - -#define SHF_IA_64_SHORT 0x10000000 -#define SHF_IA_64_NORECOV 0x20000000 - - -#define DT_IA_64_PLT_RESERVE (DT_LOPROC + 0) -#define DT_IA_64_NUM 1 - - -#define R_IA64_NONE 0x00 -#define R_IA64_IMM14 0x21 -#define R_IA64_IMM22 0x22 -#define R_IA64_IMM64 0x23 -#define R_IA64_DIR32MSB 0x24 -#define R_IA64_DIR32LSB 0x25 -#define R_IA64_DIR64MSB 0x26 -#define R_IA64_DIR64LSB 0x27 -#define R_IA64_GPREL22 0x2a -#define R_IA64_GPREL64I 0x2b -#define R_IA64_GPREL32MSB 0x2c -#define R_IA64_GPREL32LSB 0x2d -#define R_IA64_GPREL64MSB 0x2e -#define R_IA64_GPREL64LSB 0x2f -#define R_IA64_LTOFF22 0x32 -#define R_IA64_LTOFF64I 0x33 -#define R_IA64_PLTOFF22 0x3a -#define R_IA64_PLTOFF64I 0x3b -#define R_IA64_PLTOFF64MSB 0x3e -#define R_IA64_PLTOFF64LSB 0x3f -#define R_IA64_FPTR64I 0x43 -#define R_IA64_FPTR32MSB 0x44 -#define R_IA64_FPTR32LSB 0x45 -#define R_IA64_FPTR64MSB 0x46 -#define R_IA64_FPTR64LSB 0x47 -#define R_IA64_PCREL60B 0x48 -#define R_IA64_PCREL21B 0x49 -#define R_IA64_PCREL21M 0x4a -#define R_IA64_PCREL21F 0x4b -#define R_IA64_PCREL32MSB 0x4c -#define R_IA64_PCREL32LSB 0x4d -#define R_IA64_PCREL64MSB 0x4e -#define R_IA64_PCREL64LSB 0x4f -#define R_IA64_LTOFF_FPTR22 0x52 -#define R_IA64_LTOFF_FPTR64I 0x53 -#define R_IA64_LTOFF_FPTR32MSB 0x54 -#define R_IA64_LTOFF_FPTR32LSB 0x55 -#define R_IA64_LTOFF_FPTR64MSB 0x56 -#define R_IA64_LTOFF_FPTR64LSB 0x57 -#define R_IA64_SEGREL32MSB 0x5c -#define R_IA64_SEGREL32LSB 0x5d -#define R_IA64_SEGREL64MSB 0x5e -#define R_IA64_SEGREL64LSB 0x5f -#define R_IA64_SECREL32MSB 0x64 -#define R_IA64_SECREL32LSB 0x65 -#define R_IA64_SECREL64MSB 0x66 -#define R_IA64_SECREL64LSB 0x67 -#define R_IA64_REL32MSB 0x6c -#define R_IA64_REL32LSB 0x6d -#define R_IA64_REL64MSB 0x6e -#define R_IA64_REL64LSB 0x6f -#define R_IA64_LTV32MSB 0x74 -#define R_IA64_LTV32LSB 0x75 -#define R_IA64_LTV64MSB 0x76 -#define R_IA64_LTV64LSB 0x77 -#define R_IA64_PCREL21BI 0x79 -#define R_IA64_PCREL22 0x7a -#define R_IA64_PCREL64I 0x7b -#define R_IA64_IPLTMSB 0x80 -#define R_IA64_IPLTLSB 0x81 -#define R_IA64_COPY 0x84 -#define R_IA64_SUB 0x85 -#define R_IA64_LTOFF22X 0x86 -#define R_IA64_LDXMOV 0x87 -#define R_IA64_TPREL14 0x91 -#define R_IA64_TPREL22 0x92 -#define R_IA64_TPREL64I 0x93 -#define R_IA64_TPREL64MSB 0x96 -#define R_IA64_TPREL64LSB 0x97 -#define R_IA64_LTOFF_TPREL22 0x9a -#define R_IA64_DTPMOD64MSB 0xa6 -#define R_IA64_DTPMOD64LSB 0xa7 -#define R_IA64_LTOFF_DTPMOD22 0xaa -#define R_IA64_DTPREL14 0xb1 -#define R_IA64_DTPREL22 0xb2 -#define R_IA64_DTPREL64I 0xb3 -#define R_IA64_DTPREL32MSB 0xb4 -#define R_IA64_DTPREL32LSB 0xb5 -#define R_IA64_DTPREL64MSB 0xb6 -#define R_IA64_DTPREL64LSB 0xb7 -#define R_IA64_LTOFF_DTPREL22 0xba - - -#define EF_SH_MACH_MASK 0x1f -#define EF_SH_UNKNOWN 0x0 -#define EF_SH1 0x1 -#define EF_SH2 0x2 -#define EF_SH3 0x3 -#define EF_SH_DSP 0x4 -#define EF_SH3_DSP 0x5 -#define EF_SH4AL_DSP 0x6 -#define EF_SH3E 0x8 -#define EF_SH4 0x9 -#define EF_SH2E 0xb -#define EF_SH4A 0xc -#define EF_SH2A 0xd -#define EF_SH4_NOFPU 0x10 -#define EF_SH4A_NOFPU 0x11 -#define EF_SH4_NOMMU_NOFPU 0x12 -#define EF_SH2A_NOFPU 0x13 -#define EF_SH3_NOMMU 0x14 -#define EF_SH2A_SH4_NOFPU 0x15 -#define EF_SH2A_SH3_NOFPU 0x16 -#define EF_SH2A_SH4 0x17 -#define EF_SH2A_SH3E 0x18 - -#define R_SH_NONE 0 -#define R_SH_DIR32 1 -#define R_SH_REL32 2 -#define R_SH_DIR8WPN 3 -#define R_SH_IND12W 4 -#define R_SH_DIR8WPL 5 -#define R_SH_DIR8WPZ 6 -#define R_SH_DIR8BP 7 -#define R_SH_DIR8W 8 -#define R_SH_DIR8L 9 -#define R_SH_SWITCH16 25 -#define R_SH_SWITCH32 26 -#define R_SH_USES 27 -#define R_SH_COUNT 28 -#define R_SH_ALIGN 29 -#define R_SH_CODE 30 -#define R_SH_DATA 31 -#define R_SH_LABEL 32 -#define R_SH_SWITCH8 33 -#define R_SH_GNU_VTINHERIT 34 -#define R_SH_GNU_VTENTRY 35 -#define R_SH_TLS_GD_32 144 -#define R_SH_TLS_LD_32 145 -#define R_SH_TLS_LDO_32 146 -#define R_SH_TLS_IE_32 147 -#define R_SH_TLS_LE_32 148 -#define R_SH_TLS_DTPMOD32 149 -#define R_SH_TLS_DTPOFF32 150 -#define R_SH_TLS_TPOFF32 151 -#define R_SH_GOT32 160 -#define R_SH_PLT32 161 -#define R_SH_COPY 162 -#define R_SH_GLOB_DAT 163 -#define R_SH_JMP_SLOT 164 -#define R_SH_RELATIVE 165 -#define R_SH_GOTOFF 166 -#define R_SH_GOTPC 167 -#define R_SH_GOT20 201 -#define R_SH_GOTOFF20 202 -#define R_SH_GOTFUNCDESC 203 -#define R_SH_GOTFUNCDEST20 204 -#define R_SH_GOTOFFFUNCDESC 205 -#define R_SH_GOTOFFFUNCDEST20 206 -#define R_SH_FUNCDESC 207 -#define R_SH_FUNCDESC_VALUE 208 - -#define R_SH_NUM 256 - - - -#define R_390_NONE 0 -#define R_390_8 1 -#define R_390_12 2 -#define R_390_16 3 -#define R_390_32 4 -#define R_390_PC32 5 -#define R_390_GOT12 6 -#define R_390_GOT32 7 -#define R_390_PLT32 8 -#define R_390_COPY 9 -#define R_390_GLOB_DAT 10 -#define R_390_JMP_SLOT 11 -#define R_390_RELATIVE 12 -#define R_390_GOTOFF32 13 -#define R_390_GOTPC 14 -#define R_390_GOT16 15 -#define R_390_PC16 16 -#define R_390_PC16DBL 17 -#define R_390_PLT16DBL 18 -#define R_390_PC32DBL 19 -#define R_390_PLT32DBL 20 -#define R_390_GOTPCDBL 21 -#define R_390_64 22 -#define R_390_PC64 23 -#define R_390_GOT64 24 -#define R_390_PLT64 25 -#define R_390_GOTENT 26 -#define R_390_GOTOFF16 27 -#define R_390_GOTOFF64 28 -#define R_390_GOTPLT12 29 -#define R_390_GOTPLT16 30 -#define R_390_GOTPLT32 31 -#define R_390_GOTPLT64 32 -#define R_390_GOTPLTENT 33 -#define R_390_PLTOFF16 34 -#define R_390_PLTOFF32 35 -#define R_390_PLTOFF64 36 -#define R_390_TLS_LOAD 37 -#define R_390_TLS_GDCALL 38 - -#define R_390_TLS_LDCALL 39 - -#define R_390_TLS_GD32 40 - -#define R_390_TLS_GD64 41 - -#define R_390_TLS_GOTIE12 42 - -#define R_390_TLS_GOTIE32 43 - -#define R_390_TLS_GOTIE64 44 - -#define R_390_TLS_LDM32 45 - -#define R_390_TLS_LDM64 46 - -#define R_390_TLS_IE32 47 - -#define R_390_TLS_IE64 48 - -#define R_390_TLS_IEENT 49 - -#define R_390_TLS_LE32 50 - -#define R_390_TLS_LE64 51 - -#define R_390_TLS_LDO32 52 - -#define R_390_TLS_LDO64 53 - -#define R_390_TLS_DTPMOD 54 -#define R_390_TLS_DTPOFF 55 -#define R_390_TLS_TPOFF 56 - -#define R_390_20 57 -#define R_390_GOT20 58 -#define R_390_GOTPLT20 59 -#define R_390_TLS_GOTIE20 60 - - -#define R_390_NUM 61 - - - -#define R_CRIS_NONE 0 -#define R_CRIS_8 1 -#define R_CRIS_16 2 -#define R_CRIS_32 3 -#define R_CRIS_8_PCREL 4 -#define R_CRIS_16_PCREL 5 -#define R_CRIS_32_PCREL 6 -#define R_CRIS_GNU_VTINHERIT 7 -#define R_CRIS_GNU_VTENTRY 8 -#define R_CRIS_COPY 9 -#define R_CRIS_GLOB_DAT 10 -#define R_CRIS_JUMP_SLOT 11 -#define R_CRIS_RELATIVE 12 -#define R_CRIS_16_GOT 13 -#define R_CRIS_32_GOT 14 -#define R_CRIS_16_GOTPLT 15 -#define R_CRIS_32_GOTPLT 16 -#define R_CRIS_32_GOTREL 17 -#define R_CRIS_32_PLT_GOTREL 18 -#define R_CRIS_32_PLT_PCREL 19 - -#define R_CRIS_NUM 20 - - - -#define R_X86_64_NONE 0 -#define R_X86_64_64 1 -#define R_X86_64_PC32 2 -#define R_X86_64_GOT32 3 -#define R_X86_64_PLT32 4 -#define R_X86_64_COPY 5 -#define R_X86_64_GLOB_DAT 6 -#define R_X86_64_JUMP_SLOT 7 -#define R_X86_64_RELATIVE 8 -#define R_X86_64_GOTPCREL 9 - -#define R_X86_64_32 10 -#define R_X86_64_32S 11 -#define R_X86_64_16 12 -#define R_X86_64_PC16 13 -#define R_X86_64_8 14 -#define R_X86_64_PC8 15 -#define R_X86_64_DTPMOD64 16 -#define R_X86_64_DTPOFF64 17 -#define R_X86_64_TPOFF64 18 -#define R_X86_64_TLSGD 19 - -#define R_X86_64_TLSLD 20 - -#define R_X86_64_DTPOFF32 21 -#define R_X86_64_GOTTPOFF 22 - -#define R_X86_64_TPOFF32 23 -#define R_X86_64_PC64 24 -#define R_X86_64_GOTOFF64 25 -#define R_X86_64_GOTPC32 26 -#define R_X86_64_GOT64 27 -#define R_X86_64_GOTPCREL64 28 -#define R_X86_64_GOTPC64 29 -#define R_X86_64_GOTPLT64 30 -#define R_X86_64_PLTOFF64 31 -#define R_X86_64_SIZE32 32 -#define R_X86_64_SIZE64 33 +#define R_AARCH64_TLS_TPREL 1030 +#define R_AARCH64_TLS_TPREL64 1030 +#define R_AARCH64_TLSDESC 1031 + +#define R_ARM_NONE 0 +#define R_ARM_PC24 1 +#define R_ARM_ABS32 2 +#define R_ARM_REL32 3 +#define R_ARM_PC13 4 +#define R_ARM_ABS16 5 +#define R_ARM_ABS12 6 +#define R_ARM_THM_ABS5 7 +#define R_ARM_ABS8 8 +#define R_ARM_SBREL32 9 +#define R_ARM_THM_PC22 10 +#define R_ARM_THM_PC8 11 +#define R_ARM_AMP_VCALL9 12 +#define R_ARM_TLS_DESC 13 +#define R_ARM_THM_SWI8 14 +#define R_ARM_XPC25 15 +#define R_ARM_THM_XPC22 16 +#define R_ARM_TLS_DTPMOD32 17 +#define R_ARM_TLS_DTPOFF32 18 +#define R_ARM_TLS_TPOFF32 19 +#define R_ARM_COPY 20 +#define R_ARM_GLOB_DAT 21 +#define R_ARM_JUMP_SLOT 22 +#define R_ARM_RELATIVE 23 +#define R_ARM_GOTOFF 24 +#define R_ARM_GOTPC 25 +#define R_ARM_GOT32 26 +#define R_ARM_PLT32 27 +#define R_ARM_CALL 28 +#define R_ARM_JUMP24 29 +#define R_ARM_THM_JUMP24 30 +#define R_ARM_BASE_ABS 31 +#define R_ARM_ALU_PCREL_7_0 32 +#define R_ARM_ALU_PCREL_15_8 33 +#define R_ARM_ALU_PCREL_23_15 34 +#define R_ARM_LDR_SBREL_11_0 35 +#define R_ARM_ALU_SBREL_19_12 36 +#define R_ARM_ALU_SBREL_27_20 37 +#define R_ARM_TARGET1 38 +#define R_ARM_SBREL31 39 +#define R_ARM_V4BX 40 +#define R_ARM_TARGET2 41 +#define R_ARM_PREL31 42 +#define R_ARM_MOVW_ABS_NC 43 +#define R_ARM_MOVT_ABS 44 +#define R_ARM_MOVW_PREL_NC 45 +#define R_ARM_MOVT_PREL 46 +#define R_ARM_THM_MOVW_ABS_NC 47 +#define R_ARM_THM_MOVT_ABS 48 +#define R_ARM_THM_MOVW_PREL_NC 49 +#define R_ARM_THM_MOVT_PREL 50 +#define R_ARM_THM_JUMP19 51 +#define R_ARM_THM_JUMP6 52 +#define R_ARM_THM_ALU_PREL_11_0 53 +#define R_ARM_THM_PC12 54 +#define R_ARM_ABS32_NOI 55 +#define R_ARM_REL32_NOI 56 +#define R_ARM_ALU_PC_G0_NC 57 +#define R_ARM_ALU_PC_G0 58 +#define R_ARM_ALU_PC_G1_NC 59 +#define R_ARM_ALU_PC_G1 60 +#define R_ARM_ALU_PC_G2 61 +#define R_ARM_LDR_PC_G1 62 +#define R_ARM_LDR_PC_G2 63 +#define R_ARM_LDRS_PC_G0 64 +#define R_ARM_LDRS_PC_G1 65 +#define R_ARM_LDRS_PC_G2 66 +#define R_ARM_LDC_PC_G0 67 +#define R_ARM_LDC_PC_G1 68 +#define R_ARM_LDC_PC_G2 69 +#define R_ARM_ALU_SB_G0_NC 70 +#define R_ARM_ALU_SB_G0 71 +#define R_ARM_ALU_SB_G1_NC 72 +#define R_ARM_ALU_SB_G1 73 +#define R_ARM_ALU_SB_G2 74 +#define R_ARM_LDR_SB_G0 75 +#define R_ARM_LDR_SB_G1 76 +#define R_ARM_LDR_SB_G2 77 +#define R_ARM_LDRS_SB_G0 78 +#define R_ARM_LDRS_SB_G1 79 +#define R_ARM_LDRS_SB_G2 80 +#define R_ARM_LDC_SB_G0 81 +#define R_ARM_LDC_SB_G1 82 +#define R_ARM_LDC_SB_G2 83 +#define R_ARM_MOVW_BREL_NC 84 +#define R_ARM_MOVT_BREL 85 +#define R_ARM_MOVW_BREL 86 +#define R_ARM_THM_MOVW_BREL_NC 87 +#define R_ARM_THM_MOVT_BREL 88 +#define R_ARM_THM_MOVW_BREL 89 +#define R_ARM_TLS_GOTDESC 90 +#define R_ARM_TLS_CALL 91 +#define R_ARM_TLS_DESCSEQ 92 +#define R_ARM_THM_TLS_CALL 93 +#define R_ARM_PLT32_ABS 94 +#define R_ARM_GOT_ABS 95 +#define R_ARM_GOT_PREL 96 +#define R_ARM_GOT_BREL12 97 +#define R_ARM_GOTOFF12 98 +#define R_ARM_GOTRELAX 99 +#define R_ARM_GNU_VTENTRY 100 +#define R_ARM_GNU_VTINHERIT 101 +#define R_ARM_THM_PC11 102 +#define R_ARM_THM_PC9 103 +#define R_ARM_TLS_GD32 104 + +#define R_ARM_TLS_LDM32 105 + +#define R_ARM_TLS_LDO32 106 + +#define R_ARM_TLS_IE32 107 + +#define R_ARM_TLS_LE32 108 +#define R_ARM_TLS_LDO12 109 +#define R_ARM_TLS_LE12 110 +#define R_ARM_TLS_IE12GP 111 +#define R_ARM_ME_TOO 128 +#define R_ARM_THM_TLS_DESCSEQ 129 +#define R_ARM_THM_TLS_DESCSEQ16 129 +#define R_ARM_THM_TLS_DESCSEQ32 130 +#define R_ARM_THM_GOT_BREL12 131 +#define R_ARM_IRELATIVE 160 +#define R_ARM_RXPC25 249 +#define R_ARM_RSBREL32 250 +#define R_ARM_THM_RPC22 251 +#define R_ARM_RREL32 252 +#define R_ARM_RABS22 253 +#define R_ARM_RPC24 254 +#define R_ARM_RBASE 255 + +#define R_ARM_NUM 256 + +#define EF_IA_64_MASKOS 0x0000000f +#define EF_IA_64_ABI64 0x00000010 +#define EF_IA_64_ARCH 0xff000000 + +#define PT_IA_64_ARCHEXT (PT_LOPROC + 0) +#define PT_IA_64_UNWIND (PT_LOPROC + 1) +#define PT_IA_64_HP_OPT_ANOT (PT_LOOS + 0x12) +#define PT_IA_64_HP_HSL_ANOT (PT_LOOS + 0x13) +#define PT_IA_64_HP_STACK (PT_LOOS + 0x14) + +#define PF_IA_64_NORECOV 0x80000000 + +#define SHT_IA_64_EXT (SHT_LOPROC + 0) +#define SHT_IA_64_UNWIND (SHT_LOPROC + 1) + +#define SHF_IA_64_SHORT 0x10000000 +#define SHF_IA_64_NORECOV 0x20000000 + +#define DT_IA_64_PLT_RESERVE (DT_LOPROC + 0) +#define DT_IA_64_NUM 1 + +#define R_IA64_NONE 0x00 +#define R_IA64_IMM14 0x21 +#define R_IA64_IMM22 0x22 +#define R_IA64_IMM64 0x23 +#define R_IA64_DIR32MSB 0x24 +#define R_IA64_DIR32LSB 0x25 +#define R_IA64_DIR64MSB 0x26 +#define R_IA64_DIR64LSB 0x27 +#define R_IA64_GPREL22 0x2a +#define R_IA64_GPREL64I 0x2b +#define R_IA64_GPREL32MSB 0x2c +#define R_IA64_GPREL32LSB 0x2d +#define R_IA64_GPREL64MSB 0x2e +#define R_IA64_GPREL64LSB 0x2f +#define R_IA64_LTOFF22 0x32 +#define R_IA64_LTOFF64I 0x33 +#define R_IA64_PLTOFF22 0x3a +#define R_IA64_PLTOFF64I 0x3b +#define R_IA64_PLTOFF64MSB 0x3e +#define R_IA64_PLTOFF64LSB 0x3f +#define R_IA64_FPTR64I 0x43 +#define R_IA64_FPTR32MSB 0x44 +#define R_IA64_FPTR32LSB 0x45 +#define R_IA64_FPTR64MSB 0x46 +#define R_IA64_FPTR64LSB 0x47 +#define R_IA64_PCREL60B 0x48 +#define R_IA64_PCREL21B 0x49 +#define R_IA64_PCREL21M 0x4a +#define R_IA64_PCREL21F 0x4b +#define R_IA64_PCREL32MSB 0x4c +#define R_IA64_PCREL32LSB 0x4d +#define R_IA64_PCREL64MSB 0x4e +#define R_IA64_PCREL64LSB 0x4f +#define R_IA64_LTOFF_FPTR22 0x52 +#define R_IA64_LTOFF_FPTR64I 0x53 +#define R_IA64_LTOFF_FPTR32MSB 0x54 +#define R_IA64_LTOFF_FPTR32LSB 0x55 +#define R_IA64_LTOFF_FPTR64MSB 0x56 +#define R_IA64_LTOFF_FPTR64LSB 0x57 +#define R_IA64_SEGREL32MSB 0x5c +#define R_IA64_SEGREL32LSB 0x5d +#define R_IA64_SEGREL64MSB 0x5e +#define R_IA64_SEGREL64LSB 0x5f +#define R_IA64_SECREL32MSB 0x64 +#define R_IA64_SECREL32LSB 0x65 +#define R_IA64_SECREL64MSB 0x66 +#define R_IA64_SECREL64LSB 0x67 +#define R_IA64_REL32MSB 0x6c +#define R_IA64_REL32LSB 0x6d +#define R_IA64_REL64MSB 0x6e +#define R_IA64_REL64LSB 0x6f +#define R_IA64_LTV32MSB 0x74 +#define R_IA64_LTV32LSB 0x75 +#define R_IA64_LTV64MSB 0x76 +#define R_IA64_LTV64LSB 0x77 +#define R_IA64_PCREL21BI 0x79 +#define R_IA64_PCREL22 0x7a +#define R_IA64_PCREL64I 0x7b +#define R_IA64_IPLTMSB 0x80 +#define R_IA64_IPLTLSB 0x81 +#define R_IA64_COPY 0x84 +#define R_IA64_SUB 0x85 +#define R_IA64_LTOFF22X 0x86 +#define R_IA64_LDXMOV 0x87 +#define R_IA64_TPREL14 0x91 +#define R_IA64_TPREL22 0x92 +#define R_IA64_TPREL64I 0x93 +#define R_IA64_TPREL64MSB 0x96 +#define R_IA64_TPREL64LSB 0x97 +#define R_IA64_LTOFF_TPREL22 0x9a +#define R_IA64_DTPMOD64MSB 0xa6 +#define R_IA64_DTPMOD64LSB 0xa7 +#define R_IA64_LTOFF_DTPMOD22 0xaa +#define R_IA64_DTPREL14 0xb1 +#define R_IA64_DTPREL22 0xb2 +#define R_IA64_DTPREL64I 0xb3 +#define R_IA64_DTPREL32MSB 0xb4 +#define R_IA64_DTPREL32LSB 0xb5 +#define R_IA64_DTPREL64MSB 0xb6 +#define R_IA64_DTPREL64LSB 0xb7 +#define R_IA64_LTOFF_DTPREL22 0xba + +#define EF_SH_MACH_MASK 0x1f +#define EF_SH_UNKNOWN 0x0 +#define EF_SH1 0x1 +#define EF_SH2 0x2 +#define EF_SH3 0x3 +#define EF_SH_DSP 0x4 +#define EF_SH3_DSP 0x5 +#define EF_SH4AL_DSP 0x6 +#define EF_SH3E 0x8 +#define EF_SH4 0x9 +#define EF_SH2E 0xb +#define EF_SH4A 0xc +#define EF_SH2A 0xd +#define EF_SH4_NOFPU 0x10 +#define EF_SH4A_NOFPU 0x11 +#define EF_SH4_NOMMU_NOFPU 0x12 +#define EF_SH2A_NOFPU 0x13 +#define EF_SH3_NOMMU 0x14 +#define EF_SH2A_SH4_NOFPU 0x15 +#define EF_SH2A_SH3_NOFPU 0x16 +#define EF_SH2A_SH4 0x17 +#define EF_SH2A_SH3E 0x18 + +#define R_SH_NONE 0 +#define R_SH_DIR32 1 +#define R_SH_REL32 2 +#define R_SH_DIR8WPN 3 +#define R_SH_IND12W 4 +#define R_SH_DIR8WPL 5 +#define R_SH_DIR8WPZ 6 +#define R_SH_DIR8BP 7 +#define R_SH_DIR8W 8 +#define R_SH_DIR8L 9 +#define R_SH_SWITCH16 25 +#define R_SH_SWITCH32 26 +#define R_SH_USES 27 +#define R_SH_COUNT 28 +#define R_SH_ALIGN 29 +#define R_SH_CODE 30 +#define R_SH_DATA 31 +#define R_SH_LABEL 32 +#define R_SH_SWITCH8 33 +#define R_SH_GNU_VTINHERIT 34 +#define R_SH_GNU_VTENTRY 35 +#define R_SH_TLS_GD_32 144 +#define R_SH_TLS_LD_32 145 +#define R_SH_TLS_LDO_32 146 +#define R_SH_TLS_IE_32 147 +#define R_SH_TLS_LE_32 148 +#define R_SH_TLS_DTPMOD32 149 +#define R_SH_TLS_DTPOFF32 150 +#define R_SH_TLS_TPOFF32 151 +#define R_SH_GOT32 160 +#define R_SH_PLT32 161 +#define R_SH_COPY 162 +#define R_SH_GLOB_DAT 163 +#define R_SH_JMP_SLOT 164 +#define R_SH_RELATIVE 165 +#define R_SH_GOTOFF 166 +#define R_SH_GOTPC 167 +#define R_SH_GOT20 201 +#define R_SH_GOTOFF20 202 +#define R_SH_GOTFUNCDESC 203 +#define R_SH_GOTFUNCDEST20 204 +#define R_SH_GOTOFFFUNCDESC 205 +#define R_SH_GOTOFFFUNCDEST20 206 +#define R_SH_FUNCDESC 207 +#define R_SH_FUNCDESC_VALUE 208 + +#define R_SH_NUM 256 + +#define R_390_NONE 0 +#define R_390_8 1 +#define R_390_12 2 +#define R_390_16 3 +#define R_390_32 4 +#define R_390_PC32 5 +#define R_390_GOT12 6 +#define R_390_GOT32 7 +#define R_390_PLT32 8 +#define R_390_COPY 9 +#define R_390_GLOB_DAT 10 +#define R_390_JMP_SLOT 11 +#define R_390_RELATIVE 12 +#define R_390_GOTOFF32 13 +#define R_390_GOTPC 14 +#define R_390_GOT16 15 +#define R_390_PC16 16 +#define R_390_PC16DBL 17 +#define R_390_PLT16DBL 18 +#define R_390_PC32DBL 19 +#define R_390_PLT32DBL 20 +#define R_390_GOTPCDBL 21 +#define R_390_64 22 +#define R_390_PC64 23 +#define R_390_GOT64 24 +#define R_390_PLT64 25 +#define R_390_GOTENT 26 +#define R_390_GOTOFF16 27 +#define R_390_GOTOFF64 28 +#define R_390_GOTPLT12 29 +#define R_390_GOTPLT16 30 +#define R_390_GOTPLT32 31 +#define R_390_GOTPLT64 32 +#define R_390_GOTPLTENT 33 +#define R_390_PLTOFF16 34 +#define R_390_PLTOFF32 35 +#define R_390_PLTOFF64 36 +#define R_390_TLS_LOAD 37 +#define R_390_TLS_GDCALL 38 + +#define R_390_TLS_LDCALL 39 + +#define R_390_TLS_GD32 40 + +#define R_390_TLS_GD64 41 + +#define R_390_TLS_GOTIE12 42 + +#define R_390_TLS_GOTIE32 43 + +#define R_390_TLS_GOTIE64 44 + +#define R_390_TLS_LDM32 45 + +#define R_390_TLS_LDM64 46 + +#define R_390_TLS_IE32 47 + +#define R_390_TLS_IE64 48 + +#define R_390_TLS_IEENT 49 + +#define R_390_TLS_LE32 50 + +#define R_390_TLS_LE64 51 + +#define R_390_TLS_LDO32 52 + +#define R_390_TLS_LDO64 53 + +#define R_390_TLS_DTPMOD 54 +#define R_390_TLS_DTPOFF 55 +#define R_390_TLS_TPOFF 56 + +#define R_390_20 57 +#define R_390_GOT20 58 +#define R_390_GOTPLT20 59 +#define R_390_TLS_GOTIE20 60 + +#define R_390_NUM 61 + +#define R_CRIS_NONE 0 +#define R_CRIS_8 1 +#define R_CRIS_16 2 +#define R_CRIS_32 3 +#define R_CRIS_8_PCREL 4 +#define R_CRIS_16_PCREL 5 +#define R_CRIS_32_PCREL 6 +#define R_CRIS_GNU_VTINHERIT 7 +#define R_CRIS_GNU_VTENTRY 8 +#define R_CRIS_COPY 9 +#define R_CRIS_GLOB_DAT 10 +#define R_CRIS_JUMP_SLOT 11 +#define R_CRIS_RELATIVE 12 +#define R_CRIS_16_GOT 13 +#define R_CRIS_32_GOT 14 +#define R_CRIS_16_GOTPLT 15 +#define R_CRIS_32_GOTPLT 16 +#define R_CRIS_32_GOTREL 17 +#define R_CRIS_32_PLT_GOTREL 18 +#define R_CRIS_32_PLT_PCREL 19 + +#define R_CRIS_NUM 20 + +#define R_X86_64_NONE 0 +#define R_X86_64_64 1 +#define R_X86_64_PC32 2 +#define R_X86_64_GOT32 3 +#define R_X86_64_PLT32 4 +#define R_X86_64_COPY 5 +#define R_X86_64_GLOB_DAT 6 +#define R_X86_64_JUMP_SLOT 7 +#define R_X86_64_RELATIVE 8 +#define R_X86_64_GOTPCREL 9 + +#define R_X86_64_32 10 +#define R_X86_64_32S 11 +#define R_X86_64_16 12 +#define R_X86_64_PC16 13 +#define R_X86_64_8 14 +#define R_X86_64_PC8 15 +#define R_X86_64_DTPMOD64 16 +#define R_X86_64_DTPOFF64 17 +#define R_X86_64_TPOFF64 18 +#define R_X86_64_TLSGD 19 + +#define R_X86_64_TLSLD 20 + +#define R_X86_64_DTPOFF32 21 +#define R_X86_64_GOTTPOFF 22 + +#define R_X86_64_TPOFF32 23 +#define R_X86_64_PC64 24 +#define R_X86_64_GOTOFF64 25 +#define R_X86_64_GOTPC32 26 +#define R_X86_64_GOT64 27 +#define R_X86_64_GOTPCREL64 28 +#define R_X86_64_GOTPC64 29 +#define R_X86_64_GOTPLT64 30 +#define R_X86_64_PLTOFF64 31 +#define R_X86_64_SIZE32 32 +#define R_X86_64_SIZE64 33 #define R_X86_64_GOTPC32_TLSDESC 34 -#define R_X86_64_TLSDESC_CALL 35 - -#define R_X86_64_TLSDESC 36 -#define R_X86_64_IRELATIVE 37 -#define R_X86_64_RELATIVE64 38 -#define R_X86_64_GOTPCRELX 41 -#define R_X86_64_REX_GOTPCRELX 42 -#define R_X86_64_NUM 43 - - - -#define R_MN10300_NONE 0 -#define R_MN10300_32 1 -#define R_MN10300_16 2 -#define R_MN10300_8 3 -#define R_MN10300_PCREL32 4 -#define R_MN10300_PCREL16 5 -#define R_MN10300_PCREL8 6 -#define R_MN10300_GNU_VTINHERIT 7 -#define R_MN10300_GNU_VTENTRY 8 -#define R_MN10300_24 9 -#define R_MN10300_GOTPC32 10 -#define R_MN10300_GOTPC16 11 -#define R_MN10300_GOTOFF32 12 -#define R_MN10300_GOTOFF24 13 -#define R_MN10300_GOTOFF16 14 -#define R_MN10300_PLT32 15 -#define R_MN10300_PLT16 16 -#define R_MN10300_GOT32 17 -#define R_MN10300_GOT24 18 -#define R_MN10300_GOT16 19 -#define R_MN10300_COPY 20 -#define R_MN10300_GLOB_DAT 21 -#define R_MN10300_JMP_SLOT 22 -#define R_MN10300_RELATIVE 23 - -#define R_MN10300_NUM 24 - - - -#define R_M32R_NONE 0 -#define R_M32R_16 1 -#define R_M32R_32 2 -#define R_M32R_24 3 -#define R_M32R_10_PCREL 4 -#define R_M32R_18_PCREL 5 -#define R_M32R_26_PCREL 6 -#define R_M32R_HI16_ULO 7 -#define R_M32R_HI16_SLO 8 -#define R_M32R_LO16 9 -#define R_M32R_SDA16 10 -#define R_M32R_GNU_VTINHERIT 11 -#define R_M32R_GNU_VTENTRY 12 - -#define R_M32R_16_RELA 33 -#define R_M32R_32_RELA 34 -#define R_M32R_24_RELA 35 -#define R_M32R_10_PCREL_RELA 36 -#define R_M32R_18_PCREL_RELA 37 -#define R_M32R_26_PCREL_RELA 38 -#define R_M32R_HI16_ULO_RELA 39 -#define R_M32R_HI16_SLO_RELA 40 -#define R_M32R_LO16_RELA 41 -#define R_M32R_SDA16_RELA 42 -#define R_M32R_RELA_GNU_VTINHERIT 43 -#define R_M32R_RELA_GNU_VTENTRY 44 -#define R_M32R_REL32 45 - -#define R_M32R_GOT24 48 -#define R_M32R_26_PLTREL 49 -#define R_M32R_COPY 50 -#define R_M32R_GLOB_DAT 51 -#define R_M32R_JMP_SLOT 52 -#define R_M32R_RELATIVE 53 -#define R_M32R_GOTOFF 54 -#define R_M32R_GOTPC24 55 -#define R_M32R_GOT16_HI_ULO 56 - -#define R_M32R_GOT16_HI_SLO 57 - -#define R_M32R_GOT16_LO 58 -#define R_M32R_GOTPC_HI_ULO 59 - -#define R_M32R_GOTPC_HI_SLO 60 - -#define R_M32R_GOTPC_LO 61 - -#define R_M32R_GOTOFF_HI_ULO 62 - -#define R_M32R_GOTOFF_HI_SLO 63 - -#define R_M32R_GOTOFF_LO 64 -#define R_M32R_NUM 256 +#define R_X86_64_TLSDESC_CALL 35 + +#define R_X86_64_TLSDESC 36 +#define R_X86_64_IRELATIVE 37 +#define R_X86_64_RELATIVE64 38 +#define R_X86_64_GOTPCRELX 41 +#define R_X86_64_REX_GOTPCRELX 42 +#define R_X86_64_NUM 43 + +#define R_MN10300_NONE 0 +#define R_MN10300_32 1 +#define R_MN10300_16 2 +#define R_MN10300_8 3 +#define R_MN10300_PCREL32 4 +#define R_MN10300_PCREL16 5 +#define R_MN10300_PCREL8 6 +#define R_MN10300_GNU_VTINHERIT 7 +#define R_MN10300_GNU_VTENTRY 8 +#define R_MN10300_24 9 +#define R_MN10300_GOTPC32 10 +#define R_MN10300_GOTPC16 11 +#define R_MN10300_GOTOFF32 12 +#define R_MN10300_GOTOFF24 13 +#define R_MN10300_GOTOFF16 14 +#define R_MN10300_PLT32 15 +#define R_MN10300_PLT16 16 +#define R_MN10300_GOT32 17 +#define R_MN10300_GOT24 18 +#define R_MN10300_GOT16 19 +#define R_MN10300_COPY 20 +#define R_MN10300_GLOB_DAT 21 +#define R_MN10300_JMP_SLOT 22 +#define R_MN10300_RELATIVE 23 + +#define R_MN10300_NUM 24 + +#define R_M32R_NONE 0 +#define R_M32R_16 1 +#define R_M32R_32 2 +#define R_M32R_24 3 +#define R_M32R_10_PCREL 4 +#define R_M32R_18_PCREL 5 +#define R_M32R_26_PCREL 6 +#define R_M32R_HI16_ULO 7 +#define R_M32R_HI16_SLO 8 +#define R_M32R_LO16 9 +#define R_M32R_SDA16 10 +#define R_M32R_GNU_VTINHERIT 11 +#define R_M32R_GNU_VTENTRY 12 + +#define R_M32R_16_RELA 33 +#define R_M32R_32_RELA 34 +#define R_M32R_24_RELA 35 +#define R_M32R_10_PCREL_RELA 36 +#define R_M32R_18_PCREL_RELA 37 +#define R_M32R_26_PCREL_RELA 38 +#define R_M32R_HI16_ULO_RELA 39 +#define R_M32R_HI16_SLO_RELA 40 +#define R_M32R_LO16_RELA 41 +#define R_M32R_SDA16_RELA 42 +#define R_M32R_RELA_GNU_VTINHERIT 43 +#define R_M32R_RELA_GNU_VTENTRY 44 +#define R_M32R_REL32 45 + +#define R_M32R_GOT24 48 +#define R_M32R_26_PLTREL 49 +#define R_M32R_COPY 50 +#define R_M32R_GLOB_DAT 51 +#define R_M32R_JMP_SLOT 52 +#define R_M32R_RELATIVE 53 +#define R_M32R_GOTOFF 54 +#define R_M32R_GOTPC24 55 +#define R_M32R_GOT16_HI_ULO 56 + +#define R_M32R_GOT16_HI_SLO 57 + +#define R_M32R_GOT16_LO 58 +#define R_M32R_GOTPC_HI_ULO 59 + +#define R_M32R_GOTPC_HI_SLO 60 + +#define R_M32R_GOTPC_LO 61 + +#define R_M32R_GOTOFF_HI_ULO 62 + +#define R_M32R_GOTOFF_HI_SLO 63 + +#define R_M32R_GOTOFF_LO 64 +#define R_M32R_NUM 256 #define R_MICROBLAZE_NONE 0 #define R_MICROBLAZE_32 1 @@ -3049,99 +2816,98 @@ enum #define R_MICROBLAZE_TLSDTPREL32 26 #define R_MICROBLAZE_TLSDTPREL64 27 #define R_MICROBLAZE_TLSGOTTPREL32 28 -#define R_MICROBLAZE_TLSTPREL32 29 - -#define DT_NIOS2_GP 0x70000002 - -#define R_NIOS2_NONE 0 -#define R_NIOS2_S16 1 -#define R_NIOS2_U16 2 -#define R_NIOS2_PCREL16 3 -#define R_NIOS2_CALL26 4 -#define R_NIOS2_IMM5 5 -#define R_NIOS2_CACHE_OPX 6 -#define R_NIOS2_IMM6 7 -#define R_NIOS2_IMM8 8 -#define R_NIOS2_HI16 9 -#define R_NIOS2_LO16 10 -#define R_NIOS2_HIADJ16 11 -#define R_NIOS2_BFD_RELOC_32 12 -#define R_NIOS2_BFD_RELOC_16 13 -#define R_NIOS2_BFD_RELOC_8 14 -#define R_NIOS2_GPREL 15 -#define R_NIOS2_GNU_VTINHERIT 16 -#define R_NIOS2_GNU_VTENTRY 17 -#define R_NIOS2_UJMP 18 -#define R_NIOS2_CJMP 19 -#define R_NIOS2_CALLR 20 -#define R_NIOS2_ALIGN 21 -#define R_NIOS2_GOT16 22 -#define R_NIOS2_CALL16 23 -#define R_NIOS2_GOTOFF_LO 24 -#define R_NIOS2_GOTOFF_HA 25 -#define R_NIOS2_PCREL_LO 26 -#define R_NIOS2_PCREL_HA 27 -#define R_NIOS2_TLS_GD16 28 -#define R_NIOS2_TLS_LDM16 29 -#define R_NIOS2_TLS_LDO16 30 -#define R_NIOS2_TLS_IE16 31 -#define R_NIOS2_TLS_LE16 32 -#define R_NIOS2_TLS_DTPMOD 33 -#define R_NIOS2_TLS_DTPREL 34 -#define R_NIOS2_TLS_TPREL 35 -#define R_NIOS2_COPY 36 -#define R_NIOS2_GLOB_DAT 37 -#define R_NIOS2_JUMP_SLOT 38 -#define R_NIOS2_RELATIVE 39 -#define R_NIOS2_GOTOFF 40 -#define R_NIOS2_CALL26_NOAT 41 -#define R_NIOS2_GOT_LO 42 -#define R_NIOS2_GOT_HA 43 -#define R_NIOS2_CALL_LO 44 -#define R_NIOS2_CALL_HA 45 - -#define R_OR1K_NONE 0 -#define R_OR1K_32 1 -#define R_OR1K_16 2 -#define R_OR1K_8 3 -#define R_OR1K_LO_16_IN_INSN 4 -#define R_OR1K_HI_16_IN_INSN 5 -#define R_OR1K_INSN_REL_26 6 -#define R_OR1K_GNU_VTENTRY 7 -#define R_OR1K_GNU_VTINHERIT 8 -#define R_OR1K_32_PCREL 9 -#define R_OR1K_16_PCREL 10 -#define R_OR1K_8_PCREL 11 -#define R_OR1K_GOTPC_HI16 12 -#define R_OR1K_GOTPC_LO16 13 -#define R_OR1K_GOT16 14 -#define R_OR1K_PLT26 15 -#define R_OR1K_GOTOFF_HI16 16 -#define R_OR1K_GOTOFF_LO16 17 -#define R_OR1K_COPY 18 -#define R_OR1K_GLOB_DAT 19 -#define R_OR1K_JMP_SLOT 20 -#define R_OR1K_RELATIVE 21 -#define R_OR1K_TLS_GD_HI16 22 -#define R_OR1K_TLS_GD_LO16 23 -#define R_OR1K_TLS_LDM_HI16 24 -#define R_OR1K_TLS_LDM_LO16 25 -#define R_OR1K_TLS_LDO_HI16 26 -#define R_OR1K_TLS_LDO_LO16 27 -#define R_OR1K_TLS_IE_HI16 28 -#define R_OR1K_TLS_IE_LO16 29 -#define R_OR1K_TLS_LE_HI16 30 -#define R_OR1K_TLS_LE_LO16 31 -#define R_OR1K_TLS_TPOFF 32 -#define R_OR1K_TLS_DTPOFF 33 -#define R_OR1K_TLS_DTPMOD 34 - -#define R_BPF_NONE 0 -#define R_BPF_MAP_FD 1 +#define R_MICROBLAZE_TLSTPREL32 29 + +#define DT_NIOS2_GP 0x70000002 + +#define R_NIOS2_NONE 0 +#define R_NIOS2_S16 1 +#define R_NIOS2_U16 2 +#define R_NIOS2_PCREL16 3 +#define R_NIOS2_CALL26 4 +#define R_NIOS2_IMM5 5 +#define R_NIOS2_CACHE_OPX 6 +#define R_NIOS2_IMM6 7 +#define R_NIOS2_IMM8 8 +#define R_NIOS2_HI16 9 +#define R_NIOS2_LO16 10 +#define R_NIOS2_HIADJ16 11 +#define R_NIOS2_BFD_RELOC_32 12 +#define R_NIOS2_BFD_RELOC_16 13 +#define R_NIOS2_BFD_RELOC_8 14 +#define R_NIOS2_GPREL 15 +#define R_NIOS2_GNU_VTINHERIT 16 +#define R_NIOS2_GNU_VTENTRY 17 +#define R_NIOS2_UJMP 18 +#define R_NIOS2_CJMP 19 +#define R_NIOS2_CALLR 20 +#define R_NIOS2_ALIGN 21 +#define R_NIOS2_GOT16 22 +#define R_NIOS2_CALL16 23 +#define R_NIOS2_GOTOFF_LO 24 +#define R_NIOS2_GOTOFF_HA 25 +#define R_NIOS2_PCREL_LO 26 +#define R_NIOS2_PCREL_HA 27 +#define R_NIOS2_TLS_GD16 28 +#define R_NIOS2_TLS_LDM16 29 +#define R_NIOS2_TLS_LDO16 30 +#define R_NIOS2_TLS_IE16 31 +#define R_NIOS2_TLS_LE16 32 +#define R_NIOS2_TLS_DTPMOD 33 +#define R_NIOS2_TLS_DTPREL 34 +#define R_NIOS2_TLS_TPREL 35 +#define R_NIOS2_COPY 36 +#define R_NIOS2_GLOB_DAT 37 +#define R_NIOS2_JUMP_SLOT 38 +#define R_NIOS2_RELATIVE 39 +#define R_NIOS2_GOTOFF 40 +#define R_NIOS2_CALL26_NOAT 41 +#define R_NIOS2_GOT_LO 42 +#define R_NIOS2_GOT_HA 43 +#define R_NIOS2_CALL_LO 44 +#define R_NIOS2_CALL_HA 45 + +#define R_OR1K_NONE 0 +#define R_OR1K_32 1 +#define R_OR1K_16 2 +#define R_OR1K_8 3 +#define R_OR1K_LO_16_IN_INSN 4 +#define R_OR1K_HI_16_IN_INSN 5 +#define R_OR1K_INSN_REL_26 6 +#define R_OR1K_GNU_VTENTRY 7 +#define R_OR1K_GNU_VTINHERIT 8 +#define R_OR1K_32_PCREL 9 +#define R_OR1K_16_PCREL 10 +#define R_OR1K_8_PCREL 11 +#define R_OR1K_GOTPC_HI16 12 +#define R_OR1K_GOTPC_LO16 13 +#define R_OR1K_GOT16 14 +#define R_OR1K_PLT26 15 +#define R_OR1K_GOTOFF_HI16 16 +#define R_OR1K_GOTOFF_LO16 17 +#define R_OR1K_COPY 18 +#define R_OR1K_GLOB_DAT 19 +#define R_OR1K_JMP_SLOT 20 +#define R_OR1K_RELATIVE 21 +#define R_OR1K_TLS_GD_HI16 22 +#define R_OR1K_TLS_GD_LO16 23 +#define R_OR1K_TLS_LDM_HI16 24 +#define R_OR1K_TLS_LDM_LO16 25 +#define R_OR1K_TLS_LDO_HI16 26 +#define R_OR1K_TLS_LDO_LO16 27 +#define R_OR1K_TLS_IE_HI16 28 +#define R_OR1K_TLS_IE_LO16 29 +#define R_OR1K_TLS_LE_HI16 30 +#define R_OR1K_TLS_LE_LO16 31 +#define R_OR1K_TLS_TPOFF 32 +#define R_OR1K_TLS_DTPOFF 33 +#define R_OR1K_TLS_DTPMOD 34 + +#define R_BPF_NONE 0 +#define R_BPF_MAP_FD 1 #ifdef __cplusplus } #endif - #endif diff --git a/tools/src/gbafix/gbafix.c b/tools/src/gbafix/gbafix.c index 598e43aa..db301c78 100755..100644 --- a/tools/src/gbafix/gbafix.c +++ b/tools/src/gbafix/gbafix.c @@ -21,7 +21,8 @@ Please report all bugs and problems through the bug tracker at "http://sourceforge.net/tracker/?group_id=114505&atid=668551". - "$Header: /lvm/shared/ds/ds/cvs/devkitpro-cvsbackup/tools/gba/gbatools/gbafix.c,v 1.2 2008-07-30 17:12:51 wntrmute Exp $" + "$Header: /lvm/shared/ds/ds/cvs/devkitpro-cvsbackup/tools/gba/gbatools/gbafix.c,v 1.2 2008-07-30 17:12:51 wntrmute + Exp $" */ //--------------------------------------------------------------------------------- @@ -51,49 +52,45 @@ #include <stdint.h> #include "elf.h" -#define VER "1.07" -#define ARGV argv[arg] -#define VALUE (ARGV+2) -#define NUMBER strtoul(VALUE, NULL, 0) - -typedef struct -{ - uint32_t start_code; // B instruction - uint8_t logo[0xA0-0x04]; // logo data - uint8_t title[0xC]; // game title name - uint32_t game_code; // - uint16_t maker_code; // - uint8_t fixed; // 0x96 - uint8_t unit_code; // 0x00 - uint8_t device_type; // 0x00 - uint8_t unused[7]; // - uint8_t game_version; // 0x00 - uint8_t complement; // 800000A0..800000BC - uint16_t checksum; // 0x0000 +#define VER "1.07" +#define ARGV argv[arg] +#define VALUE (ARGV + 2) +#define NUMBER strtoul(VALUE, NULL, 0) + +typedef struct { + uint32_t start_code; // B instruction + uint8_t logo[0xA0 - 0x04]; // logo data + uint8_t title[0xC]; // game title name + uint32_t game_code; // + uint16_t maker_code; // + uint8_t fixed; // 0x96 + uint8_t unit_code; // 0x00 + uint8_t device_type; // 0x00 + uint8_t unused[7]; // + uint8_t game_version; // 0x00 + uint8_t complement; // 800000A0..800000BC + uint16_t checksum; // 0x0000 } Header; - Header header; unsigned short checksum_without_header = 0; -const Header good_header = -{ +const Header good_header = { // start_code 0xEA00002E, // logo - { 0x24,0xFF,0xAE,0x51,0x69,0x9A,0xA2,0x21,0x3D,0x84,0x82,0x0A,0x84,0xE4,0x09,0xAD, - 0x11,0x24,0x8B,0x98,0xC0,0x81,0x7F,0x21,0xA3,0x52,0xBE,0x19,0x93,0x09,0xCE,0x20, - 0x10,0x46,0x4A,0x4A,0xF8,0x27,0x31,0xEC,0x58,0xC7,0xE8,0x33,0x82,0xE3,0xCE,0xBF, - 0x85,0xF4,0xDF,0x94,0xCE,0x4B,0x09,0xC1,0x94,0x56,0x8A,0xC0,0x13,0x72,0xA7,0xFC, - 0x9F,0x84,0x4D,0x73,0xA3,0xCA,0x9A,0x61,0x58,0x97,0xA3,0x27,0xFC,0x03,0x98,0x76, - 0x23,0x1D,0xC7,0x61,0x03,0x04,0xAE,0x56,0xBF,0x38,0x84,0x00,0x40,0xA7,0x0E,0xFD, - 0xFF,0x52,0xFE,0x03,0x6F,0x95,0x30,0xF1,0x97,0xFB,0xC0,0x85,0x60,0xD6,0x80,0x25, - 0xA9,0x63,0xBE,0x03,0x01,0x4E,0x38,0xE2,0xF9,0xA2,0x34,0xFF,0xBB,0x3E,0x03,0x44, - 0x78,0x00,0x90,0xCB,0x88,0x11,0x3A,0x94,0x65,0xC0,0x7C,0x63,0x87,0xF0,0x3C,0xAF, - 0xD6,0x25,0xE4,0x8B,0x38,0x0A,0xAC,0x72,0x21,0xD4,0xF8,0x07 } , + { 0x24, 0xFF, 0xAE, 0x51, 0x69, 0x9A, 0xA2, 0x21, 0x3D, 0x84, 0x82, 0x0A, 0x84, 0xE4, 0x09, 0xAD, 0x11, 0x24, + 0x8B, 0x98, 0xC0, 0x81, 0x7F, 0x21, 0xA3, 0x52, 0xBE, 0x19, 0x93, 0x09, 0xCE, 0x20, 0x10, 0x46, 0x4A, 0x4A, + 0xF8, 0x27, 0x31, 0xEC, 0x58, 0xC7, 0xE8, 0x33, 0x82, 0xE3, 0xCE, 0xBF, 0x85, 0xF4, 0xDF, 0x94, 0xCE, 0x4B, + 0x09, 0xC1, 0x94, 0x56, 0x8A, 0xC0, 0x13, 0x72, 0xA7, 0xFC, 0x9F, 0x84, 0x4D, 0x73, 0xA3, 0xCA, 0x9A, 0x61, + 0x58, 0x97, 0xA3, 0x27, 0xFC, 0x03, 0x98, 0x76, 0x23, 0x1D, 0xC7, 0x61, 0x03, 0x04, 0xAE, 0x56, 0xBF, 0x38, + 0x84, 0x00, 0x40, 0xA7, 0x0E, 0xFD, 0xFF, 0x52, 0xFE, 0x03, 0x6F, 0x95, 0x30, 0xF1, 0x97, 0xFB, 0xC0, 0x85, + 0x60, 0xD6, 0x80, 0x25, 0xA9, 0x63, 0xBE, 0x03, 0x01, 0x4E, 0x38, 0xE2, 0xF9, 0xA2, 0x34, 0xFF, 0xBB, 0x3E, + 0x03, 0x44, 0x78, 0x00, 0x90, 0xCB, 0x88, 0x11, 0x3A, 0x94, 0x65, 0xC0, 0x7C, 0x63, 0x87, 0xF0, 0x3C, 0xAF, + 0xD6, 0x25, 0xE4, 0x8B, 0x38, 0x0A, 0xAC, 0x72, 0x21, 0xD4, 0xF8, 0x07 }, // title - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // game code 0x00000000, // maker code @@ -105,7 +102,7 @@ const Header good_header = // device type 0x00, // unused - { 0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // game version 0x00, // complement @@ -122,32 +119,30 @@ char HeaderComplement() { int n; char c = 0; - char *p = (char *)&header + 0xA0; - for (n=0; n<0xBD-0xA0; n++) - { + char* p = (char*)&header + 0xA0; + for (n = 0; n < 0xBD - 0xA0; n++) { c += *p++; } - return -(0x19+c); + return -(0x19 + c); } - //--------------------------------------------------------------------------------- -int main(int argc, char *argv[]) +int main(int argc, char* argv[]) //--------------------------------------------------------------------------------- { int arg; - char *argfile = 0; - FILE *infile; + char* argfile = 0; + FILE* infile; int silent = 0; int schedule_pad = 0; - int size,bit; + int size, bit; // show syntax - if (argc <= 1) - { - printf("GBA ROM fixer v"VER" by Dark Fader / BlackThunder / WinterMute / Diegoisawesome \n"); - printf("Syntax: gbafix <rom.gba> [-p] [-t[title]] [-c<game_code>] [-m<maker_code>] [-r<version>] [-d<debug>] [--silent]\n"); + if (argc <= 1) { + printf("GBA ROM fixer v" VER " by Dark Fader / BlackThunder / WinterMute / Diegoisawesome \n"); + printf("Syntax: gbafix <rom.gba> [-p] [-t[title]] [-c<game_code>] [-m<maker_code>] [-r<version>] [-d<debug>] " + "[--silent]\n"); printf("\n"); printf("parameters:\n"); printf(" -p Pad to next exact power of 2. No minimum size!\n"); @@ -161,15 +156,17 @@ int main(int argc, char *argv[]) } // get filename - for (arg=1; arg<argc; arg++) - { - if (ARGV[0] != '-') { argfile=ARGV; } - if (strncmp("--silent", &ARGV[0], 7) == 0) { silent = 1; } + for (arg = 1; arg < argc; arg++) { + if (ARGV[0] != '-') { + argfile = ARGV; + } + if (strncmp("--silent", &ARGV[0], 7) == 0) { + silent = 1; + } } // check filename - if (!argfile) - { + if (!argfile) { fprintf(stderr, "Filename needed!\n"); return -1; } @@ -178,21 +175,28 @@ int main(int argc, char *argv[]) // read file infile = fopen(argfile, "r+b"); - if (!infile) { fprintf(stderr, "Error opening input file!\n"); return -1; } + if (!infile) { + fprintf(stderr, "Error opening input file!\n"); + return -1; + } fseek(infile, sh_offset, SEEK_SET); fread(&header, sizeof(header), 1, infile); // elf check Elf32_Shdr secHeader; if (memcmp(&header, ELFMAG, 4) == 0) { - Elf32_Ehdr *elfHeader = (Elf32_Ehdr *)&header; + Elf32_Ehdr* elfHeader = (Elf32_Ehdr*)&header; fseek(infile, elfHeader->e_shoff, SEEK_SET); int i; for (i = 0; i < elfHeader->e_shnum; i++) { fread(&secHeader, sizeof(Elf32_Shdr), 1, infile); - if (secHeader.sh_type == SHT_PROGBITS && secHeader.sh_addr == elfHeader->e_entry) break; + if (secHeader.sh_type == SHT_PROGBITS && secHeader.sh_addr == elfHeader->e_entry) + break; + } + if (i == elfHeader->e_shnum) { + fprintf(stderr, "Error finding entry point!\n"); + return 1; } - if (i == elfHeader->e_shnum) { fprintf(stderr, "Error finding entry point!\n"); return 1; } fseek(infile, secHeader.sh_offset, SEEK_SET); sh_offset = secHeader.sh_offset; fread(&header, sizeof(header), 1, infile); @@ -204,82 +208,91 @@ int main(int argc, char *argv[]) memcpy(&header.device_type, &good_header.device_type, sizeof(header.device_type)); // parse command line - for (arg=1; arg<argc; arg++) - { - if (ARGV[0] == '-') - { - switch (ARGV[1]) - { - case 'p': // pad + for (arg = 1; arg < argc; arg++) { + if (ARGV[0] == '-') { + switch (ARGV[1]) { + case 'p': // pad { schedule_pad = 1; break; } - case 't': // title + case 't': // title { char title[256]; memset(title, 0, sizeof(title)); - if (VALUE[0]) - { + if (VALUE[0]) { strncpy(title, VALUE, sizeof(header.title)); - } - else - { + } else { // use filename - char s[256], *begin=s, *t; strcpy(s, argfile); - t = strrchr(s, '\\'); if (t) begin = t+1; - t = strrchr(s, '/'); if (t) begin = t+1; - t = strrchr(s, '.'); if (t) *t = 0; + char s[256], *begin = s, *t; + strcpy(s, argfile); + t = strrchr(s, '\\'); + if (t) + begin = t + 1; + t = strrchr(s, '/'); + if (t) + begin = t + 1; + t = strrchr(s, '.'); + if (t) + *t = 0; strncpy(title, begin, sizeof(header.title)); - if (!silent) printf("%s\n",begin); + if (!silent) + printf("%s\n", begin); } - memcpy(header.title, title, sizeof(header.title)); // copy + memcpy(header.title, title, sizeof(header.title)); // copy break; } - case 'c': // game code + case 'c': // game code { - //if (!VALUE[0]) { fprintf(stderr, "Need value for %s\n", ARGV); break; } - //header.game_code = NUMBER; - header.game_code = VALUE[0] | VALUE[1]<<8 | VALUE[2]<<16 | VALUE[3]<<24; + // if (!VALUE[0]) { fprintf(stderr, "Need value for %s\n", ARGV); break; } + // header.game_code = NUMBER; + header.game_code = VALUE[0] | VALUE[1] << 8 | VALUE[2] << 16 | VALUE[3] << 24; break; } - case 'm': // maker code + case 'm': // maker code { - //if (!VALUE[0]) { fprintf(stderr, "Need value for %s\n", ARGV); break; } - //header.maker_code = (unsigned short)NUMBER; - header.maker_code = VALUE[0] | VALUE[1]<<8; + // if (!VALUE[0]) { fprintf(stderr, "Need value for %s\n", ARGV); break; } + // header.maker_code = (unsigned short)NUMBER; + header.maker_code = VALUE[0] | VALUE[1] << 8; break; } - case 'v': // ignored, compatability with other gbafix + case 'v': // ignored, compatability with other gbafix { break; } - case 'r': // version + case 'r': // version { - if (!VALUE[0]) { fprintf(stderr, "Need value for %s\n", ARGV); break; } + if (!VALUE[0]) { + fprintf(stderr, "Need value for %s\n", ARGV); + break; + } header.game_version = (unsigned char)NUMBER; break; } - case 'd': // debug + case 'd': // debug { - if (!VALUE[0]) { fprintf(stderr, "Need value for %s\n", ARGV); break; } - header.logo[0x9C-0x04] = 0xA5; // debug enable - header.device_type = (unsigned char)((NUMBER & 1) << 7); // debug handler entry point + if (!VALUE[0]) { + fprintf(stderr, "Need value for %s\n", ARGV); + break; + } + header.logo[0x9C - 0x04] = 0xA5; // debug enable + header.device_type = (unsigned char)((NUMBER & 1) << 7); // debug handler entry point break; } - case '-': // long arguments + case '-': // long arguments { - if (strncmp("silent", &ARGV[2], 6) == 0) { continue; } + if (strncmp("silent", &ARGV[2], 6) == 0) { + continue; + } break; } - default: - { + default: { printf("Invalid option: %s\n", ARGV); } } @@ -288,9 +301,9 @@ int main(int argc, char *argv[]) // update complement check & total checksum header.complement = 0; - header.checksum = 0; // must be 0 + header.checksum = 0; // must be 0 header.complement = HeaderComplement(); - //header.checksum = checksum_without_header + HeaderChecksum(); + // header.checksum = checksum_without_header + HeaderChecksum(); if (schedule_pad) { if (sh_offset != 0) { @@ -298,11 +311,13 @@ int main(int argc, char *argv[]) } else { fseek(infile, 0, SEEK_END); size = ftell(infile); - for (bit=31; bit>=0; bit--) if (size & (1<<bit)) break; - if (size != (1<<bit)) - { - int todo = (1<<(bit+1)) - size; - while (todo--) fputc(0xFF, infile); + for (bit = 31; bit >= 0; bit--) + if (size & (1 << bit)) + break; + if (size != (1 << bit)) { + int todo = (1 << (bit + 1)) - size; + while (todo--) + fputc(0xFF, infile); } } } @@ -311,7 +326,8 @@ int main(int argc, char *argv[]) fwrite(&header, sizeof(header), 1, infile); fclose(infile); - if (!silent) printf("ROM fixed!\n"); + if (!silent) + printf("ROM fixed!\n"); return 0; } diff --git a/tools/src/gbagfx/convert_png.c b/tools/src/gbagfx/convert_png.c index cdfa39a7..61760836 100755..100644 --- a/tools/src/gbagfx/convert_png.c +++ b/tools/src/gbagfx/convert_png.c @@ -7,9 +7,8 @@ #include "convert_png.h" #include "gfx.h" -static FILE *PngReadOpen(char *path, png_structp *pngStruct, png_infop *pngInfo) -{ - FILE *fp = fopen(path, "rb"); +static FILE* PngReadOpen(char* path, png_structp* pngStruct, png_infop* pngInfo) { + FILE* fp = fopen(path, "rb"); if (fp == NULL) FATAL_ERROR("Failed to open \"%s\" for reading.\n", path); @@ -45,31 +44,27 @@ static FILE *PngReadOpen(char *path, png_structp *pngStruct, png_infop *pngInfo) return fp; } -static unsigned char *ConvertBitDepth(unsigned char *src, int srcBitDepth, int destBitDepth, int numPixels) -{ +static unsigned char* ConvertBitDepth(unsigned char* src, int srcBitDepth, int destBitDepth, int numPixels) { // Round the number of bits up to the next 8 and divide by 8 to get the number of bytes. int srcSize = ((numPixels * srcBitDepth + 7) & ~7) / 8; int destSize = ((numPixels * destBitDepth + 7) & ~7) / 8; - unsigned char *output = calloc(destSize, 1); - unsigned char *dest = output; + unsigned char* output = calloc(destSize, 1); + unsigned char* dest = output; int i; int j; int destBit = 8 - destBitDepth; - for (i = 0; i < srcSize; i++) - { + for (i = 0; i < srcSize; i++) { unsigned char srcByte = src[i]; - for (j = 8 - srcBitDepth; j >= 0; j -= srcBitDepth) - { + for (j = 8 - srcBitDepth; j >= 0; j -= srcBitDepth) { unsigned char pixel = (srcByte >> j) % (1 << srcBitDepth); if (pixel >= (1 << destBitDepth)) FATAL_ERROR("Image exceeds the maximum color value for a %ibpp image.\n", destBitDepth); *dest |= pixel << destBit; destBit -= destBitDepth; - if (destBit < 0) - { + if (destBit < 0) { dest++; destBit = 8 - destBitDepth; } @@ -79,12 +74,11 @@ static unsigned char *ConvertBitDepth(unsigned char *src, int srcBitDepth, int d return output; } -void ReadPng(char *path, struct Image *image) -{ +void ReadPng(char* path, struct Image* image) { png_structp png_ptr; png_infop info_ptr; - FILE *fp = PngReadOpen(path, &png_ptr, &info_ptr); + FILE* fp = PngReadOpen(path, &png_ptr, &info_ptr); int bit_depth = png_get_bit_depth(png_ptr, info_ptr); @@ -125,9 +119,8 @@ void ReadPng(char *path, struct Image *image) free(row_pointers); fclose(fp); - if (bit_depth != image->bitDepth) - { - unsigned char *src = image->pixels; + if (bit_depth != image->bitDepth) { + unsigned char* src = image->pixels; if (bit_depth != 1 && bit_depth != 2 && bit_depth != 4 && bit_depth != 8) FATAL_ERROR("Bit depth of image must be 1, 2, 4, or 8.\n"); @@ -137,14 +130,13 @@ void ReadPng(char *path, struct Image *image) } } -void ReadPngPalette(char *path, struct Palette *palette) -{ +void ReadPngPalette(char* path, struct Palette* palette) { png_structp png_ptr; png_infop info_ptr; png_colorp colors; int numColors; - FILE *fp = PngReadOpen(path, &png_ptr, &info_ptr); + FILE* fp = PngReadOpen(path, &png_ptr, &info_ptr); if (png_get_color_type(png_ptr, info_ptr) != PNG_COLOR_TYPE_PALETTE) FATAL_ERROR("The image \"%s\" does not contain a palette.\n", path); @@ -167,8 +159,7 @@ void ReadPngPalette(char *path, struct Palette *palette) fclose(fp); } -void SetPngPalette(png_structp png_ptr, png_infop info_ptr, struct Palette *palette) -{ +void SetPngPalette(png_structp png_ptr, png_infop info_ptr, struct Palette* palette) { png_colorp colors = malloc(palette->numColors * sizeof(png_color)); if (colors == NULL) @@ -185,9 +176,8 @@ void SetPngPalette(png_structp png_ptr, png_infop info_ptr, struct Palette *pale free(colors); } -void WritePng(char *path, struct Image *image) -{ - FILE *fp = fopen(path, "wb"); +void WritePng(char* path, struct Image* image) { + FILE* fp = fopen(path, "wb"); if (fp == NULL) FATAL_ERROR("Failed to open \"%s\" for writing.\n", path); @@ -212,9 +202,8 @@ void WritePng(char *path, struct Image *image) int color_type = image->hasPalette ? PNG_COLOR_TYPE_PALETTE : PNG_COLOR_TYPE_GRAY; - png_set_IHDR(png_ptr, info_ptr, image->width, image->height, - image->bitDepth, color_type, PNG_INTERLACE_NONE, - PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); + png_set_IHDR(png_ptr, info_ptr, image->width, image->height, image->bitDepth, color_type, PNG_INTERLACE_NONE, + PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); if (image->hasPalette) { SetPngPalette(png_ptr, info_ptr, &image->palette); diff --git a/tools/src/gbagfx/convert_png.h b/tools/src/gbagfx/convert_png.h index caf081b7..d45531ed 100755..100644 --- a/tools/src/gbagfx/convert_png.h +++ b/tools/src/gbagfx/convert_png.h @@ -5,8 +5,8 @@ #include "gfx.h" -void ReadPng(char *path, struct Image *image); -void WritePng(char *path, struct Image *image); -void ReadPngPalette(char *path, struct Palette *palette); +void ReadPng(char* path, struct Image* image); +void WritePng(char* path, struct Image* image); +void ReadPngPalette(char* path, struct Palette* palette); #endif // CONVERT_PNG_H diff --git a/tools/src/gbagfx/font.c b/tools/src/gbagfx/font.c index 0dd6fbc3..366b78b3 100755..100644 --- a/tools/src/gbagfx/font.c +++ b/tools/src/gbagfx/font.c @@ -10,317 +10,306 @@ #include "util.h" unsigned char gFontPalette[][3] = { - {0x90, 0xC8, 0xFF}, // bg (saturated blue that contrasts well with the shadow color) - {0x38, 0x38, 0x38}, // fg (dark grey) - {0xD8, 0xD8, 0xD8}, // shadow (light grey) - {0xFF, 0xFF, 0xFF} // box (white) + { 0x90, 0xC8, 0xFF }, // bg (saturated blue that contrasts well with the shadow color) + { 0x38, 0x38, 0x38 }, // fg (dark grey) + { 0xD8, 0xD8, 0xD8 }, // shadow (light grey) + { 0xFF, 0xFF, 0xFF } // box (white) }; -static void ConvertFromLatinFont(unsigned char *src, unsigned char *dest, unsigned int numRows) -{ - unsigned int srcPixelsOffset = 0; +static void ConvertFromLatinFont(unsigned char* src, unsigned char* dest, unsigned int numRows) { + unsigned int srcPixelsOffset = 0; - for (unsigned int row = 0; row < numRows; row++) { - for (unsigned int column = 0; column < 16; column++) { - for (unsigned int glyphTile = 0; glyphTile < 4; glyphTile++) { - unsigned int pixelsX = (column * 16) + ((glyphTile & 1) * 8); + for (unsigned int row = 0; row < numRows; row++) { + for (unsigned int column = 0; column < 16; column++) { + for (unsigned int glyphTile = 0; glyphTile < 4; glyphTile++) { + unsigned int pixelsX = (column * 16) + ((glyphTile & 1) * 8); - for (unsigned int i = 0; i < 8; i++) { - unsigned int pixelsY = (row * 16) + ((glyphTile >> 1) * 8) + i; - unsigned int destPixelsOffset = (pixelsY * 64) + (pixelsX / 4); + for (unsigned int i = 0; i < 8; i++) { + unsigned int pixelsY = (row * 16) + ((glyphTile >> 1) * 8) + i; + unsigned int destPixelsOffset = (pixelsY * 64) + (pixelsX / 4); - dest[destPixelsOffset] = src[srcPixelsOffset + 1]; - dest[destPixelsOffset + 1] = src[srcPixelsOffset]; + dest[destPixelsOffset] = src[srcPixelsOffset + 1]; + dest[destPixelsOffset + 1] = src[srcPixelsOffset]; - srcPixelsOffset += 2; - } - } - } - } + srcPixelsOffset += 2; + } + } + } + } } -static void ConvertToLatinFont(unsigned char *src, unsigned char *dest, unsigned int numRows) -{ - unsigned int destPixelsOffset = 0; +static void ConvertToLatinFont(unsigned char* src, unsigned char* dest, unsigned int numRows) { + unsigned int destPixelsOffset = 0; - for (unsigned int row = 0; row < numRows; row++) { - for (unsigned int column = 0; column < 16; column++) { - for (unsigned int glyphTile = 0; glyphTile < 4; glyphTile++) { - unsigned int pixelsX = (column * 16) + ((glyphTile & 1) * 8); + for (unsigned int row = 0; row < numRows; row++) { + for (unsigned int column = 0; column < 16; column++) { + for (unsigned int glyphTile = 0; glyphTile < 4; glyphTile++) { + unsigned int pixelsX = (column * 16) + ((glyphTile & 1) * 8); - for (unsigned int i = 0; i < 8; i++) { - unsigned int pixelsY = (row * 16) + ((glyphTile >> 1) * 8) + i; - unsigned int srcPixelsOffset = (pixelsY * 64) + (pixelsX / 4); + for (unsigned int i = 0; i < 8; i++) { + unsigned int pixelsY = (row * 16) + ((glyphTile >> 1) * 8) + i; + unsigned int srcPixelsOffset = (pixelsY * 64) + (pixelsX / 4); - dest[destPixelsOffset] = src[srcPixelsOffset + 1]; - dest[destPixelsOffset + 1] = src[srcPixelsOffset]; + dest[destPixelsOffset] = src[srcPixelsOffset + 1]; + dest[destPixelsOffset + 1] = src[srcPixelsOffset]; - destPixelsOffset += 2; - } - } - } - } + destPixelsOffset += 2; + } + } + } + } } -static void ConvertFromHalfwidthJapaneseFont(unsigned char *src, unsigned char *dest, unsigned int numRows) -{ - for (unsigned int row = 0; row < numRows; row++) { - for (unsigned int column = 0; column < 16; column++) { - unsigned int glyphIndex = (row * 16) + column; - - for (unsigned int glyphTile = 0; glyphTile < 2; glyphTile++) { - unsigned int pixelsX = column * 8; - unsigned int srcPixelsOffset = 512 * (glyphIndex >> 4) + 16 * (glyphIndex & 0xF) + 256 * glyphTile; - - for (unsigned int i = 0; i < 8; i++) { - unsigned int pixelsY = (row * 16) + (glyphTile * 8) + i; - unsigned int destPixelsOffset = (pixelsY * 32) + (pixelsX / 4); - - dest[destPixelsOffset] = src[srcPixelsOffset + 1]; - dest[destPixelsOffset + 1] = src[srcPixelsOffset]; - - srcPixelsOffset += 2; - } - } - } - } +static void ConvertFromHalfwidthJapaneseFont(unsigned char* src, unsigned char* dest, unsigned int numRows) { + for (unsigned int row = 0; row < numRows; row++) { + for (unsigned int column = 0; column < 16; column++) { + unsigned int glyphIndex = (row * 16) + column; + + for (unsigned int glyphTile = 0; glyphTile < 2; glyphTile++) { + unsigned int pixelsX = column * 8; + unsigned int srcPixelsOffset = 512 * (glyphIndex >> 4) + 16 * (glyphIndex & 0xF) + 256 * glyphTile; + + for (unsigned int i = 0; i < 8; i++) { + unsigned int pixelsY = (row * 16) + (glyphTile * 8) + i; + unsigned int destPixelsOffset = (pixelsY * 32) + (pixelsX / 4); + + dest[destPixelsOffset] = src[srcPixelsOffset + 1]; + dest[destPixelsOffset + 1] = src[srcPixelsOffset]; + + srcPixelsOffset += 2; + } + } + } + } } -static void ConvertToHalfwidthJapaneseFont(unsigned char *src, unsigned char *dest, unsigned int numRows) -{ - for (unsigned int row = 0; row < numRows; row++) { - for (unsigned int column = 0; column < 16; column++) { - unsigned int glyphIndex = (row * 16) + column; +static void ConvertToHalfwidthJapaneseFont(unsigned char* src, unsigned char* dest, unsigned int numRows) { + for (unsigned int row = 0; row < numRows; row++) { + for (unsigned int column = 0; column < 16; column++) { + unsigned int glyphIndex = (row * 16) + column; - for (unsigned int glyphTile = 0; glyphTile < 2; glyphTile++) { - unsigned int pixelsX = column * 8; - unsigned int destPixelsOffset = 512 * (glyphIndex >> 4) + 16 * (glyphIndex & 0xF) + 256 * glyphTile; + for (unsigned int glyphTile = 0; glyphTile < 2; glyphTile++) { + unsigned int pixelsX = column * 8; + unsigned int destPixelsOffset = 512 * (glyphIndex >> 4) + 16 * (glyphIndex & 0xF) + 256 * glyphTile; - for (unsigned int i = 0; i < 8; i++) { - unsigned int pixelsY = (row * 16) + (glyphTile * 8) + i; - unsigned int srcPixelsOffset = (pixelsY * 32) + (pixelsX / 4); + for (unsigned int i = 0; i < 8; i++) { + unsigned int pixelsY = (row * 16) + (glyphTile * 8) + i; + unsigned int srcPixelsOffset = (pixelsY * 32) + (pixelsX / 4); - dest[destPixelsOffset] = src[srcPixelsOffset + 1]; - dest[destPixelsOffset + 1] = src[srcPixelsOffset]; + dest[destPixelsOffset] = src[srcPixelsOffset + 1]; + dest[destPixelsOffset + 1] = src[srcPixelsOffset]; - destPixelsOffset += 2; - } - } - } - } + destPixelsOffset += 2; + } + } + } + } } -static void ConvertFromFullwidthJapaneseFont(unsigned char *src, unsigned char *dest, unsigned int numRows) -{ - for (unsigned int row = 0; row < numRows; row++) { - for (unsigned int column = 0; column < 16; column++) { - unsigned int glyphIndex = (row * 16) + column; +static void ConvertFromFullwidthJapaneseFont(unsigned char* src, unsigned char* dest, unsigned int numRows) { + for (unsigned int row = 0; row < numRows; row++) { + for (unsigned int column = 0; column < 16; column++) { + unsigned int glyphIndex = (row * 16) + column; - for (unsigned int glyphTile = 0; glyphTile < 4; glyphTile++) { - unsigned int pixelsX = (column * 16) + ((glyphTile & 1) * 8); - unsigned int srcPixelsOffset = 512 * (glyphIndex >> 3) + 32 * (glyphIndex & 7) + 256 * (glyphTile >> 1) + 16 * (glyphTile & 1); + for (unsigned int glyphTile = 0; glyphTile < 4; glyphTile++) { + unsigned int pixelsX = (column * 16) + ((glyphTile & 1) * 8); + unsigned int srcPixelsOffset = + 512 * (glyphIndex >> 3) + 32 * (glyphIndex & 7) + 256 * (glyphTile >> 1) + 16 * (glyphTile & 1); - for (unsigned int i = 0; i < 8; i++) { - unsigned int pixelsY = (row * 16) + ((glyphTile >> 1) * 8) + i; - unsigned int destPixelsOffset = (pixelsY * 64) + (pixelsX / 4); + for (unsigned int i = 0; i < 8; i++) { + unsigned int pixelsY = (row * 16) + ((glyphTile >> 1) * 8) + i; + unsigned int destPixelsOffset = (pixelsY * 64) + (pixelsX / 4); - dest[destPixelsOffset] = src[srcPixelsOffset + 1]; - dest[destPixelsOffset + 1] = src[srcPixelsOffset]; + dest[destPixelsOffset] = src[srcPixelsOffset + 1]; + dest[destPixelsOffset + 1] = src[srcPixelsOffset]; - srcPixelsOffset += 2; - } - } - } - } + srcPixelsOffset += 2; + } + } + } + } } -static void ConvertToFullwidthJapaneseFont(unsigned char *src, unsigned char *dest, unsigned int numRows) -{ - for (unsigned int row = 0; row < numRows; row++) { - for (unsigned int column = 0; column < 16; column++) { - unsigned int glyphIndex = (row * 16) + column; +static void ConvertToFullwidthJapaneseFont(unsigned char* src, unsigned char* dest, unsigned int numRows) { + for (unsigned int row = 0; row < numRows; row++) { + for (unsigned int column = 0; column < 16; column++) { + unsigned int glyphIndex = (row * 16) + column; - for (unsigned int glyphTile = 0; glyphTile < 4; glyphTile++) { - unsigned int pixelsX = (column * 16) + ((glyphTile & 1) * 8); - unsigned int destPixelsOffset = 512 * (glyphIndex >> 3) + 32 * (glyphIndex & 7) + 256 * (glyphTile >> 1) + 16 * (glyphTile & 1); + for (unsigned int glyphTile = 0; glyphTile < 4; glyphTile++) { + unsigned int pixelsX = (column * 16) + ((glyphTile & 1) * 8); + unsigned int destPixelsOffset = + 512 * (glyphIndex >> 3) + 32 * (glyphIndex & 7) + 256 * (glyphTile >> 1) + 16 * (glyphTile & 1); - for (unsigned int i = 0; i < 8; i++) { - unsigned int pixelsY = (row * 16) + ((glyphTile >> 1) * 8) + i; - unsigned int srcPixelsOffset = (pixelsY * 64) + (pixelsX / 4); + for (unsigned int i = 0; i < 8; i++) { + unsigned int pixelsY = (row * 16) + ((glyphTile >> 1) * 8) + i; + unsigned int srcPixelsOffset = (pixelsY * 64) + (pixelsX / 4); - dest[destPixelsOffset] = src[srcPixelsOffset + 1]; - dest[destPixelsOffset + 1] = src[srcPixelsOffset]; + dest[destPixelsOffset] = src[srcPixelsOffset + 1]; + dest[destPixelsOffset + 1] = src[srcPixelsOffset]; - destPixelsOffset += 2; - } - } - } - } + destPixelsOffset += 2; + } + } + } + } } -static void SetFontPalette(struct Image *image) -{ - image->hasPalette = true; +static void SetFontPalette(struct Image* image) { + image->hasPalette = true; - image->palette.numColors = 4; + image->palette.numColors = 4; - for (int i = 0; i < image->palette.numColors; i++) { - image->palette.colors[i].red = gFontPalette[i][0]; - image->palette.colors[i].green = gFontPalette[i][1]; - image->palette.colors[i].blue = gFontPalette[i][2]; - } + for (int i = 0; i < image->palette.numColors; i++) { + image->palette.colors[i].red = gFontPalette[i][0]; + image->palette.colors[i].green = gFontPalette[i][1]; + image->palette.colors[i].blue = gFontPalette[i][2]; + } - image->hasTransparency = false; + image->hasTransparency = false; } -void ReadLatinFont(char *path, struct Image *image) -{ - int fileSize; - unsigned char *buffer = ReadWholeFile(path, &fileSize); +void ReadLatinFont(char* path, struct Image* image) { + int fileSize; + unsigned char* buffer = ReadWholeFile(path, &fileSize); - int numGlyphs = fileSize / 64; + int numGlyphs = fileSize / 64; - if (numGlyphs % 16 != 0) - FATAL_ERROR("The number of glyphs (%d) is not a multiple of 16.\n", numGlyphs); + if (numGlyphs % 16 != 0) + FATAL_ERROR("The number of glyphs (%d) is not a multiple of 16.\n", numGlyphs); - int numRows = numGlyphs / 16; + int numRows = numGlyphs / 16; - image->width = 256; - image->height = numRows * 16; - image->bitDepth = 2; - image->pixels = malloc(fileSize); + image->width = 256; + image->height = numRows * 16; + image->bitDepth = 2; + image->pixels = malloc(fileSize); - if (image->pixels == NULL) - FATAL_ERROR("Failed to allocate memory for font.\n"); + if (image->pixels == NULL) + FATAL_ERROR("Failed to allocate memory for font.\n"); - ConvertFromLatinFont(buffer, image->pixels, numRows); + ConvertFromLatinFont(buffer, image->pixels, numRows); - free(buffer); + free(buffer); - SetFontPalette(image); + SetFontPalette(image); } -void WriteLatinFont(char *path, struct Image *image) -{ - if (image->width != 256) - FATAL_ERROR("The width of the font image (%d) is not 256.\n", image->width); +void WriteLatinFont(char* path, struct Image* image) { + if (image->width != 256) + FATAL_ERROR("The width of the font image (%d) is not 256.\n", image->width); - if (image->height % 16 != 0) - FATAL_ERROR("The height of the font image (%d) is not a multiple of 16.\n", image->height); + if (image->height % 16 != 0) + FATAL_ERROR("The height of the font image (%d) is not a multiple of 16.\n", image->height); - int numRows = image->height / 16; - int bufferSize = numRows * 16 * 64; - unsigned char *buffer = malloc(bufferSize); + int numRows = image->height / 16; + int bufferSize = numRows * 16 * 64; + unsigned char* buffer = malloc(bufferSize); - if (buffer == NULL) - FATAL_ERROR("Failed to allocate memory for font.\n"); + if (buffer == NULL) + FATAL_ERROR("Failed to allocate memory for font.\n"); - ConvertToLatinFont(image->pixels, buffer, numRows); + ConvertToLatinFont(image->pixels, buffer, numRows); - WriteWholeFile(path, buffer, bufferSize); + WriteWholeFile(path, buffer, bufferSize); - free(buffer); + free(buffer); } -void ReadHalfwidthJapaneseFont(char *path, struct Image *image) -{ - int fileSize; - unsigned char *buffer = ReadWholeFile(path, &fileSize); +void ReadHalfwidthJapaneseFont(char* path, struct Image* image) { + int fileSize; + unsigned char* buffer = ReadWholeFile(path, &fileSize); + + int glyphSize = 32; - int glyphSize = 32; + if (fileSize % glyphSize != 0) + FATAL_ERROR("The file size (%d) is not a multiple of %d.\n", fileSize, glyphSize); - if (fileSize % glyphSize != 0) - FATAL_ERROR("The file size (%d) is not a multiple of %d.\n", fileSize, glyphSize); + int numGlyphs = fileSize / glyphSize; - int numGlyphs = fileSize / glyphSize; - - if (numGlyphs % 16 != 0) - FATAL_ERROR("The number of glyphs (%d) is not a multiple of 16.\n", numGlyphs); + if (numGlyphs % 16 != 0) + FATAL_ERROR("The number of glyphs (%d) is not a multiple of 16.\n", numGlyphs); - int numRows = numGlyphs / 16; + int numRows = numGlyphs / 16; - image->width = 128; - image->height = numRows * 16; - image->bitDepth = 2; - image->pixels = malloc(fileSize); + image->width = 128; + image->height = numRows * 16; + image->bitDepth = 2; + image->pixels = malloc(fileSize); - if (image->pixels == NULL) - FATAL_ERROR("Failed to allocate memory for font.\n"); + if (image->pixels == NULL) + FATAL_ERROR("Failed to allocate memory for font.\n"); - ConvertFromHalfwidthJapaneseFont(buffer, image->pixels, numRows); + ConvertFromHalfwidthJapaneseFont(buffer, image->pixels, numRows); - free(buffer); + free(buffer); - SetFontPalette(image); + SetFontPalette(image); } -void WriteHalfwidthJapaneseFont(char *path, struct Image *image) -{ - if (image->width != 128) - FATAL_ERROR("The width of the font image (%d) is not 128.\n", image->width); +void WriteHalfwidthJapaneseFont(char* path, struct Image* image) { + if (image->width != 128) + FATAL_ERROR("The width of the font image (%d) is not 128.\n", image->width); - if (image->height % 16 != 0) - FATAL_ERROR("The height of the font image (%d) is not a multiple of 16.\n", image->height); + if (image->height % 16 != 0) + FATAL_ERROR("The height of the font image (%d) is not a multiple of 16.\n", image->height); - int numRows = image->height / 16; - int bufferSize = numRows * 16 * 32; - unsigned char *buffer = malloc(bufferSize); + int numRows = image->height / 16; + int bufferSize = numRows * 16 * 32; + unsigned char* buffer = malloc(bufferSize); - if (buffer == NULL) - FATAL_ERROR("Failed to allocate memory for font.\n"); + if (buffer == NULL) + FATAL_ERROR("Failed to allocate memory for font.\n"); - ConvertToHalfwidthJapaneseFont(image->pixels, buffer, numRows); + ConvertToHalfwidthJapaneseFont(image->pixels, buffer, numRows); - WriteWholeFile(path, buffer, bufferSize); + WriteWholeFile(path, buffer, bufferSize); - free(buffer); + free(buffer); } -void ReadFullwidthJapaneseFont(char *path, struct Image *image) -{ - int fileSize; - unsigned char *buffer = ReadWholeFile(path, &fileSize); +void ReadFullwidthJapaneseFont(char* path, struct Image* image) { + int fileSize; + unsigned char* buffer = ReadWholeFile(path, &fileSize); - int numGlyphs = fileSize / 64; + int numGlyphs = fileSize / 64; - if (numGlyphs % 16 != 0) - FATAL_ERROR("The number of glyphs (%d) is not a multiple of 16.\n", numGlyphs); + if (numGlyphs % 16 != 0) + FATAL_ERROR("The number of glyphs (%d) is not a multiple of 16.\n", numGlyphs); - int numRows = numGlyphs / 16; + int numRows = numGlyphs / 16; - image->width = 256; - image->height = numRows * 16; - image->bitDepth = 2; - image->pixels = malloc(fileSize); + image->width = 256; + image->height = numRows * 16; + image->bitDepth = 2; + image->pixels = malloc(fileSize); - if (image->pixels == NULL) - FATAL_ERROR("Failed to allocate memory for font.\n"); + if (image->pixels == NULL) + FATAL_ERROR("Failed to allocate memory for font.\n"); - ConvertFromFullwidthJapaneseFont(buffer, image->pixels, numRows); + ConvertFromFullwidthJapaneseFont(buffer, image->pixels, numRows); - free(buffer); + free(buffer); - SetFontPalette(image); + SetFontPalette(image); } -void WriteFullwidthJapaneseFont(char *path, struct Image *image) -{ - if (image->width != 256) - FATAL_ERROR("The width of the font image (%d) is not 256.\n", image->width); +void WriteFullwidthJapaneseFont(char* path, struct Image* image) { + if (image->width != 256) + FATAL_ERROR("The width of the font image (%d) is not 256.\n", image->width); - if (image->height % 16 != 0) - FATAL_ERROR("The height of the font image (%d) is not a multiple of 16.\n", image->height); + if (image->height % 16 != 0) + FATAL_ERROR("The height of the font image (%d) is not a multiple of 16.\n", image->height); - int numRows = image->height / 16; - int bufferSize = numRows * 16 * 64; - unsigned char *buffer = malloc(bufferSize); + int numRows = image->height / 16; + int bufferSize = numRows * 16 * 64; + unsigned char* buffer = malloc(bufferSize); - if (buffer == NULL) - FATAL_ERROR("Failed to allocate memory for font.\n"); + if (buffer == NULL) + FATAL_ERROR("Failed to allocate memory for font.\n"); - ConvertToFullwidthJapaneseFont(image->pixels, buffer, numRows); + ConvertToFullwidthJapaneseFont(image->pixels, buffer, numRows); - WriteWholeFile(path, buffer, bufferSize); + WriteWholeFile(path, buffer, bufferSize); - free(buffer); + free(buffer); } diff --git a/tools/src/gbagfx/font.h b/tools/src/gbagfx/font.h index 45086d02..9ff03792 100755..100644 --- a/tools/src/gbagfx/font.h +++ b/tools/src/gbagfx/font.h @@ -6,11 +6,11 @@ #include <stdbool.h> #include "gfx.h" -void ReadLatinFont(char *path, struct Image *image); -void WriteLatinFont(char *path, struct Image *image); -void ReadHalfwidthJapaneseFont(char *path, struct Image *image); -void WriteHalfwidthJapaneseFont(char *path, struct Image *image); -void ReadFullwidthJapaneseFont(char *path, struct Image *image); -void WriteFullwidthJapaneseFont(char *path, struct Image *image); +void ReadLatinFont(char* path, struct Image* image); +void WriteLatinFont(char* path, struct Image* image); +void ReadHalfwidthJapaneseFont(char* path, struct Image* image); +void WriteHalfwidthJapaneseFont(char* path, struct Image* image); +void ReadFullwidthJapaneseFont(char* path, struct Image* image); +void WriteFullwidthJapaneseFont(char* path, struct Image* image); #endif // FONT_H diff --git a/tools/src/gbagfx/gfx.c b/tools/src/gbagfx/gfx.c index f927deed..f16dd8ac 100755..100644 --- a/tools/src/gbagfx/gfx.c +++ b/tools/src/gbagfx/gfx.c @@ -8,337 +8,351 @@ #include "gfx.h" #include "util.h" -#define GET_GBA_PAL_RED(x) (((x) >> 0) & 0x1F) -#define GET_GBA_PAL_GREEN(x) (((x) >> 5) & 0x1F) -#define GET_GBA_PAL_BLUE(x) (((x) >> 10) & 0x1F) +#define GET_GBA_PAL_RED(x) (((x) >> 0) & 0x1F) +#define GET_GBA_PAL_GREEN(x) (((x) >> 5) & 0x1F) +#define GET_GBA_PAL_BLUE(x) (((x) >> 10) & 0x1F) #define SET_GBA_PAL(r, g, b) (((b) << 10) | ((g) << 5) | (r)) -#define UPCONVERT_BIT_DEPTH(x) (((x) * 255) / 31) +#define UPCONVERT_BIT_DEPTH(x) (((x)*255) / 31) #define DOWNCONVERT_BIT_DEPTH(x) ((x) / 8) -static void AdvanceMetatilePosition(int *subTileX, int *subTileY, int *metatileX, int *metatileY, int metatilesWide, int metatileWidth, int metatileHeight) -{ - (*subTileX)++; - if (*subTileX == metatileWidth) { - *subTileX = 0; - (*subTileY)++; - if (*subTileY == metatileHeight) { - *subTileY = 0; - (*metatileX)++; - if (*metatileX == metatilesWide) { - *metatileX = 0; - (*metatileY)++; - } - } - } +static void AdvanceMetatilePosition(int* subTileX, int* subTileY, int* metatileX, int* metatileY, int metatilesWide, + int metatileWidth, int metatileHeight) { + (*subTileX)++; + if (*subTileX == metatileWidth) { + *subTileX = 0; + (*subTileY)++; + if (*subTileY == metatileHeight) { + *subTileY = 0; + (*metatileX)++; + if (*metatileX == metatilesWide) { + *metatileX = 0; + (*metatileY)++; + } + } + } } -static void ConvertFromTiles1Bpp(unsigned char *src, unsigned char *dest, int numTiles, int metatilesWide, int metatileWidth, int metatileHeight, bool invertColors) -{ - int subTileX = 0; - int subTileY = 0; - int metatileX = 0; - int metatileY = 0; - int pitch = metatilesWide * metatileWidth; - - for (int i = 0; i < numTiles; i++) { - for (int j = 0; j < 8; j++) { - int destY = (metatileY * metatileHeight + subTileY) * 8 + j; - int destX = metatileX * metatileWidth + subTileX; - unsigned char srcPixelOctet = *src++; - unsigned char *destPixelOctet = &dest[destY * pitch + destX]; - - for (int k = 0; k < 8; k++) { - *destPixelOctet <<= 1; - *destPixelOctet |= (srcPixelOctet & 1) ^ invertColors; - srcPixelOctet >>= 1; - } - } - - AdvanceMetatilePosition(&subTileX, &subTileY, &metatileX, &metatileY, metatilesWide, metatileWidth, metatileHeight); - } +static void ConvertFromTiles1Bpp(unsigned char* src, unsigned char* dest, int numTiles, int metatilesWide, + int metatileWidth, int metatileHeight, bool invertColors) { + int subTileX = 0; + int subTileY = 0; + int metatileX = 0; + int metatileY = 0; + int pitch = metatilesWide * metatileWidth; + + for (int i = 0; i < numTiles; i++) { + for (int j = 0; j < 8; j++) { + int destY = (metatileY * metatileHeight + subTileY) * 8 + j; + int destX = metatileX * metatileWidth + subTileX; + unsigned char srcPixelOctet = *src++; + unsigned char* destPixelOctet = &dest[destY * pitch + destX]; + + for (int k = 0; k < 8; k++) { + *destPixelOctet <<= 1; + *destPixelOctet |= (srcPixelOctet & 1) ^ invertColors; + srcPixelOctet >>= 1; + } + } + + AdvanceMetatilePosition(&subTileX, &subTileY, &metatileX, &metatileY, metatilesWide, metatileWidth, + metatileHeight); + } } -static void ConvertFromTiles4Bpp(unsigned char *src, unsigned char *dest, int numTiles, int metatilesWide, int metatileWidth, int metatileHeight, bool invertColors) -{ - int subTileX = 0; - int subTileY = 0; - int metatileX = 0; - int metatileY = 0; - int pitch = (metatilesWide * metatileWidth) * 4; - - for (int i = 0; i < numTiles; i++) { - for (int j = 0; j < 8; j++) { - int destY = (metatileY * metatileHeight + subTileY) * 8 + j; - - for (int k = 0; k < 4; k++) { - int destX = (metatileX * metatileWidth + subTileX) * 4 + k; - unsigned char srcPixelPair = *src++; - unsigned char leftPixel = srcPixelPair & 0xF; - unsigned char rightPixel = srcPixelPair >> 4; - - if (invertColors) { - leftPixel = 15 - leftPixel; - rightPixel = 15 - rightPixel; - } - - dest[destY * pitch + destX] = (leftPixel << 4) | rightPixel; - } - } - - AdvanceMetatilePosition(&subTileX, &subTileY, &metatileX, &metatileY, metatilesWide, metatileWidth, metatileHeight); - } +static void ConvertFromTiles4Bpp(unsigned char* src, unsigned char* dest, int numTiles, int metatilesWide, + int metatileWidth, int metatileHeight, bool invertColors) { + int subTileX = 0; + int subTileY = 0; + int metatileX = 0; + int metatileY = 0; + int pitch = (metatilesWide * metatileWidth) * 4; + + for (int i = 0; i < numTiles; i++) { + for (int j = 0; j < 8; j++) { + int destY = (metatileY * metatileHeight + subTileY) * 8 + j; + + for (int k = 0; k < 4; k++) { + int destX = (metatileX * metatileWidth + subTileX) * 4 + k; + unsigned char srcPixelPair = *src++; + unsigned char leftPixel = srcPixelPair & 0xF; + unsigned char rightPixel = srcPixelPair >> 4; + + if (invertColors) { + leftPixel = 15 - leftPixel; + rightPixel = 15 - rightPixel; + } + + dest[destY * pitch + destX] = (leftPixel << 4) | rightPixel; + } + } + + AdvanceMetatilePosition(&subTileX, &subTileY, &metatileX, &metatileY, metatilesWide, metatileWidth, + metatileHeight); + } } -static void ConvertFromTiles8Bpp(unsigned char *src, unsigned char *dest, int numTiles, int metatilesWide, int metatileWidth, int metatileHeight, bool invertColors) -{ - int subTileX = 0; - int subTileY = 0; - int metatileX = 0; - int metatileY = 0; - int pitch = (metatilesWide * metatileWidth) * 8; +static void ConvertFromTiles8Bpp(unsigned char* src, unsigned char* dest, int numTiles, int metatilesWide, + int metatileWidth, int metatileHeight, bool invertColors) { + int subTileX = 0; + int subTileY = 0; + int metatileX = 0; + int metatileY = 0; + int pitch = (metatilesWide * metatileWidth) * 8; - for (int i = 0; i < numTiles; i++) { - for (int j = 0; j < 8; j++) { - int destY = (metatileY * metatileHeight + subTileY) * 8 + j; + for (int i = 0; i < numTiles; i++) { + for (int j = 0; j < 8; j++) { + int destY = (metatileY * metatileHeight + subTileY) * 8 + j; - for (int k = 0; k < 8; k++) { - int destX = (metatileX * metatileWidth + subTileX) * 8 + k; - unsigned char srcPixel = *src++; + for (int k = 0; k < 8; k++) { + int destX = (metatileX * metatileWidth + subTileX) * 8 + k; + unsigned char srcPixel = *src++; - if (invertColors) - srcPixel = 255 - srcPixel; + if (invertColors) + srcPixel = 255 - srcPixel; - dest[destY * pitch + destX] = srcPixel; - } - } + dest[destY * pitch + destX] = srcPixel; + } + } - AdvanceMetatilePosition(&subTileX, &subTileY, &metatileX, &metatileY, metatilesWide, metatileWidth, metatileHeight); - } + AdvanceMetatilePosition(&subTileX, &subTileY, &metatileX, &metatileY, metatilesWide, metatileWidth, + metatileHeight); + } } -static void ConvertToTiles1Bpp(unsigned char *src, unsigned char *dest, int numTiles, int metatilesWide, int metatileWidth, int metatileHeight, bool invertColors) -{ - int subTileX = 0; - int subTileY = 0; - int metatileX = 0; - int metatileY = 0; - int pitch = metatilesWide * metatileWidth; - - for (int i = 0; i < numTiles; i++) { - for (int j = 0; j < 8; j++) { - int srcY = (metatileY * metatileHeight + subTileY) * 8 + j; - int srcX = metatileX * metatileWidth + subTileX; - unsigned char srcPixelOctet = src[srcY * pitch + srcX]; - unsigned char *destPixelOctet = dest++; - - for (int k = 0; k < 8; k++) { - *destPixelOctet <<= 1; - *destPixelOctet |= (srcPixelOctet & 1) ^ invertColors; - srcPixelOctet >>= 1; - } - } - - AdvanceMetatilePosition(&subTileX, &subTileY, &metatileX, &metatileY, metatilesWide, metatileWidth, metatileHeight); - } +static void ConvertToTiles1Bpp(unsigned char* src, unsigned char* dest, int numTiles, int metatilesWide, + int metatileWidth, int metatileHeight, bool invertColors) { + int subTileX = 0; + int subTileY = 0; + int metatileX = 0; + int metatileY = 0; + int pitch = metatilesWide * metatileWidth; + + for (int i = 0; i < numTiles; i++) { + for (int j = 0; j < 8; j++) { + int srcY = (metatileY * metatileHeight + subTileY) * 8 + j; + int srcX = metatileX * metatileWidth + subTileX; + unsigned char srcPixelOctet = src[srcY * pitch + srcX]; + unsigned char* destPixelOctet = dest++; + + for (int k = 0; k < 8; k++) { + *destPixelOctet <<= 1; + *destPixelOctet |= (srcPixelOctet & 1) ^ invertColors; + srcPixelOctet >>= 1; + } + } + + AdvanceMetatilePosition(&subTileX, &subTileY, &metatileX, &metatileY, metatilesWide, metatileWidth, + metatileHeight); + } } -static void ConvertToTiles4Bpp(unsigned char *src, unsigned char *dest, int numTiles, int metatilesWide, int metatileWidth, int metatileHeight, bool invertColors) -{ - int subTileX = 0; - int subTileY = 0; - int metatileX = 0; - int metatileY = 0; - int pitch = (metatilesWide * metatileWidth) * 4; - - for (int i = 0; i < numTiles; i++) { - for (int j = 0; j < 8; j++) { - int srcY = (metatileY * metatileHeight + subTileY) * 8 + j; - - for (int k = 0; k < 4; k++) { - int srcX = (metatileX * metatileWidth + subTileX) * 4 + k; - unsigned char srcPixelPair = src[srcY * pitch + srcX]; - unsigned char leftPixel = srcPixelPair >> 4; - unsigned char rightPixel = srcPixelPair & 0xF; - - if (invertColors) { - leftPixel = 15 - leftPixel; - rightPixel = 15 - rightPixel; - } - - *dest++ = (rightPixel << 4) | leftPixel; - } - } - - AdvanceMetatilePosition(&subTileX, &subTileY, &metatileX, &metatileY, metatilesWide, metatileWidth, metatileHeight); - } +static void ConvertToTiles4Bpp(unsigned char* src, unsigned char* dest, int numTiles, int metatilesWide, + int metatileWidth, int metatileHeight, bool invertColors) { + int subTileX = 0; + int subTileY = 0; + int metatileX = 0; + int metatileY = 0; + int pitch = (metatilesWide * metatileWidth) * 4; + + for (int i = 0; i < numTiles; i++) { + for (int j = 0; j < 8; j++) { + int srcY = (metatileY * metatileHeight + subTileY) * 8 + j; + + for (int k = 0; k < 4; k++) { + int srcX = (metatileX * metatileWidth + subTileX) * 4 + k; + unsigned char srcPixelPair = src[srcY * pitch + srcX]; + unsigned char leftPixel = srcPixelPair >> 4; + unsigned char rightPixel = srcPixelPair & 0xF; + + if (invertColors) { + leftPixel = 15 - leftPixel; + rightPixel = 15 - rightPixel; + } + + *dest++ = (rightPixel << 4) | leftPixel; + } + } + + AdvanceMetatilePosition(&subTileX, &subTileY, &metatileX, &metatileY, metatilesWide, metatileWidth, + metatileHeight); + } } -static void ConvertToTiles8Bpp(unsigned char *src, unsigned char *dest, int numTiles, int metatilesWide, int metatileWidth, int metatileHeight, bool invertColors) -{ - int subTileX = 0; - int subTileY = 0; - int metatileX = 0; - int metatileY = 0; - int pitch = (metatilesWide * metatileWidth) * 8; +static void ConvertToTiles8Bpp(unsigned char* src, unsigned char* dest, int numTiles, int metatilesWide, + int metatileWidth, int metatileHeight, bool invertColors) { + int subTileX = 0; + int subTileY = 0; + int metatileX = 0; + int metatileY = 0; + int pitch = (metatilesWide * metatileWidth) * 8; - for (int i = 0; i < numTiles; i++) { - for (int j = 0; j < 8; j++) { - int srcY = (metatileY * metatileHeight + subTileY) * 8 + j; + for (int i = 0; i < numTiles; i++) { + for (int j = 0; j < 8; j++) { + int srcY = (metatileY * metatileHeight + subTileY) * 8 + j; - for (int k = 0; k < 8; k++) { - int srcX = (metatileX * metatileWidth + subTileX) * 8 + k; - unsigned char srcPixel = src[srcY * pitch + srcX]; + for (int k = 0; k < 8; k++) { + int srcX = (metatileX * metatileWidth + subTileX) * 8 + k; + unsigned char srcPixel = src[srcY * pitch + srcX]; - if (invertColors) - srcPixel = 255 - srcPixel; + if (invertColors) + srcPixel = 255 - srcPixel; - *dest++ = srcPixel; - } - } + *dest++ = srcPixel; + } + } - AdvanceMetatilePosition(&subTileX, &subTileY, &metatileX, &metatileY, metatilesWide, metatileWidth, metatileHeight); - } + AdvanceMetatilePosition(&subTileX, &subTileY, &metatileX, &metatileY, metatilesWide, metatileWidth, + metatileHeight); + } } -void ReadImage(char *path, int tilesWidth, int bitDepth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors) -{ - int tileSize = bitDepth * 8; +void ReadImage(char* path, int tilesWidth, int bitDepth, int metatileWidth, int metatileHeight, struct Image* image, + bool invertColors) { + int tileSize = bitDepth * 8; - int fileSize; - unsigned char *buffer = ReadWholeFile(path, &fileSize); + int fileSize; + unsigned char* buffer = ReadWholeFile(path, &fileSize); - int numTiles = fileSize / tileSize; + int numTiles = fileSize / tileSize; - int tilesHeight = (numTiles + tilesWidth - 1) / tilesWidth; + int tilesHeight = (numTiles + tilesWidth - 1) / tilesWidth; - if (tilesWidth % metatileWidth != 0) - FATAL_ERROR("The width in tiles (%d) isn't a multiple of the specified metatile width (%d)", tilesWidth, metatileWidth); + if (tilesWidth % metatileWidth != 0) + FATAL_ERROR("The width in tiles (%d) isn't a multiple of the specified metatile width (%d)", tilesWidth, + metatileWidth); - if (tilesHeight % metatileHeight != 0) - FATAL_ERROR("The height in tiles (%d) isn't a multiple of the specified metatile height (%d)", tilesHeight, metatileHeight); + if (tilesHeight % metatileHeight != 0) + FATAL_ERROR("The height in tiles (%d) isn't a multiple of the specified metatile height (%d)", tilesHeight, + metatileHeight); - image->width = tilesWidth * 8; - image->height = tilesHeight * 8; - image->bitDepth = bitDepth; - image->pixels = calloc(tilesWidth * tilesHeight, tileSize); + image->width = tilesWidth * 8; + image->height = tilesHeight * 8; + image->bitDepth = bitDepth; + image->pixels = calloc(tilesWidth * tilesHeight, tileSize); - if (image->pixels == NULL) - FATAL_ERROR("Failed to allocate memory for pixels.\n"); + if (image->pixels == NULL) + FATAL_ERROR("Failed to allocate memory for pixels.\n"); - int metatilesWide = tilesWidth / metatileWidth; + int metatilesWide = tilesWidth / metatileWidth; - switch (bitDepth) { - case 1: - ConvertFromTiles1Bpp(buffer, image->pixels, numTiles, metatilesWide, metatileWidth, metatileHeight, invertColors); - break; - case 4: - ConvertFromTiles4Bpp(buffer, image->pixels, numTiles, metatilesWide, metatileWidth, metatileHeight, invertColors); - break; - case 8: - ConvertFromTiles8Bpp(buffer, image->pixels, numTiles, metatilesWide, metatileWidth, metatileHeight, invertColors); - break; - } + switch (bitDepth) { + case 1: + ConvertFromTiles1Bpp(buffer, image->pixels, numTiles, metatilesWide, metatileWidth, metatileHeight, + invertColors); + break; + case 4: + ConvertFromTiles4Bpp(buffer, image->pixels, numTiles, metatilesWide, metatileWidth, metatileHeight, + invertColors); + break; + case 8: + ConvertFromTiles8Bpp(buffer, image->pixels, numTiles, metatilesWide, metatileWidth, metatileHeight, + invertColors); + break; + } - free(buffer); + free(buffer); } -void WriteImage(char *path, int numTiles, int bitDepth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors) -{ - int tileSize = bitDepth * 8; +void WriteImage(char* path, int numTiles, int bitDepth, int metatileWidth, int metatileHeight, struct Image* image, + bool invertColors) { + int tileSize = bitDepth * 8; - if (image->width % 8 != 0) - FATAL_ERROR("The width in pixels (%d) isn't a multiple of 8.\n", image->width); + if (image->width % 8 != 0) + FATAL_ERROR("The width in pixels (%d) isn't a multiple of 8.\n", image->width); - if (image->height % 8 != 0) - FATAL_ERROR("The height in pixels (%d) isn't a multiple of 8.\n", image->height); + if (image->height % 8 != 0) + FATAL_ERROR("The height in pixels (%d) isn't a multiple of 8.\n", image->height); - int tilesWidth = image->width / 8; - int tilesHeight = image->height / 8; + int tilesWidth = image->width / 8; + int tilesHeight = image->height / 8; - if (tilesWidth % metatileWidth != 0) - FATAL_ERROR("The width in tiles (%d) isn't a multiple of the specified metatile width (%d)", tilesWidth, metatileWidth); + if (tilesWidth % metatileWidth != 0) + FATAL_ERROR("The width in tiles (%d) isn't a multiple of the specified metatile width (%d)", tilesWidth, + metatileWidth); - if (tilesHeight % metatileHeight != 0) - FATAL_ERROR("The height in tiles (%d) isn't a multiple of the specified metatile height (%d)", tilesHeight, metatileHeight); + if (tilesHeight % metatileHeight != 0) + FATAL_ERROR("The height in tiles (%d) isn't a multiple of the specified metatile height (%d)", tilesHeight, + metatileHeight); - int maxNumTiles = tilesWidth * tilesHeight; + int maxNumTiles = tilesWidth * tilesHeight; - if (numTiles == 0) - numTiles = maxNumTiles; - else if (numTiles > maxNumTiles) - FATAL_ERROR("The specified number of tiles (%d) is greater than the maximum possible value (%d).\n", numTiles, maxNumTiles); + if (numTiles == 0) + numTiles = maxNumTiles; + else if (numTiles > maxNumTiles) + FATAL_ERROR("The specified number of tiles (%d) is greater than the maximum possible value (%d).\n", numTiles, + maxNumTiles); - int bufferSize = numTiles * tileSize; - unsigned char *buffer = malloc(bufferSize); + int bufferSize = numTiles * tileSize; + unsigned char* buffer = malloc(bufferSize); - if (buffer == NULL) - FATAL_ERROR("Failed to allocate memory for pixels.\n"); + if (buffer == NULL) + FATAL_ERROR("Failed to allocate memory for pixels.\n"); - int metatilesWide = tilesWidth / metatileWidth; + int metatilesWide = tilesWidth / metatileWidth; - switch (bitDepth) { - case 1: - ConvertToTiles1Bpp(image->pixels, buffer, numTiles, metatilesWide, metatileWidth, metatileHeight, invertColors); - break; - case 4: - ConvertToTiles4Bpp(image->pixels, buffer, numTiles, metatilesWide, metatileWidth, metatileHeight, invertColors); - break; - case 8: - ConvertToTiles8Bpp(image->pixels, buffer, numTiles, metatilesWide, metatileWidth, metatileHeight, invertColors); - break; - } + switch (bitDepth) { + case 1: + ConvertToTiles1Bpp(image->pixels, buffer, numTiles, metatilesWide, metatileWidth, metatileHeight, + invertColors); + break; + case 4: + ConvertToTiles4Bpp(image->pixels, buffer, numTiles, metatilesWide, metatileWidth, metatileHeight, + invertColors); + break; + case 8: + ConvertToTiles8Bpp(image->pixels, buffer, numTiles, metatilesWide, metatileWidth, metatileHeight, + invertColors); + break; + } - WriteWholeFile(path, buffer, bufferSize); + WriteWholeFile(path, buffer, bufferSize); - free(buffer); + free(buffer); } -void FreeImage(struct Image *image) -{ - free(image->pixels); - image->pixels = NULL; +void FreeImage(struct Image* image) { + free(image->pixels); + image->pixels = NULL; } -void ReadGbaPalette(char *path, struct Palette *palette) -{ - int fileSize; - unsigned char *data = ReadWholeFile(path, &fileSize); +void ReadGbaPalette(char* path, struct Palette* palette) { + int fileSize; + unsigned char* data = ReadWholeFile(path, &fileSize); - if (fileSize % 2 != 0) - FATAL_ERROR("The file size (%d) is not a multiple of 2.\n", fileSize); + if (fileSize % 2 != 0) + FATAL_ERROR("The file size (%d) is not a multiple of 2.\n", fileSize); - palette->numColors = fileSize / 2; + palette->numColors = fileSize / 2; - for (int i = 0; i < palette->numColors; i++) { - uint16_t paletteEntry = (data[i * 2 + 1] << 8) | data[i * 2]; - palette->colors[i].red = UPCONVERT_BIT_DEPTH(GET_GBA_PAL_RED(paletteEntry)); - palette->colors[i].green = UPCONVERT_BIT_DEPTH(GET_GBA_PAL_GREEN(paletteEntry)); - palette->colors[i].blue = UPCONVERT_BIT_DEPTH(GET_GBA_PAL_BLUE(paletteEntry)); - } + for (int i = 0; i < palette->numColors; i++) { + uint16_t paletteEntry = (data[i * 2 + 1] << 8) | data[i * 2]; + palette->colors[i].red = UPCONVERT_BIT_DEPTH(GET_GBA_PAL_RED(paletteEntry)); + palette->colors[i].green = UPCONVERT_BIT_DEPTH(GET_GBA_PAL_GREEN(paletteEntry)); + palette->colors[i].blue = UPCONVERT_BIT_DEPTH(GET_GBA_PAL_BLUE(paletteEntry)); + } - free(data); + free(data); } -void WriteGbaPalette(char *path, struct Palette *palette) -{ - FILE *fp = fopen(path, "wb"); +void WriteGbaPalette(char* path, struct Palette* palette) { + FILE* fp = fopen(path, "wb"); - if (fp == NULL) - FATAL_ERROR("Failed to open \"%s\" for writing.\n", path); + if (fp == NULL) + FATAL_ERROR("Failed to open \"%s\" for writing.\n", path); - for (int i = 0; i < palette->numColors; i++) { - unsigned char red = DOWNCONVERT_BIT_DEPTH(palette->colors[i].red); - unsigned char green = DOWNCONVERT_BIT_DEPTH(palette->colors[i].green); - unsigned char blue = DOWNCONVERT_BIT_DEPTH(palette->colors[i].blue); + for (int i = 0; i < palette->numColors; i++) { + unsigned char red = DOWNCONVERT_BIT_DEPTH(palette->colors[i].red); + unsigned char green = DOWNCONVERT_BIT_DEPTH(palette->colors[i].green); + unsigned char blue = DOWNCONVERT_BIT_DEPTH(palette->colors[i].blue); - uint16_t paletteEntry = SET_GBA_PAL(red, green, blue); + uint16_t paletteEntry = SET_GBA_PAL(red, green, blue); - fputc(paletteEntry & 0xFF, fp); - fputc(paletteEntry >> 8, fp); - } + fputc(paletteEntry & 0xFF, fp); + fputc(paletteEntry >> 8, fp); + } - fclose(fp); + fclose(fp); } diff --git a/tools/src/gbagfx/gfx.h b/tools/src/gbagfx/gfx.h index 5355ced8..6b3aff3a 100755..100644 --- a/tools/src/gbagfx/gfx.h +++ b/tools/src/gbagfx/gfx.h @@ -7,30 +7,32 @@ #include <stdbool.h> struct Color { - unsigned char red; - unsigned char green; - unsigned char blue; + unsigned char red; + unsigned char green; + unsigned char blue; }; struct Palette { - struct Color colors[256]; - int numColors; + struct Color colors[256]; + int numColors; }; struct Image { - int width; - int height; - int bitDepth; - unsigned char *pixels; - bool hasPalette; - struct Palette palette; - bool hasTransparency; + int width; + int height; + int bitDepth; + unsigned char* pixels; + bool hasPalette; + struct Palette palette; + bool hasTransparency; }; -void ReadImage(char *path, int tilesWidth, int bitDepth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors); -void WriteImage(char *path, int numTiles, int bitDepth, int metatileWidth, int metatileHeight, struct Image *image, bool invertColors); -void FreeImage(struct Image *image); -void ReadGbaPalette(char *path, struct Palette *palette); -void WriteGbaPalette(char *path, struct Palette *palette); +void ReadImage(char* path, int tilesWidth, int bitDepth, int metatileWidth, int metatileHeight, struct Image* image, + bool invertColors); +void WriteImage(char* path, int numTiles, int bitDepth, int metatileWidth, int metatileHeight, struct Image* image, + bool invertColors); +void FreeImage(struct Image* image); +void ReadGbaPalette(char* path, struct Palette* palette); +void WriteGbaPalette(char* path, struct Palette* palette); #endif // GFX_H diff --git a/tools/src/gbagfx/global.h b/tools/src/gbagfx/global.h index 65dd351d..b6fea5a0 100755..100644 --- a/tools/src/gbagfx/global.h +++ b/tools/src/gbagfx/global.h @@ -8,21 +8,21 @@ #ifdef _MSC_VER -#define FATAL_ERROR(format, ...) \ -do { \ - fprintf(stderr, format, __VA_ARGS__); \ - exit(1); \ -} while (0) +#define FATAL_ERROR(format, ...) \ + do { \ + fprintf(stderr, format, __VA_ARGS__); \ + exit(1); \ + } while (0) #define UNUSED #else -#define FATAL_ERROR(format, ...) \ -do { \ - fprintf(stderr, format, ##__VA_ARGS__); \ - exit(1); \ -} while (0) +#define FATAL_ERROR(format, ...) \ + do { \ + fprintf(stderr, format, ##__VA_ARGS__); \ + exit(1); \ + } while (0) #define UNUSED __attribute__((__unused__)) diff --git a/tools/src/gbagfx/huff.c b/tools/src/gbagfx/huff.c index 143ed79b..f52a7d2d 100755..100644 --- a/tools/src/gbagfx/huff.c +++ b/tools/src/gbagfx/huff.c @@ -6,94 +6,94 @@ #include "global.h" #include "huff.h" -static int cmp_tree(const void * a0, const void * b0) { - return ((struct HuffData *)a0)->value - ((struct HuffData *)b0)->value; +static int cmp_tree(const void* a0, const void* b0) { + return ((struct HuffData*)a0)->value - ((struct HuffData*)b0)->value; } -typedef int (*cmpfun)(const void *, const void *); +typedef int (*cmpfun)(const void*, const void*); -int msort_r(void * data, size_t count, size_t size, cmpfun cmp, void * buffer) { +int msort_r(void* data, size_t count, size_t size, cmpfun cmp, void* buffer) { /* * Out-of-place mergesort (stable sort) * Returns 1 on success, 0 on failure */ - void * leftPtr; - void * rightPtr; - void * leftEnd; - void * rightEnd; + void* leftPtr; + void* rightPtr; + void* leftEnd; + void* rightEnd; int i; switch (count) { - case 0: - // Should never be here - return 0; - - case 1: - // Nothing to do here - break; - - case 2: - // Swap the two entries if the right one compares higher. - if (cmp(data, data + size) > 0) { - memcpy(buffer, data, size); - memcpy(data, data + size, size); - memcpy(data + size, buffer, size); - } - break; - default: - // Merge sort out-of-place. - leftPtr = data; - leftEnd = rightPtr = data + count / 2 * size; - rightEnd = data + count * size; - - // Sort the left half - if (!msort_r(leftPtr, count / 2, size, cmp, buffer)) + case 0: + // Should never be here return 0; - // Sort the right half - if (!msort_r(rightPtr, count / 2 + (count & 1), size, cmp, buffer)) - return 0; + case 1: + // Nothing to do here + break; - // Merge the sorted halves out of place - i = 0; - do { - if (cmp(leftPtr, rightPtr) <= 0) { - memcpy(buffer + i * size, leftPtr, size); - leftPtr += size; - } else { - memcpy(buffer + i * size, rightPtr, size); - rightPtr += size; + case 2: + // Swap the two entries if the right one compares higher. + if (cmp(data, data + size) > 0) { + memcpy(buffer, data, size); + memcpy(data, data + size, size); + memcpy(data + size, buffer, size); } + break; + default: + // Merge sort out-of-place. + leftPtr = data; + leftEnd = rightPtr = data + count / 2 * size; + rightEnd = data + count * size; + + // Sort the left half + if (!msort_r(leftPtr, count / 2, size, cmp, buffer)) + return 0; + + // Sort the right half + if (!msort_r(rightPtr, count / 2 + (count & 1), size, cmp, buffer)) + return 0; + + // Merge the sorted halves out of place + i = 0; + do { + if (cmp(leftPtr, rightPtr) <= 0) { + memcpy(buffer + i * size, leftPtr, size); + leftPtr += size; + } else { + memcpy(buffer + i * size, rightPtr, size); + rightPtr += size; + } - } while (++i < count && leftPtr < leftEnd && rightPtr < rightEnd); + } while (++i < count && leftPtr < leftEnd && rightPtr < rightEnd); - // Copy the remainder - if (i < count) { - if (leftPtr < leftEnd) { - memcpy(buffer + i * size, leftPtr, leftEnd - leftPtr); - } - else { - memcpy(buffer + i * size, rightPtr, rightEnd - rightPtr); + // Copy the remainder + if (i < count) { + if (leftPtr < leftEnd) { + memcpy(buffer + i * size, leftPtr, leftEnd - leftPtr); + } else { + memcpy(buffer + i * size, rightPtr, rightEnd - rightPtr); + } } - } - // Copy the merged data back - memcpy(data, buffer, count * size); - break; + // Copy the merged data back + memcpy(data, buffer, count * size); + break; } return 1; } -int msort(void * data, size_t count, size_t size, cmpfun cmp) { - void * buffer = malloc(count * size); - if (buffer == NULL) return 0; +int msort(void* data, size_t count, size_t size, cmpfun cmp) { + void* buffer = malloc(count * size); + if (buffer == NULL) + return 0; int result = msort_r(data, count, size, cmp, buffer); free(buffer); return result; } -static void write_tree(unsigned char * dest, HuffNode_t * tree, int nitems, struct BitEncoding * encoding) { +static void write_tree(unsigned char* dest, HuffNode_t* tree, int nitems, struct BitEncoding* encoding) { /* * The example used to guide this function encodes the tree in a * breadth-first manner. We attempt to emulate that here. @@ -102,7 +102,7 @@ static void write_tree(unsigned char * dest, HuffNode_t * tree, int nitems, stru int i, j, k; // There are (2 * nitems - 1) nodes in the binary tree. Allocate that. - HuffNode_t * traversal = calloc(2 * nitems - 1, sizeof(HuffNode_t)); + HuffNode_t* traversal = calloc(2 * nitems - 1, sizeof(HuffNode_t)); if (traversal == NULL) FATAL_ERROR("Fatal error while compressing Huff file.\n"); @@ -117,8 +117,8 @@ static void write_tree(unsigned char * dest, HuffNode_t * tree, int nitems, stru // The index of the path is used to encode the path itself. // Start from the most significant relevant bit and work our way down. // Keep track of the current and previous nodes. - HuffNode_t * currNode = traversal; - HuffNode_t * parent = NULL; + HuffNode_t* currNode = traversal; + HuffNode_t* parent = NULL; for (k = 0; k < depth; k++) { if (currNode->header.isLeaf) break; @@ -159,7 +159,7 @@ static void write_tree(unsigned char * dest, HuffNode_t * tree, int nitems, stru // Encode each node in the tree. for (i = 0; i < 2 * nitems - 1; i++) { - HuffNode_t * currNode = traversal + i; + HuffNode_t* currNode = traversal + i; if (currNode->header.isLeaf) { dest[5 + i] = traversal[i].leaf.key; } else { @@ -174,7 +174,7 @@ static void write_tree(unsigned char * dest, HuffNode_t * tree, int nitems, stru free(traversal); } -static inline void write_32_le(unsigned char * dest, int * destPos, uint32_t * buff, int * buffPos) { +static inline void write_32_le(unsigned char* dest, int* destPos, uint32_t* buff, int* buffPos) { dest[*destPos] = *buff; dest[*destPos + 1] = *buff >> 8; dest[*destPos + 2] = *buff >> 16; @@ -184,7 +184,7 @@ static inline void write_32_le(unsigned char * dest, int * destPos, uint32_t * b *buffPos = 0; } -static inline void read_32_le(unsigned char * src, int * srcPos, uint32_t * buff) { +static inline void read_32_le(unsigned char* src, int* srcPos, uint32_t* buff) { uint32_t tmp = src[*srcPos]; tmp |= src[*srcPos + 1] << 8; tmp |= src[*srcPos + 2] << 16; @@ -193,7 +193,8 @@ static inline void read_32_le(unsigned char * src, int * srcPos, uint32_t * buff *buff = tmp; } -static void write_bits(unsigned char * dest, int * destPos, struct BitEncoding * encoding, int value, uint32_t * buff, int * buffBits) { +static void write_bits(unsigned char* dest, int* destPos, struct BitEncoding* encoding, int value, uint32_t* buff, + int* buffBits) { int nbits = encoding[value].nbits; uint32_t bitstring = encoding[value].bitstring; @@ -218,23 +219,23 @@ MAIN COMPRESSION/DECOMPRESSION ROUTINES ======================================= */ -unsigned char * HuffCompress(unsigned char * src, int srcSize, int * compressedSize_p, int bitDepth) { +unsigned char* HuffCompress(unsigned char* src, int srcSize, int* compressedSize_p, int bitDepth) { if (srcSize <= 0) goto fail; int worstCaseDestSize = 4 + (2 << bitDepth) + srcSize * 3; - unsigned char *dest = malloc(worstCaseDestSize); + unsigned char* dest = malloc(worstCaseDestSize); if (dest == NULL) goto fail; int nitems = 1 << bitDepth; - HuffNode_t * freqs = calloc(nitems, sizeof(HuffNode_t)); + HuffNode_t* freqs = calloc(nitems, sizeof(HuffNode_t)); if (freqs == NULL) goto fail; - struct BitEncoding * encoding = calloc(nitems, sizeof(struct BitEncoding)); + struct BitEncoding* encoding = calloc(nitems, sizeof(struct BitEncoding)); if (encoding == NULL) goto fail; @@ -281,16 +282,16 @@ unsigned char * HuffCompress(unsigned char * src, int srcSize, int * compressedS goto fail; } - HuffNode_t * tree = calloc(nitems * 2 - 1, sizeof(HuffNode_t)); + HuffNode_t* tree = calloc(nitems * 2 - 1, sizeof(HuffNode_t)); if (tree == NULL) goto fail; // Iteratively collapse the two least frequent nodes. - HuffNode_t * endptr = freqs + nitems - 2; + HuffNode_t* endptr = freqs + nitems - 2; for (int i = 0; i < nitems - 1; i++) { - HuffNode_t * left = freqs; - HuffNode_t * right = freqs + 1; + HuffNode_t* left = freqs; + HuffNode_t* right = freqs + 1; tree[i * 2] = *right; tree[i * 2 + 1] = *left; for (int j = 0; j < nitems - i - 2; j++) @@ -342,7 +343,7 @@ fail: FATAL_ERROR("Fatal error while compressing Huff file.\n"); } -unsigned char * HuffDecompress(unsigned char * src, int srcSize, int * uncompressedSize_p) { +unsigned char* HuffDecompress(unsigned char* src, int srcSize, int* uncompressedSize_p) { if (srcSize < 4) goto fail; @@ -352,7 +353,7 @@ unsigned char * HuffDecompress(unsigned char * src, int srcSize, int * uncompres int destSize = (src[3] << 16) | (src[2] << 8) | src[1]; - unsigned char *dest = malloc(destSize); + unsigned char* dest = malloc(destSize); if (dest == NULL) goto fail; @@ -365,8 +366,7 @@ unsigned char * HuffDecompress(unsigned char * src, int srcSize, int * uncompres uint32_t destTmp = 0; uint32_t window; - for (;;) - { + for (;;) { if (srcPos >= srcSize) goto fail; read_32_le(src, &srcPos, &window); diff --git a/tools/src/gbagfx/huff.h b/tools/src/gbagfx/huff.h index 6002fe95..354cf7de 100755..100644 --- a/tools/src/gbagfx/huff.h +++ b/tools/src/gbagfx/huff.h @@ -4,8 +4,8 @@ union HuffNode; struct HuffData { - unsigned value:31; - unsigned isLeaf:1; + unsigned value : 31; + unsigned isLeaf : 1; }; struct HuffLeaf { @@ -15,8 +15,8 @@ struct HuffLeaf { struct HuffBranch { struct HuffData header; - union HuffNode * left; - union HuffNode * right; + union HuffNode* left; + union HuffNode* right; }; union HuffNode { @@ -28,11 +28,11 @@ union HuffNode { typedef union HuffNode HuffNode_t; struct BitEncoding { - unsigned long long nbits:6; - unsigned long long bitstring:58; + unsigned long long nbits : 6; + unsigned long long bitstring : 58; }; -unsigned char * HuffCompress(unsigned char * buffer, int srcSize, int * compressedSize_p, int bitDepth); -unsigned char * HuffDecompress(unsigned char * buffer, int srcSize, int * uncompressedSize_p); +unsigned char* HuffCompress(unsigned char* buffer, int srcSize, int* compressedSize_p, int bitDepth); +unsigned char* HuffDecompress(unsigned char* buffer, int srcSize, int* uncompressedSize_p); -#endif //HUFF_H +#endif // HUFF_H diff --git a/tools/src/gbagfx/jasc_pal.c b/tools/src/gbagfx/jasc_pal.c index e5ba9c3c..afaf8248 100755..100644 --- a/tools/src/gbagfx/jasc_pal.c +++ b/tools/src/gbagfx/jasc_pal.c @@ -24,17 +24,14 @@ #define MAX_LINE_LENGTH 11 -void ReadJascPaletteLine(FILE *fp, char *line) -{ +void ReadJascPaletteLine(FILE* fp, char* line) { int c; int length = 0; - for (;;) - { + for (;;) { c = fgetc(fp); - if (c == '\r') - { + if (c == '\r') { c = fgetc(fp); if (c != '\n') @@ -54,8 +51,7 @@ void ReadJascPaletteLine(FILE *fp, char *line) if (c == 0) FATAL_ERROR("NUL character in file.\n"); - if (length == MAX_LINE_LENGTH) - { + if (length == MAX_LINE_LENGTH) { line[length] = 0; FATAL_ERROR("The line \"%s\" is too long.\n", line); } @@ -64,11 +60,10 @@ void ReadJascPaletteLine(FILE *fp, char *line) } } -void ReadJascPalette(char *path, struct Palette *palette) -{ +void ReadJascPalette(char* path, struct Palette* palette) { char line[MAX_LINE_LENGTH + 1]; - FILE *fp = fopen(path, "rb"); + FILE* fp = fopen(path, "rb"); if (fp == NULL) FATAL_ERROR("Failed to open JASC-PAL file \"%s\" for reading.\n", path); @@ -89,14 +84,14 @@ void ReadJascPalette(char *path, struct Palette *palette) FATAL_ERROR("Failed to parse number of colors.\n"); if (palette->numColors < 1 || palette->numColors > 256) - FATAL_ERROR("%d is an invalid number of colors. The number of colors must be in the range [1, 256].\n", palette->numColors); + FATAL_ERROR("%d is an invalid number of colors. The number of colors must be in the range [1, 256].\n", + palette->numColors); - for (int i = 0; i < palette->numColors; i++) - { + for (int i = 0; i < palette->numColors; i++) { ReadJascPaletteLine(fp, line); - char *s = line; - char *end; + char* s = line; + char* end; int red; int green; @@ -154,17 +149,15 @@ void ReadJascPalette(char *path, struct Palette *palette) fclose(fp); } -void WriteJascPalette(char *path, struct Palette *palette) -{ - FILE *fp = fopen(path, "wb"); +void WriteJascPalette(char* path, struct Palette* palette) { + FILE* fp = fopen(path, "wb"); fputs("JASC-PAL\r\n", fp); fputs("0100\r\n", fp); fprintf(fp, "%d\r\n", palette->numColors); - for (int i = 0; i < palette->numColors; i++) - { - struct Color *color = &palette->colors[i]; + for (int i = 0; i < palette->numColors; i++) { + struct Color* color = &palette->colors[i]; fprintf(fp, "%d %d %d\r\n", color->red, color->green, color->blue); } diff --git a/tools/src/gbagfx/jasc_pal.h b/tools/src/gbagfx/jasc_pal.h index b60b31fc..9a2eea80 100755..100644 --- a/tools/src/gbagfx/jasc_pal.h +++ b/tools/src/gbagfx/jasc_pal.h @@ -3,7 +3,7 @@ #ifndef JASC_PAL_H #define JASC_PAL_H -void ReadJascPalette(char *path, struct Palette *palette); -void WriteJascPalette(char *path, struct Palette *palette); +void ReadJascPalette(char* path, struct Palette* palette); +void WriteJascPalette(char* path, struct Palette* palette); #endif // JASC_PAL_H diff --git a/tools/src/gbagfx/lz.c b/tools/src/gbagfx/lz.c index 97434ce5..97168917 100755..100644 --- a/tools/src/gbagfx/lz.c +++ b/tools/src/gbagfx/lz.c @@ -5,149 +5,146 @@ #include "global.h" #include "lz.h" -unsigned char *LZDecompress(unsigned char *src, int srcSize, int *uncompressedSize) -{ - if (srcSize < 4) - goto fail; +unsigned char* LZDecompress(unsigned char* src, int srcSize, int* uncompressedSize) { + if (srcSize < 4) + goto fail; - int destSize = (src[3] << 16) | (src[2] << 8) | src[1]; + int destSize = (src[3] << 16) | (src[2] << 8) | src[1]; - unsigned char *dest = malloc(destSize); + unsigned char* dest = malloc(destSize); - if (dest == NULL) - goto fail; + if (dest == NULL) + goto fail; - int srcPos = 4; - int destPos = 0; + int srcPos = 4; + int destPos = 0; - for (;;) { - if (srcPos >= srcSize) - goto fail; + for (;;) { + if (srcPos >= srcSize) + goto fail; - unsigned char flags = src[srcPos++]; + unsigned char flags = src[srcPos++]; - for (int i = 0; i < 8; i++) { - if (flags & 0x80) { - if (srcPos + 1 >= srcSize) - goto fail; + for (int i = 0; i < 8; i++) { + if (flags & 0x80) { + if (srcPos + 1 >= srcSize) + goto fail; - int blockSize = (src[srcPos] >> 4) + 3; - int blockDistance = (((src[srcPos] & 0xF) << 8) | src[srcPos + 1]) + 1; + int blockSize = (src[srcPos] >> 4) + 3; + int blockDistance = (((src[srcPos] & 0xF) << 8) | src[srcPos + 1]) + 1; - srcPos += 2; + srcPos += 2; - int blockPos = destPos - blockDistance; + int blockPos = destPos - blockDistance; - // Some Ruby/Sapphire tilesets overflow. - if (destPos + blockSize > destSize) { - blockSize = destSize - destPos; - fprintf(stderr, "Destination buffer overflow.\n"); - } + // Some Ruby/Sapphire tilesets overflow. + if (destPos + blockSize > destSize) { + blockSize = destSize - destPos; + fprintf(stderr, "Destination buffer overflow.\n"); + } - if (blockPos < 0) - goto fail; + if (blockPos < 0) + goto fail; - for (int j = 0; j < blockSize; j++) - dest[destPos++] = dest[blockPos + j]; - } else { - if (srcPos >= srcSize || destPos >= destSize) - goto fail; + for (int j = 0; j < blockSize; j++) + dest[destPos++] = dest[blockPos + j]; + } else { + if (srcPos >= srcSize || destPos >= destSize) + goto fail; - dest[destPos++] = src[srcPos++]; - } + dest[destPos++] = src[srcPos++]; + } - if (destPos == destSize) { - *uncompressedSize = destSize; - return dest; - } + if (destPos == destSize) { + *uncompressedSize = destSize; + return dest; + } - flags <<= 1; - } - } + flags <<= 1; + } + } fail: - FATAL_ERROR("Fatal error while decompressing LZ file.\n"); + FATAL_ERROR("Fatal error while decompressing LZ file.\n"); } -unsigned char *LZCompress(unsigned char *src, int srcSize, int *compressedSize, const int minDistance) -{ - if (srcSize <= 0) - goto fail; - - int worstCaseDestSize = 4 + srcSize + ((srcSize + 7) / 8); - - // Round up to the next multiple of four. - worstCaseDestSize = (worstCaseDestSize + 3) & ~3; - - unsigned char *dest = malloc(worstCaseDestSize); - - if (dest == NULL) - goto fail; - - // header - dest[0] = 0x10; // LZ compression type - dest[1] = (unsigned char)srcSize; - dest[2] = (unsigned char)(srcSize >> 8); - dest[3] = (unsigned char)(srcSize >> 16); - - int srcPos = 0; - int destPos = 4; - - for (;;) { - unsigned char *flags = &dest[destPos++]; - *flags = 0; - - for (int i = 0; i < 8; i++) { - int bestBlockDistance = 0; - int bestBlockSize = 0; - int blockDistance = minDistance; - - while (blockDistance <= srcPos && blockDistance <= 0x1000) { - int blockStart = srcPos - blockDistance; - int blockSize = 0; - - while (blockSize < 18 - && srcPos + blockSize < srcSize - && src[blockStart + blockSize] == src[srcPos + blockSize]) - blockSize++; - - if (blockSize > bestBlockSize) { - bestBlockDistance = blockDistance; - bestBlockSize = blockSize; - - if (blockSize == 18) - break; - } - - blockDistance++; - } - - if (bestBlockSize >= 3) { - *flags |= (0x80 >> i); - srcPos += bestBlockSize; - bestBlockSize -= 3; - bestBlockDistance--; - dest[destPos++] = (bestBlockSize << 4) | ((unsigned int)bestBlockDistance >> 8); - dest[destPos++] = (unsigned char)bestBlockDistance; - } else { - dest[destPos++] = src[srcPos++]; - } - - if (srcPos == srcSize) { - // Pad to multiple of 4 bytes. - int remainder = destPos % 4; - - if (remainder != 0) { - for (int i = 0; i < 4 - remainder; i++) - dest[destPos++] = 0; - } - - *compressedSize = destPos; - return dest; - } - } - } +unsigned char* LZCompress(unsigned char* src, int srcSize, int* compressedSize, const int minDistance) { + if (srcSize <= 0) + goto fail; + + int worstCaseDestSize = 4 + srcSize + ((srcSize + 7) / 8); + + // Round up to the next multiple of four. + worstCaseDestSize = (worstCaseDestSize + 3) & ~3; + + unsigned char* dest = malloc(worstCaseDestSize); + + if (dest == NULL) + goto fail; + + // header + dest[0] = 0x10; // LZ compression type + dest[1] = (unsigned char)srcSize; + dest[2] = (unsigned char)(srcSize >> 8); + dest[3] = (unsigned char)(srcSize >> 16); + + int srcPos = 0; + int destPos = 4; + + for (;;) { + unsigned char* flags = &dest[destPos++]; + *flags = 0; + + for (int i = 0; i < 8; i++) { + int bestBlockDistance = 0; + int bestBlockSize = 0; + int blockDistance = minDistance; + + while (blockDistance <= srcPos && blockDistance <= 0x1000) { + int blockStart = srcPos - blockDistance; + int blockSize = 0; + + while (blockSize < 18 && srcPos + blockSize < srcSize && + src[blockStart + blockSize] == src[srcPos + blockSize]) + blockSize++; + + if (blockSize > bestBlockSize) { + bestBlockDistance = blockDistance; + bestBlockSize = blockSize; + + if (blockSize == 18) + break; + } + + blockDistance++; + } + + if (bestBlockSize >= 3) { + *flags |= (0x80 >> i); + srcPos += bestBlockSize; + bestBlockSize -= 3; + bestBlockDistance--; + dest[destPos++] = (bestBlockSize << 4) | ((unsigned int)bestBlockDistance >> 8); + dest[destPos++] = (unsigned char)bestBlockDistance; + } else { + dest[destPos++] = src[srcPos++]; + } + + if (srcPos == srcSize) { + // Pad to multiple of 4 bytes. + int remainder = destPos % 4; + + if (remainder != 0) { + for (int i = 0; i < 4 - remainder; i++) + dest[destPos++] = 0; + } + + *compressedSize = destPos; + return dest; + } + } + } fail: - FATAL_ERROR("Fatal error while compressing LZ file.\n"); + FATAL_ERROR("Fatal error while compressing LZ file.\n"); } diff --git a/tools/src/gbagfx/lz.h b/tools/src/gbagfx/lz.h index 90f56b64..989aa239 100755..100644 --- a/tools/src/gbagfx/lz.h +++ b/tools/src/gbagfx/lz.h @@ -3,7 +3,7 @@ #ifndef LZ_H #define LZ_H -unsigned char *LZDecompress(unsigned char *src, int srcSize, int *uncompressedSize); -unsigned char *LZCompress(unsigned char *src, int srcSize, int *compressedSize, const int minDistance); +unsigned char* LZDecompress(unsigned char* src, int srcSize, int* uncompressedSize); +unsigned char* LZCompress(unsigned char* src, int srcSize, int* compressedSize, const int minDistance); #endif // LZ_H diff --git a/tools/src/gbagfx/main.c b/tools/src/gbagfx/main.c index aa0681fb..d353e2b4 100755..100644 --- a/tools/src/gbagfx/main.c +++ b/tools/src/gbagfx/main.c @@ -14,28 +14,24 @@ #include "font.h" #include "huff.h" -struct CommandHandler -{ - const char *inputFileExtension; - const char *outputFileExtension; - void(*function)(char *inputPath, char *outputPath, int argc, char **argv); +struct CommandHandler { + const char* inputFileExtension; + const char* outputFileExtension; + void (*function)(char* inputPath, char* outputPath, int argc, char** argv); }; -void ConvertGbaToPng(char *inputPath, char *outputPath, struct GbaToPngOptions *options) -{ +void ConvertGbaToPng(char* inputPath, char* outputPath, struct GbaToPngOptions* options) { struct Image image; - if (options->paletteFilePath != NULL) - { + if (options->paletteFilePath != NULL) { ReadGbaPalette(options->paletteFilePath, &image.palette); image.hasPalette = true; - } - else - { + } else { image.hasPalette = false; } - ReadImage(inputPath, options->width, options->bitDepth, options->metatileWidth, options->metatileHeight, &image, !image.hasPalette); + ReadImage(inputPath, options->width, options->bitDepth, options->metatileWidth, options->metatileHeight, &image, + !image.hasPalette); image.hasTransparency = options->hasTransparency; @@ -44,22 +40,21 @@ void ConvertGbaToPng(char *inputPath, char *outputPath, struct GbaToPngOptions * FreeImage(&image); } -void ConvertPngToGba(char *inputPath, char *outputPath, struct PngToGbaOptions *options) -{ +void ConvertPngToGba(char* inputPath, char* outputPath, struct PngToGbaOptions* options) { struct Image image; image.bitDepth = options->bitDepth; ReadPng(inputPath, &image); - WriteImage(outputPath, options->numTiles, options->bitDepth, options->metatileWidth, options->metatileHeight, &image, !image.hasPalette); + WriteImage(outputPath, options->numTiles, options->bitDepth, options->metatileWidth, options->metatileHeight, + &image, !image.hasPalette); FreeImage(&image); } -void HandleGbaToPngCommand(char *inputPath, char *outputPath, int argc, char **argv) -{ - char *inputFileExtension = GetFileExtension(inputPath); +void HandleGbaToPngCommand(char* inputPath, char* outputPath, int argc, char** argv) { + char* inputFileExtension = GetFileExtension(inputPath); struct GbaToPngOptions options; options.paletteFilePath = NULL; options.bitDepth = inputFileExtension[0] - '0'; @@ -68,25 +63,19 @@ void HandleGbaToPngCommand(char *inputPath, char *outputPath, int argc, char **a options.metatileWidth = 1; options.metatileHeight = 1; - for (int i = 3; i < argc; i++) - { - char *option = argv[i]; + for (int i = 3; i < argc; i++) { + char* option = argv[i]; - if (strcmp(option, "-palette") == 0) - { + if (strcmp(option, "-palette") == 0) { if (i + 1 >= argc) FATAL_ERROR("No palette file path following \"-palette\".\n"); i++; options.paletteFilePath = argv[i]; - } - else if (strcmp(option, "-object") == 0) - { + } else if (strcmp(option, "-object") == 0) { options.hasTransparency = true; - } - else if (strcmp(option, "-width") == 0) - { + } else if (strcmp(option, "-width") == 0) { if (i + 1 >= argc) FATAL_ERROR("No width following \"-width\".\n"); @@ -97,9 +86,7 @@ void HandleGbaToPngCommand(char *inputPath, char *outputPath, int argc, char **a if (options.width < 1) FATAL_ERROR("Width must be positive.\n"); - } - else if (strcmp(option, "-mwidth") == 0) - { + } else if (strcmp(option, "-mwidth") == 0) { if (i + 1 >= argc) FATAL_ERROR("No metatile width value following \"-mwidth\".\n"); @@ -110,9 +97,7 @@ void HandleGbaToPngCommand(char *inputPath, char *outputPath, int argc, char **a if (options.metatileWidth < 1) FATAL_ERROR("metatile width must be positive.\n"); - } - else if (strcmp(option, "-mheight") == 0) - { + } else if (strcmp(option, "-mheight") == 0) { if (i + 1 >= argc) FATAL_ERROR("No metatile height value following \"-mheight\".\n"); @@ -123,9 +108,7 @@ void HandleGbaToPngCommand(char *inputPath, char *outputPath, int argc, char **a if (options.metatileHeight < 1) FATAL_ERROR("metatile height must be positive.\n"); - } - else - { + } else { FATAL_ERROR("Unrecognized option \"%s\".\n", option); } } @@ -136,9 +119,8 @@ void HandleGbaToPngCommand(char *inputPath, char *outputPath, int argc, char **a ConvertGbaToPng(inputPath, outputPath, &options); } -void HandlePngToGbaCommand(char *inputPath, char *outputPath, int argc, char **argv) -{ - char *outputFileExtension = GetFileExtension(outputPath); +void HandlePngToGbaCommand(char* inputPath, char* outputPath, int argc, char** argv) { + char* outputFileExtension = GetFileExtension(outputPath); int bitDepth = outputFileExtension[0] - '0'; struct PngToGbaOptions options; options.numTiles = 0; @@ -146,12 +128,10 @@ void HandlePngToGbaCommand(char *inputPath, char *outputPath, int argc, char **a options.metatileWidth = 1; options.metatileHeight = 1; - for (int i = 3; i < argc; i++) - { - char *option = argv[i]; + for (int i = 3; i < argc; i++) { + char* option = argv[i]; - if (strcmp(option, "-num_tiles") == 0) - { + if (strcmp(option, "-num_tiles") == 0) { if (i + 1 >= argc) FATAL_ERROR("No number of tiles following \"-num_tiles\".\n"); @@ -162,9 +142,7 @@ void HandlePngToGbaCommand(char *inputPath, char *outputPath, int argc, char **a if (options.numTiles < 1) FATAL_ERROR("Number of tiles must be positive.\n"); - } - else if (strcmp(option, "-mwidth") == 0) - { + } else if (strcmp(option, "-mwidth") == 0) { if (i + 1 >= argc) FATAL_ERROR("No metatile width value following \"-mwidth\".\n"); @@ -175,9 +153,7 @@ void HandlePngToGbaCommand(char *inputPath, char *outputPath, int argc, char **a if (options.metatileWidth < 1) FATAL_ERROR("metatile width must be positive.\n"); - } - else if (strcmp(option, "-mheight") == 0) - { + } else if (strcmp(option, "-mheight") == 0) { if (i + 1 >= argc) FATAL_ERROR("No metatile height value following \"-mheight\".\n"); @@ -188,9 +164,7 @@ void HandlePngToGbaCommand(char *inputPath, char *outputPath, int argc, char **a if (options.metatileHeight < 1) FATAL_ERROR("metatile height must be positive.\n"); - } - else - { + } else { FATAL_ERROR("Unrecognized option \"%s\".\n", option); } } @@ -198,32 +172,27 @@ void HandlePngToGbaCommand(char *inputPath, char *outputPath, int argc, char **a ConvertPngToGba(inputPath, outputPath, &options); } -void HandlePngToGbaPaletteCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED) -{ +void HandlePngToGbaPaletteCommand(char* inputPath, char* outputPath, int argc UNUSED, char** argv UNUSED) { struct Palette palette; ReadPngPalette(inputPath, &palette); WriteGbaPalette(outputPath, &palette); } -void HandleGbaToJascPaletteCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED) -{ +void HandleGbaToJascPaletteCommand(char* inputPath, char* outputPath, int argc UNUSED, char** argv UNUSED) { struct Palette palette; ReadGbaPalette(inputPath, &palette); WriteJascPalette(outputPath, &palette); } -void HandleJascToGbaPaletteCommand(char *inputPath, char *outputPath, int argc, char **argv) -{ +void HandleJascToGbaPaletteCommand(char* inputPath, char* outputPath, int argc, char** argv) { int numColors = 0; - for (int i = 3; i < argc; i++) - { - char *option = argv[i]; + for (int i = 3; i < argc; i++) { + char* option = argv[i]; - if (strcmp(option, "-num_colors") == 0) - { + if (strcmp(option, "-num_colors") == 0) { if (i + 1 >= argc) FATAL_ERROR("No number of colors following \"-num_colors\".\n"); @@ -234,9 +203,7 @@ void HandleJascToGbaPaletteCommand(char *inputPath, char *outputPath, int argc, if (numColors < 1) FATAL_ERROR("Number of colors must be positive.\n"); - } - else - { + } else { FATAL_ERROR("Unrecognized option \"%s\".\n", option); } } @@ -251,8 +218,7 @@ void HandleJascToGbaPaletteCommand(char *inputPath, char *outputPath, int argc, WriteGbaPalette(outputPath, &palette); } -void HandleLatinFontToPngCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED) -{ +void HandleLatinFontToPngCommand(char* inputPath, char* outputPath, int argc UNUSED, char** argv UNUSED) { struct Image image; ReadLatinFont(inputPath, &image); @@ -261,8 +227,7 @@ void HandleLatinFontToPngCommand(char *inputPath, char *outputPath, int argc UNU FreeImage(&image); } -void HandlePngToLatinFontCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED) -{ +void HandlePngToLatinFontCommand(char* inputPath, char* outputPath, int argc UNUSED, char** argv UNUSED) { struct Image image; image.bitDepth = 2; @@ -273,8 +238,7 @@ void HandlePngToLatinFontCommand(char *inputPath, char *outputPath, int argc UNU FreeImage(&image); } -void HandleHalfwidthJapaneseFontToPngCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED) -{ +void HandleHalfwidthJapaneseFontToPngCommand(char* inputPath, char* outputPath, int argc UNUSED, char** argv UNUSED) { struct Image image; ReadHalfwidthJapaneseFont(inputPath, &image); @@ -283,8 +247,7 @@ void HandleHalfwidthJapaneseFontToPngCommand(char *inputPath, char *outputPath, FreeImage(&image); } -void HandlePngToHalfwidthJapaneseFontCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED) -{ +void HandlePngToHalfwidthJapaneseFontCommand(char* inputPath, char* outputPath, int argc UNUSED, char** argv UNUSED) { struct Image image; image.bitDepth = 2; @@ -295,8 +258,7 @@ void HandlePngToHalfwidthJapaneseFontCommand(char *inputPath, char *outputPath, FreeImage(&image); } -void HandleFullwidthJapaneseFontToPngCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED) -{ +void HandleFullwidthJapaneseFontToPngCommand(char* inputPath, char* outputPath, int argc UNUSED, char** argv UNUSED) { struct Image image; ReadFullwidthJapaneseFont(inputPath, &image); @@ -305,8 +267,7 @@ void HandleFullwidthJapaneseFontToPngCommand(char *inputPath, char *outputPath, FreeImage(&image); } -void HandlePngToFullwidthJapaneseFontCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED) -{ +void HandlePngToFullwidthJapaneseFontCommand(char* inputPath, char* outputPath, int argc UNUSED, char** argv UNUSED) { struct Image image; image.bitDepth = 2; @@ -317,17 +278,14 @@ void HandlePngToFullwidthJapaneseFontCommand(char *inputPath, char *outputPath, FreeImage(&image); } -void HandleLZCompressCommand(char *inputPath, char *outputPath, int argc, char **argv) -{ +void HandleLZCompressCommand(char* inputPath, char* outputPath, int argc, char** argv) { int overflowSize = 0; int minDistance = 2; // default, for compatibility with LZ77UnCompVram() - for (int i = 3; i < argc; i++) - { - char *option = argv[i]; + for (int i = 3; i < argc; i++) { + char* option = argv[i]; - if (strcmp(option, "-overflow") == 0) - { + if (strcmp(option, "-overflow") == 0) { if (i + 1 >= argc) FATAL_ERROR("No size following \"-overflow\".\n"); @@ -338,9 +296,7 @@ void HandleLZCompressCommand(char *inputPath, char *outputPath, int argc, char * if (overflowSize < 1) FATAL_ERROR("Overflow size must be positive.\n"); - } - else if (strcmp(option, "-search") == 0) - { + } else if (strcmp(option, "-search") == 0) { if (i + 1 >= argc) FATAL_ERROR("No size following \"-overflow\".\n"); @@ -351,9 +307,7 @@ void HandleLZCompressCommand(char *inputPath, char *outputPath, int argc, char * if (minDistance < 1) FATAL_ERROR("LZ min search distance must be positive.\n"); - } - else - { + } else { FATAL_ERROR("Unrecognized option \"%s\".\n", option); } } @@ -365,10 +319,10 @@ void HandleLZCompressCommand(char *inputPath, char *outputPath, int argc, char * // the data. int fileSize; - unsigned char *buffer = ReadWholeFileZeroPadded(inputPath, &fileSize, overflowSize); + unsigned char* buffer = ReadWholeFileZeroPadded(inputPath, &fileSize, overflowSize); int compressedSize; - unsigned char *compressedData = LZCompress(buffer, fileSize + overflowSize, &compressedSize, minDistance); + unsigned char* compressedData = LZCompress(buffer, fileSize + overflowSize, &compressedSize, minDistance); compressedData[1] = (unsigned char)fileSize; compressedData[2] = (unsigned char)(fileSize >> 8); @@ -381,13 +335,12 @@ void HandleLZCompressCommand(char *inputPath, char *outputPath, int argc, char * free(compressedData); } -void HandleLZDecompressCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED) -{ +void HandleLZDecompressCommand(char* inputPath, char* outputPath, int argc UNUSED, char** argv UNUSED) { int fileSize; - unsigned char *buffer = ReadWholeFile(inputPath, &fileSize); + unsigned char* buffer = ReadWholeFile(inputPath, &fileSize); int uncompressedSize; - unsigned char *uncompressedData = LZDecompress(buffer, fileSize, &uncompressedSize); + unsigned char* uncompressedData = LZDecompress(buffer, fileSize, &uncompressedSize); free(buffer); @@ -396,13 +349,12 @@ void HandleLZDecompressCommand(char *inputPath, char *outputPath, int argc UNUSE free(uncompressedData); } -void HandleRLCompressCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED) -{ +void HandleRLCompressCommand(char* inputPath, char* outputPath, int argc UNUSED, char** argv UNUSED) { int fileSize; - unsigned char *buffer = ReadWholeFile(inputPath, &fileSize); + unsigned char* buffer = ReadWholeFile(inputPath, &fileSize); int compressedSize; - unsigned char *compressedData = RLCompress(buffer, fileSize, &compressedSize); + unsigned char* compressedData = RLCompress(buffer, fileSize, &compressedSize); free(buffer); @@ -411,13 +363,12 @@ void HandleRLCompressCommand(char *inputPath, char *outputPath, int argc UNUSED, free(compressedData); } -void HandleRLDecompressCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED) -{ +void HandleRLDecompressCommand(char* inputPath, char* outputPath, int argc UNUSED, char** argv UNUSED) { int fileSize; - unsigned char *buffer = ReadWholeFile(inputPath, &fileSize); + unsigned char* buffer = ReadWholeFile(inputPath, &fileSize); int uncompressedSize; - unsigned char *uncompressedData = RLDecompress(buffer, fileSize, &uncompressedSize); + unsigned char* uncompressedData = RLDecompress(buffer, fileSize, &uncompressedSize); free(buffer); @@ -426,17 +377,14 @@ void HandleRLDecompressCommand(char *inputPath, char *outputPath, int argc UNUSE free(uncompressedData); } -void HandleHuffCompressCommand(char *inputPath, char *outputPath, int argc, char **argv) -{ +void HandleHuffCompressCommand(char* inputPath, char* outputPath, int argc, char** argv) { int fileSize; int bitDepth = 4; - for (int i = 3; i < argc; i++) - { - char *option = argv[i]; + for (int i = 3; i < argc; i++) { + char* option = argv[i]; - if (strcmp(option, "-depth") == 0) - { + if (strcmp(option, "-depth") == 0) { if (i + 1 >= argc) FATAL_ERROR("No size following \"-depth\".\n"); @@ -447,17 +395,15 @@ void HandleHuffCompressCommand(char *inputPath, char *outputPath, int argc, char if (bitDepth != 4 && bitDepth != 8) FATAL_ERROR("GBA only supports bit depth of 4 or 8.\n"); - } - else - { + } else { FATAL_ERROR("Unrecognized option \"%s\".\n", option); } } - unsigned char *buffer = ReadWholeFile(inputPath, &fileSize); + unsigned char* buffer = ReadWholeFile(inputPath, &fileSize); int compressedSize; - unsigned char *compressedData = HuffCompress(buffer, fileSize, &compressedSize, bitDepth); + unsigned char* compressedData = HuffCompress(buffer, fileSize, &compressedSize, bitDepth); free(buffer); @@ -466,13 +412,12 @@ void HandleHuffCompressCommand(char *inputPath, char *outputPath, int argc, char free(compressedData); } -void HandleHuffDecompressCommand(char *inputPath, char *outputPath, int argc UNUSED, char **argv UNUSED) -{ +void HandleHuffDecompressCommand(char* inputPath, char* outputPath, int argc UNUSED, char** argv UNUSED) { int fileSize; - unsigned char *buffer = ReadWholeFile(inputPath, &fileSize); + unsigned char* buffer = ReadWholeFile(inputPath, &fileSize); int uncompressedSize; - unsigned char *uncompressedData = HuffDecompress(buffer, fileSize, &uncompressedSize); + unsigned char* uncompressedData = HuffDecompress(buffer, fileSize, &uncompressedSize); free(buffer); @@ -481,41 +426,37 @@ void HandleHuffDecompressCommand(char *inputPath, char *outputPath, int argc UNU free(uncompressedData); } -int main(int argc, char **argv) -{ +int main(int argc, char** argv) { if (argc < 3) FATAL_ERROR("Usage: gbagfx INPUT_PATH OUTPUT_PATH [options...]\n"); - struct CommandHandler handlers[] = - { - { "1bpp", "png", HandleGbaToPngCommand }, - { "4bpp", "png", HandleGbaToPngCommand }, - { "8bpp", "png", HandleGbaToPngCommand }, - { "png", "1bpp", HandlePngToGbaCommand }, - { "png", "4bpp", HandlePngToGbaCommand }, - { "png", "8bpp", HandlePngToGbaCommand }, - { "png", "gbapal", HandlePngToGbaPaletteCommand }, - { "gbapal", "pal", HandleGbaToJascPaletteCommand }, - { "pal", "gbapal", HandleJascToGbaPaletteCommand }, - { "latfont", "png", HandleLatinFontToPngCommand }, - { "png", "latfont", HandlePngToLatinFontCommand }, - { "hwjpnfont", "png", HandleHalfwidthJapaneseFontToPngCommand }, - { "png", "hwjpnfont", HandlePngToHalfwidthJapaneseFontCommand }, - { "fwjpnfont", "png", HandleFullwidthJapaneseFontToPngCommand }, - { "png", "fwjpnfont", HandlePngToFullwidthJapaneseFontCommand }, - { NULL, "huff", HandleHuffCompressCommand }, - { NULL, "lz", HandleLZCompressCommand }, - { "huff", NULL, HandleHuffDecompressCommand }, - { "lz", NULL, HandleLZDecompressCommand }, - { NULL, "rl", HandleRLCompressCommand }, - { "rl", NULL, HandleRLDecompressCommand }, - { NULL, NULL, NULL } - }; - - char *inputPath = argv[1]; - char *outputPath = argv[2]; - char *inputFileExtension = GetFileExtension(inputPath); - char *outputFileExtension = GetFileExtension(outputPath); + struct CommandHandler handlers[] = { { "1bpp", "png", HandleGbaToPngCommand }, + { "4bpp", "png", HandleGbaToPngCommand }, + { "8bpp", "png", HandleGbaToPngCommand }, + { "png", "1bpp", HandlePngToGbaCommand }, + { "png", "4bpp", HandlePngToGbaCommand }, + { "png", "8bpp", HandlePngToGbaCommand }, + { "png", "gbapal", HandlePngToGbaPaletteCommand }, + { "gbapal", "pal", HandleGbaToJascPaletteCommand }, + { "pal", "gbapal", HandleJascToGbaPaletteCommand }, + { "latfont", "png", HandleLatinFontToPngCommand }, + { "png", "latfont", HandlePngToLatinFontCommand }, + { "hwjpnfont", "png", HandleHalfwidthJapaneseFontToPngCommand }, + { "png", "hwjpnfont", HandlePngToHalfwidthJapaneseFontCommand }, + { "fwjpnfont", "png", HandleFullwidthJapaneseFontToPngCommand }, + { "png", "fwjpnfont", HandlePngToFullwidthJapaneseFontCommand }, + { NULL, "huff", HandleHuffCompressCommand }, + { NULL, "lz", HandleLZCompressCommand }, + { "huff", NULL, HandleHuffDecompressCommand }, + { "lz", NULL, HandleLZDecompressCommand }, + { NULL, "rl", HandleRLCompressCommand }, + { "rl", NULL, HandleRLDecompressCommand }, + { NULL, NULL, NULL } }; + + char* inputPath = argv[1]; + char* outputPath = argv[2]; + char* inputFileExtension = GetFileExtension(inputPath); + char* outputFileExtension = GetFileExtension(outputPath); if (inputFileExtension == NULL) FATAL_ERROR("Input file \"%s\" has no extension.\n", inputPath); @@ -523,11 +464,11 @@ int main(int argc, char **argv) if (outputFileExtension == NULL) FATAL_ERROR("Output file \"%s\" has no extension.\n", outputPath); - for (int i = 0; handlers[i].function != NULL; i++) - { - if ((handlers[i].inputFileExtension == NULL || strcmp(handlers[i].inputFileExtension, inputFileExtension) == 0) - && (handlers[i].outputFileExtension == NULL || strcmp(handlers[i].outputFileExtension, outputFileExtension) == 0)) - { + for (int i = 0; handlers[i].function != NULL; i++) { + if ((handlers[i].inputFileExtension == NULL || + strcmp(handlers[i].inputFileExtension, inputFileExtension) == 0) && + (handlers[i].outputFileExtension == NULL || + strcmp(handlers[i].outputFileExtension, outputFileExtension) == 0)) { handlers[i].function(inputPath, outputPath, argc, argv); return 0; } diff --git a/tools/src/gbagfx/options.h b/tools/src/gbagfx/options.h index 2ff3967a..29536621 100755..100644 --- a/tools/src/gbagfx/options.h +++ b/tools/src/gbagfx/options.h @@ -6,7 +6,7 @@ #include <stdbool.h> struct GbaToPngOptions { - char *paletteFilePath; + char* paletteFilePath; int bitDepth; bool hasTransparency; int width; diff --git a/tools/src/gbagfx/rl.c b/tools/src/gbagfx/rl.c index 968c9347..697b59c2 100755..100644 --- a/tools/src/gbagfx/rl.c +++ b/tools/src/gbagfx/rl.c @@ -5,14 +5,13 @@ #include "global.h" #include "rl.h" -unsigned char *RLDecompress(unsigned char *src, int srcSize, int *uncompressedSize) -{ +unsigned char* RLDecompress(unsigned char* src, int srcSize, int* uncompressedSize) { if (srcSize < 4) goto fail; int destSize = (src[3] << 16) | (src[2] << 8) | src[1]; - unsigned char *dest = malloc(destSize); + unsigned char* dest = malloc(destSize); if (dest == NULL) goto fail; @@ -20,16 +19,14 @@ unsigned char *RLDecompress(unsigned char *src, int srcSize, int *uncompressedSi int srcPos = 4; int destPos = 0; - for (;;) - { + for (;;) { if (srcPos >= srcSize) goto fail; unsigned char flags = src[srcPos++]; bool compressed = ((flags & 0x80) != 0); - if (compressed) - { + if (compressed) { int length = (flags & 0x7F) + 3; unsigned char data = src[srcPos++]; @@ -38,9 +35,7 @@ unsigned char *RLDecompress(unsigned char *src, int srcSize, int *uncompressedSi for (int i = 0; i < length; i++) dest[destPos++] = data; - } - else - { + } else { int length = (flags & 0x7F) + 1; if (destPos + length > destSize) @@ -50,8 +45,7 @@ unsigned char *RLDecompress(unsigned char *src, int srcSize, int *uncompressedSi dest[destPos++] = src[srcPos++]; } - if (destPos == destSize) - { + if (destPos == destSize) { *uncompressedSize = destSize; return dest; } @@ -61,8 +55,7 @@ fail: FATAL_ERROR("Fatal error while decompressing RL file.\n"); } -unsigned char *RLCompress(unsigned char *src, int srcSize, int *compressedSize) -{ +unsigned char* RLCompress(unsigned char* src, int srcSize, int* compressedSize) { if (srcSize <= 0) goto fail; @@ -71,7 +64,7 @@ unsigned char *RLCompress(unsigned char *src, int srcSize, int *compressedSize) // Round up to the next multiple of four. worstCaseDestSize = (worstCaseDestSize + 3) & ~3; - unsigned char *dest = malloc(worstCaseDestSize); + unsigned char* dest = malloc(worstCaseDestSize); if (dest == NULL) goto fail; @@ -85,14 +78,12 @@ unsigned char *RLCompress(unsigned char *src, int srcSize, int *compressedSize) int srcPos = 0; int destPos = 4; - for (;;) - { + for (;;) { bool compress = false; int uncompressedStart = srcPos; int uncompressedLength = 0; - while (srcPos < srcSize && uncompressedLength < (0x7F + 1)) - { + while (srcPos < srcSize && uncompressedLength < (0x7F + 1)) { compress = (srcPos + 2 < srcSize && src[srcPos] == src[srcPos + 1] && src[srcPos] == src[srcPos + 2]); if (compress) @@ -101,24 +92,20 @@ unsigned char *RLCompress(unsigned char *src, int srcSize, int *compressedSize) srcPos++; uncompressedLength++; } - - if (uncompressedLength > 0) - { + + if (uncompressedLength > 0) { dest[destPos++] = uncompressedLength - 1; for (int i = 0; i < uncompressedLength; i++) dest[destPos++] = src[uncompressedStart + i]; } - if (compress) - { + if (compress) { unsigned char data = src[srcPos]; int compressedLength = 0; - while (compressedLength < (0x7F + 3) - && srcPos + compressedLength < srcSize - && src[srcPos + compressedLength] == data) - { + while (compressedLength < (0x7F + 3) && srcPos + compressedLength < srcSize && + src[srcPos + compressedLength] == data) { compressedLength++; } @@ -128,13 +115,11 @@ unsigned char *RLCompress(unsigned char *src, int srcSize, int *compressedSize) srcPos += compressedLength; } - if (srcPos == srcSize) - { + if (srcPos == srcSize) { // Pad to multiple of 4 bytes. int remainder = destPos % 4; - if (remainder != 0) - { + if (remainder != 0) { for (int i = 0; i < 4 - remainder; i++) dest[destPos++] = 0; } diff --git a/tools/src/gbagfx/rl.h b/tools/src/gbagfx/rl.h index 02ad8d6d..4a366c39 100755..100644 --- a/tools/src/gbagfx/rl.h +++ b/tools/src/gbagfx/rl.h @@ -3,7 +3,7 @@ #ifndef RL_H #define RL_H -unsigned char *RLDecompress(unsigned char *src, int srcSize, int *uncompressedSize); -unsigned char *RLCompress(unsigned char *src, int srcSize, int *compressedSize); +unsigned char* RLDecompress(unsigned char* src, int srcSize, int* uncompressedSize); +unsigned char* RLCompress(unsigned char* src, int srcSize, int* compressedSize); #endif // RL_H diff --git a/tools/src/gbagfx/util.c b/tools/src/gbagfx/util.c index 87abeb31..c2230fb2 100755..100644 --- a/tools/src/gbagfx/util.c +++ b/tools/src/gbagfx/util.c @@ -9,116 +9,111 @@ #include "global.h" #include "util.h" -bool ParseNumber(char *s, char **end, int radix, int *intValue) -{ - char *localEnd; +bool ParseNumber(char* s, char** end, int radix, int* intValue) { + char* localEnd; - if (end == NULL) - end = &localEnd; + if (end == NULL) + end = &localEnd; - errno = 0; + errno = 0; - const long longValue = strtol(s, end, radix); + const long longValue = strtol(s, end, radix); - if (*end == s) - return false; // not a number + if (*end == s) + return false; // not a number - if ((longValue == LONG_MIN || longValue == LONG_MAX) && errno == ERANGE) - return false; + if ((longValue == LONG_MIN || longValue == LONG_MAX) && errno == ERANGE) + return false; - if (longValue > INT_MAX) - return false; + if (longValue > INT_MAX) + return false; - if (longValue < INT_MIN) - return false; + if (longValue < INT_MIN) + return false; - *intValue = (int)longValue; + *intValue = (int)longValue; - return true; + return true; } -char *GetFileExtension(char *path) -{ - char *extension = path; +char* GetFileExtension(char* path) { + char* extension = path; - while (*extension != 0) - extension++; + while (*extension != 0) + extension++; - while (extension > path && *extension != '.') - extension--; + while (extension > path && *extension != '.') + extension--; - if (extension == path) - return NULL; + if (extension == path) + return NULL; - extension++; + extension++; - if (*extension == 0) - return NULL; + if (*extension == 0) + return NULL; - return extension; + return extension; } -unsigned char *ReadWholeFile(char *path, int *size) -{ - FILE *fp = fopen(path, "rb"); +unsigned char* ReadWholeFile(char* path, int* size) { + FILE* fp = fopen(path, "rb"); - if (fp == NULL) - FATAL_ERROR("Failed to open \"%s\" for reading.\n", path); + if (fp == NULL) + FATAL_ERROR("Failed to open \"%s\" for reading.\n", path); - fseek(fp, 0, SEEK_END); + fseek(fp, 0, SEEK_END); - *size = ftell(fp); + *size = ftell(fp); - unsigned char *buffer = malloc(*size); + unsigned char* buffer = malloc(*size); - if (buffer == NULL) - FATAL_ERROR("Failed to allocate memory for reading \"%s\".\n", path); + if (buffer == NULL) + FATAL_ERROR("Failed to allocate memory for reading \"%s\".\n", path); - rewind(fp); + rewind(fp); - if (fread(buffer, *size, 1, fp) != 1) - FATAL_ERROR("Failed to read \"%s\".\n", path); + if (fread(buffer, *size, 1, fp) != 1) + FATAL_ERROR("Failed to read \"%s\".\n", path); - fclose(fp); + fclose(fp); - return buffer; + return buffer; } -unsigned char *ReadWholeFileZeroPadded(char *path, int *size, int padAmount) -{ - FILE *fp = fopen(path, "rb"); +unsigned char* ReadWholeFileZeroPadded(char* path, int* size, int padAmount) { + FILE* fp = fopen(path, "rb"); - if (fp == NULL) - FATAL_ERROR("Failed to open \"%s\" for reading.\n", path); + if (fp == NULL) + FATAL_ERROR("Failed to open \"%s\" for reading.\n", path); - fseek(fp, 0, SEEK_END); + fseek(fp, 0, SEEK_END); - *size = ftell(fp); + *size = ftell(fp); - unsigned char *buffer = calloc(*size + padAmount, 1); + unsigned char* buffer = calloc(*size + padAmount, 1); - if (buffer == NULL) - FATAL_ERROR("Failed to allocate memory for reading \"%s\".\n", path); + if (buffer == NULL) + FATAL_ERROR("Failed to allocate memory for reading \"%s\".\n", path); - rewind(fp); + rewind(fp); - if (fread(buffer, *size, 1, fp) != 1) - FATAL_ERROR("Failed to read \"%s\".\n", path); + if (fread(buffer, *size, 1, fp) != 1) + FATAL_ERROR("Failed to read \"%s\".\n", path); - fclose(fp); + fclose(fp); - return buffer; + return buffer; } -void WriteWholeFile(char *path, void *buffer, int bufferSize) -{ - FILE *fp = fopen(path, "wb"); +void WriteWholeFile(char* path, void* buffer, int bufferSize) { + FILE* fp = fopen(path, "wb"); - if (fp == NULL) - FATAL_ERROR("Failed to open \"%s\" for writing.\n", path); + if (fp == NULL) + FATAL_ERROR("Failed to open \"%s\" for writing.\n", path); - if (fwrite(buffer, bufferSize, 1, fp) != 1) - FATAL_ERROR("Failed to write to \"%s\".\n", path); + if (fwrite(buffer, bufferSize, 1, fp) != 1) + FATAL_ERROR("Failed to write to \"%s\".\n", path); - fclose(fp); + fclose(fp); } diff --git a/tools/src/gbagfx/util.h b/tools/src/gbagfx/util.h index 6d7a9c21..62b6d8d7 100755..100644 --- a/tools/src/gbagfx/util.h +++ b/tools/src/gbagfx/util.h @@ -5,10 +5,10 @@ #include <stdbool.h> -bool ParseNumber(char *s, char **end, int radix, int *intValue); -char *GetFileExtension(char *path); -unsigned char *ReadWholeFile(char *path, int *size); -unsigned char *ReadWholeFileZeroPadded(char *path, int *size, int padAmount); -void WriteWholeFile(char *path, void *buffer, int bufferSize); +bool ParseNumber(char* s, char** end, int radix, int* intValue); +char* GetFileExtension(char* path); +unsigned char* ReadWholeFile(char* path, int* size); +unsigned char* ReadWholeFileZeroPadded(char* path, int* size, int padAmount); +void WriteWholeFile(char* path, void* buffer, int bufferSize); #endif // UTIL_H diff --git a/tools/src/mid2agb/agb.cpp b/tools/src/mid2agb/agb.cpp index 9e0feb8c..361f67f0 100755..100644 --- a/tools/src/mid2agb/agb.cpp +++ b/tools/src/mid2agb/agb.cpp @@ -42,8 +42,7 @@ static int s_memaccOp; static int s_memaccParam1; static int s_memaccParam2; -void PrintAgbHeader() -{ +void PrintAgbHeader() { std::fprintf(g_outputFile, "\t.include \"sound/MPlayDef.s\"\n\n"); std::fprintf(g_outputFile, "\t.equ\t%s_grp, voicegroup%03u\n", g_asmLabel.c_str(), g_voiceGroup); std::fprintf(g_outputFile, "\t.equ\t%s_pri, %u\n", g_asmLabel.c_str(), g_priority); @@ -65,8 +64,7 @@ void PrintAgbHeader() std::fprintf(g_outputFile, "\t.align\t2\n"); } -void ResetTrackVars() -{ +void ResetTrackVars() { s_lastVelocity = -1; s_lastNote = -1; s_velocityChanged = false; @@ -76,10 +74,8 @@ void ResetTrackVars() s_inPattern = false; } -void PrintWait(int wait) -{ - if (wait > 0) - { +void PrintWait(int wait) { + if (wait > 0) { std::fprintf(g_outputFile, "\t.byte\tW%02d\n", wait); s_velocityChanged = true; s_noteChanged = true; @@ -87,27 +83,20 @@ void PrintWait(int wait) } } -void PrintOp(int wait, std::string name, const char *format, ...) -{ +void PrintOp(int wait, std::string name, const char* format, ...) { std::va_list args; va_start(args, format); std::fprintf(g_outputFile, "\t.byte\t\t"); - if (format != nullptr) - { - if (!g_compressionEnabled || s_lastOpName != name) - { + if (format != nullptr) { + if (!g_compressionEnabled || s_lastOpName != name) { std::fprintf(g_outputFile, "%s, ", name.c_str()); s_lastOpName = name; - } - else - { + } else { std::fprintf(g_outputFile, " "); } std::vfprintf(g_outputFile, format, args); - } - else - { + } else { std::fputs(name.c_str(), g_outputFile); s_lastOpName = name; } @@ -119,8 +108,7 @@ void PrintOp(int wait, std::string name, const char *format, ...) PrintWait(wait); } -void PrintByte(const char *format, ...) -{ +void PrintByte(const char* format, ...) { std::va_list args; va_start(args, format); std::fprintf(g_outputFile, "\t.byte\t"); @@ -132,8 +120,7 @@ void PrintByte(const char *format, ...) va_end(args); } -void PrintWord(const char *format, ...) -{ +void PrintWord(const char* format, ...) { std::va_list args; va_start(args, format); std::fprintf(g_outputFile, "\t .word\t"); @@ -142,8 +129,7 @@ void PrintWord(const char *format, ...) va_end(args); } -void PrintNote(const Event& event) -{ +void PrintNote(const Event& event) { int note = event.note; int velocity = g_noteVelocityLUT[event.param1]; int duration = -1; @@ -173,8 +159,7 @@ void PrintNote(const Event& event) bool noteChanged = true; bool velocityChanged = true; - if (g_compressionEnabled) - { + if (g_compressionEnabled) { noteChanged = (note != s_lastNote); velocityChanged = (velocity != s_lastVelocity); } @@ -184,8 +169,7 @@ void PrintNote(const Event& event) else s_lastOpName = ""; - if (noteChanged || velocityChanged || (gateTimeParam > 0)) - { + if (noteChanged || velocityChanged || (gateTimeParam > 0)) { s_lastNote = note; char noteBuf[16]; @@ -197,20 +181,15 @@ void PrintNote(const Event& event) char velocityBuf[16]; - if (velocityChanged || (gateTimeParam > 0)) - { + if (velocityChanged || (gateTimeParam > 0)) { s_lastVelocity = velocity; std::snprintf(velocityBuf, sizeof(velocityBuf), ", v%03u", velocity); - } - else - { + } else { velocityBuf[0] = 0; } PrintOp(event.time, opName, "%s%s%s", noteBuf, velocityBuf, gtpBuf); - } - else - { + } else { PrintOp(event.time, opName, 0); } @@ -218,20 +197,16 @@ void PrintNote(const Event& event) s_velocityChanged = velocityChanged; } -void PrintEndOfTieOp(const Event& event) -{ +void PrintEndOfTieOp(const Event& event) { int note = event.note; bool noteChanged = (note != s_lastNote); if (!noteChanged || !s_noteChanged) s_lastOpName = ""; - if (!noteChanged && g_compressionEnabled) - { + if (!noteChanged && g_compressionEnabled) { PrintOp(event.time, "EOT ", nullptr); - } - else - { + } else { s_lastNote = note; if (note >= 24) PrintOp(event.time, "EOT ", g_noteTable[note % 12], note / 12 - 2); @@ -242,181 +217,174 @@ void PrintEndOfTieOp(const Event& event) s_noteChanged = noteChanged; } -void PrintSeqLoopLabel(const Event& event) -{ +void PrintSeqLoopLabel(const Event& event) { s_blockNum = event.param1 + 1; std::fprintf(g_outputFile, "%s_%u_B%u::\n", g_asmLabel.c_str(), g_agbTrack, s_blockNum); PrintWait(event.time); ResetTrackVars(); } -void PrintMemAcc(const Event& event) -{ - switch (s_memaccOp) - { - case 0x00: - PrintByte("MEMACC, mem_set, 0x%02X, %u", s_memaccParam1, event.param2); - break; - case 0x01: - PrintByte("MEMACC, mem_add, 0x%02X, %u", s_memaccParam1, event.param2); - break; - case 0x02: - PrintByte("MEMACC, mem_sub, 0x%02X, %u", s_memaccParam1, event.param2); - break; - case 0x03: - PrintByte("MEMACC, mem_mem_set, 0x%02X, 0x%02X", s_memaccParam1, event.param2); - break; - case 0x04: - PrintByte("MEMACC, mem_mem_add, 0x%02X, 0x%02X", s_memaccParam1, event.param2); - break; - case 0x05: - PrintByte("MEMACC, mem_mem_sub, 0x%02X, 0x%02X", s_memaccParam1, event.param2); - break; - // TODO: everything else - case 0x06: - break; - case 0x07: - break; - case 0x08: - break; - case 0x09: - break; - case 0x0A: - break; - case 0x0B: - break; - case 0x0C: - break; - case 0x0D: - break; - case 0x0E: - break; - case 0x0F: - break; - case 0x10: - break; - case 0x11: - break; - case 0x46: - break; - case 0x47: - break; - case 0x48: - break; - case 0x49: - break; - case 0x4A: - break; - case 0x4B: - break; - case 0x4C: - break; - case 0x4D: - break; - case 0x4E: - break; - case 0x4F: - break; - case 0x50: - break; - case 0x51: - break; - default: - break; +void PrintMemAcc(const Event& event) { + switch (s_memaccOp) { + case 0x00: + PrintByte("MEMACC, mem_set, 0x%02X, %u", s_memaccParam1, event.param2); + break; + case 0x01: + PrintByte("MEMACC, mem_add, 0x%02X, %u", s_memaccParam1, event.param2); + break; + case 0x02: + PrintByte("MEMACC, mem_sub, 0x%02X, %u", s_memaccParam1, event.param2); + break; + case 0x03: + PrintByte("MEMACC, mem_mem_set, 0x%02X, 0x%02X", s_memaccParam1, event.param2); + break; + case 0x04: + PrintByte("MEMACC, mem_mem_add, 0x%02X, 0x%02X", s_memaccParam1, event.param2); + break; + case 0x05: + PrintByte("MEMACC, mem_mem_sub, 0x%02X, 0x%02X", s_memaccParam1, event.param2); + break; + // TODO: everything else + case 0x06: + break; + case 0x07: + break; + case 0x08: + break; + case 0x09: + break; + case 0x0A: + break; + case 0x0B: + break; + case 0x0C: + break; + case 0x0D: + break; + case 0x0E: + break; + case 0x0F: + break; + case 0x10: + break; + case 0x11: + break; + case 0x46: + break; + case 0x47: + break; + case 0x48: + break; + case 0x49: + break; + case 0x4A: + break; + case 0x4B: + break; + case 0x4C: + break; + case 0x4D: + break; + case 0x4E: + break; + case 0x4F: + break; + case 0x50: + break; + case 0x51: + break; + default: + break; } PrintWait(event.time); } -void PrintExtendedOp(const Event& event) -{ +void PrintExtendedOp(const Event& event) { // TODO: support for other extended commands - switch (s_extendedCommand) - { - case 0x08: - PrintOp(event.time, "XCMD ", "xIECV , %u", event.param2); - break; - case 0x09: - PrintOp(event.time, "XCMD ", "xIECL , %u", event.param2); - break; - default: - PrintWait(event.time); - break; + switch (s_extendedCommand) { + case 0x08: + PrintOp(event.time, "XCMD ", "xIECV , %u", event.param2); + break; + case 0x09: + PrintOp(event.time, "XCMD ", "xIECL , %u", event.param2); + break; + default: + PrintWait(event.time); + break; } } -void PrintControllerOp(const Event& event) -{ - switch (event.param1) - { - case 0x01: - PrintOp(event.time, "MOD ", "%u", event.param2); - break; - case 0x07: - PrintOp(event.time, "VOL ", "%u*%s_mvl/mxv", event.param2, g_asmLabel.c_str()); - break; - case 0x0A: - PrintOp(event.time, "PAN ", "c_v%+d", event.param2 - 64); - break; - case 0x0C: - case 0x10: - PrintMemAcc(event); - break; - case 0x0D: - s_memaccOp = event.param2; - PrintWait(event.time); - break; - case 0x0E: - s_memaccParam1 = event.param2; - PrintWait(event.time); - break; - case 0x0F: - s_memaccParam2 = event.param2; - PrintWait(event.time); - break; - case 0x11: - std::fprintf(g_outputFile, "%s_%u_L%u::\n", g_asmLabel.c_str(), g_agbTrack, event.param2); - PrintWait(event.time); - ResetTrackVars(); - break; - case 0x14: - PrintOp(event.time, "BENDR ", "%u", event.param2); - break; - case 0x15: - PrintOp(event.time, "LFOS ", "%u", event.param2); - break; - case 0x16: - PrintOp(event.time, "MODT ", "%u", event.param2); - break; - case 0x18: - PrintOp(event.time, "TUNE ", "c_v%+d", event.param2 - 64); - break; - case 0x1A: - PrintOp(event.time, "LFODL ", "%u", event.param2); - break; - case 0x1D: - case 0x1F: - PrintExtendedOp(event); - break; - case 0x1E: - s_extendedCommand = event.param2; - // TODO: loop op - break; - case 0x21: - case 0x27: - PrintByte("PRIO , %u", event.param2); - PrintWait(event.time); - break; - default: - PrintWait(event.time); - break; +void PrintControllerOp(const Event& event) { + switch (event.param1) { + case 0x01: + PrintOp(event.time, "MOD ", "%u", event.param2); + break; + case 0x07: + PrintOp(event.time, "VOL ", "%u*%s_mvl/mxv", event.param2, g_asmLabel.c_str()); + break; + case 0x0A: + PrintOp(event.time, "PAN ", "c_v%+d", event.param2 - 64); + break; + case 0x0C: + case 0x10: + PrintMemAcc(event); + break; + case 0x0D: + s_memaccOp = event.param2; + PrintWait(event.time); + break; + case 0x0E: + s_memaccParam1 = event.param2; + PrintWait(event.time); + break; + case 0x0F: + s_memaccParam2 = event.param2; + PrintWait(event.time); + break; + case 0x11: + std::fprintf(g_outputFile, "%s_%u_L%u::\n", g_asmLabel.c_str(), g_agbTrack, event.param2); + PrintWait(event.time); + ResetTrackVars(); + break; + case 0x14: + PrintOp(event.time, "BENDR ", "%u", event.param2); + break; + case 0x15: + PrintOp(event.time, "LFOS ", "%u", event.param2); + break; + case 0x16: + PrintOp(event.time, "MODT ", "%u", event.param2); + break; + case 0x18: + PrintOp(event.time, "TUNE ", "c_v%+d", event.param2 - 64); + break; + case 0x1A: + PrintOp(event.time, "LFODL ", "%u", event.param2); + break; + case 0x1D: + case 0x1F: + PrintExtendedOp(event); + break; + case 0x1E: + s_extendedCommand = event.param2; + // TODO: loop op + break; + case 0x21: + case 0x27: + PrintByte("PRIO , %u", event.param2); + PrintWait(event.time); + break; + default: + PrintWait(event.time); + break; } } -void PrintAgbTrack(std::vector<Event>& events) -{ - std::fprintf(g_outputFile, "\n@**************** Track %u (Midi-Chn.%u) ****************@\n\n", g_agbTrack, g_midiChan + 1); +void PrintAgbTrack(std::vector<Event>& events) { + std::fprintf(g_outputFile, "\n@**************** Track %u (Midi-Chn.%u) ****************@\n\n", g_agbTrack, + g_midiChan + 1); std::fprintf(g_outputFile, "%s_%u::\n", g_asmLabel.c_str(), g_agbTrack); int wholeNoteCount = 0; @@ -426,13 +394,11 @@ void PrintAgbTrack(std::vector<Event>& events) bool foundVolBeforeNote = false; - for (const Event& event : events) - { + for (const Event& event : events) { if (event.type == EventType::Note) break; - if (event.type == EventType::Controller && event.param1 == 0x07) - { + if (event.type == EventType::Controller && event.param1 == 0x07) { foundVolBeforeNote = true; break; } @@ -444,12 +410,10 @@ void PrintAgbTrack(std::vector<Event>& events) PrintWait(g_initialWait); PrintByte("KEYSH , %s_key%+d", g_asmLabel.c_str(), 0); - for (unsigned i = 0; events[i].type != EventType::EndOfTrack; i++) - { + for (unsigned i = 0; events[i].type != EventType::EndOfTrack; i++) { const Event& event = events[i]; - if (IsPatternBoundary(event.type)) - { + if (IsPatternBoundary(event.type)) { if (s_inPattern) PrintByte("PEND"); s_inPattern = false; @@ -458,75 +422,73 @@ void PrintAgbTrack(std::vector<Event>& events) if (event.type == EventType::WholeNoteMark || event.type == EventType::Pattern) std::fprintf(g_outputFile, "@ %03d ----------------------------------------\n", wholeNoteCount++); - switch (event.type) - { - case EventType::Note: - PrintNote(event); - break; - case EventType::EndOfTie: - PrintEndOfTieOp(event); - break; - case EventType::Label: - PrintSeqLoopLabel(event); - break; - case EventType::LoopEnd: - PrintByte("GOTO"); - PrintWord("%s_%u_B%u", g_asmLabel.c_str(), g_agbTrack, loopEndBlockNum); - //PrintSeqLoopLabel(event); // Breaks same note in EOT bgmCrenelStorm 0xDD4356 - PrintWait(event.time); // instead just print the wait - break; - case EventType::LoopEndBegin: - PrintByte("GOTO"); - PrintWord("%s_%u_B%u", g_asmLabel.c_str(), g_agbTrack, loopEndBlockNum); - PrintSeqLoopLabel(event); - loopEndBlockNum = s_blockNum; - break; - case EventType::LoopBegin: - PrintSeqLoopLabel(event); - loopEndBlockNum = s_blockNum; - break; - case EventType::WholeNoteMark: - if (event.param2 & 0x80000000) - { - std::fprintf(g_outputFile, "%s_%u_%03lu::\n", g_asmLabel.c_str(), g_agbTrack, (unsigned long)(event.param2 & 0x7FFFFFFF)); - ResetTrackVars(); - s_inPattern = true; - } - PrintWait(event.time); - break; - case EventType::Pattern: - PrintByte("PATT"); - PrintWord("%s_%u_%03lu", g_asmLabel.c_str(), g_agbTrack, event.param2); + switch (event.type) { + case EventType::Note: + PrintNote(event); + break; + case EventType::EndOfTie: + PrintEndOfTieOp(event); + break; + case EventType::Label: + PrintSeqLoopLabel(event); + break; + case EventType::LoopEnd: + PrintByte("GOTO"); + PrintWord("%s_%u_B%u", g_asmLabel.c_str(), g_agbTrack, loopEndBlockNum); + // PrintSeqLoopLabel(event); // Breaks same note in EOT bgmCrenelStorm 0xDD4356 + PrintWait(event.time); // instead just print the wait + break; + case EventType::LoopEndBegin: + PrintByte("GOTO"); + PrintWord("%s_%u_B%u", g_asmLabel.c_str(), g_agbTrack, loopEndBlockNum); + PrintSeqLoopLabel(event); + loopEndBlockNum = s_blockNum; + break; + case EventType::LoopBegin: + PrintSeqLoopLabel(event); + loopEndBlockNum = s_blockNum; + break; + case EventType::WholeNoteMark: + if (event.param2 & 0x80000000) { + std::fprintf(g_outputFile, "%s_%u_%03lu::\n", g_asmLabel.c_str(), g_agbTrack, + (unsigned long)(event.param2 & 0x7FFFFFFF)); + ResetTrackVars(); + s_inPattern = true; + } + PrintWait(event.time); + break; + case EventType::Pattern: + PrintByte("PATT"); + PrintWord("%s_%u_%03lu", g_asmLabel.c_str(), g_agbTrack, event.param2); + + while (!IsPatternBoundary(events[i + 1].type)) + i++; - while (!IsPatternBoundary(events[i + 1].type)) - i++; - - ResetTrackVars(); - break; - case EventType::Tempo: - PrintByte("TEMPO , %u*%s_tbs/2", 60000000 / event.param2, g_asmLabel.c_str()); - PrintWait(event.time); - break; - case EventType::InstrumentChange: - PrintOp(event.time, "VOICE ", "%u", event.param1); - break; - case EventType::PitchBend: - PrintOp(event.time, "BEND ", "c_v%+d", event.param2 - 64); - break; - case EventType::Controller: - PrintControllerOp(event); - break; - default: - PrintWait(event.time); - break; + ResetTrackVars(); + break; + case EventType::Tempo: + PrintByte("TEMPO , %u*%s_tbs/2", 60000000 / event.param2, g_asmLabel.c_str()); + PrintWait(event.time); + break; + case EventType::InstrumentChange: + PrintOp(event.time, "VOICE ", "%u", event.param1); + break; + case EventType::PitchBend: + PrintOp(event.time, "BEND ", "c_v%+d", event.param2 - 64); + break; + case EventType::Controller: + PrintControllerOp(event); + break; + default: + PrintWait(event.time); + break; } } PrintByte("FINE"); } -void PrintAgbFooter() -{ +void PrintAgbFooter() { int trackCount = g_agbTrack - 1; std::fprintf(g_outputFile, "\n@******************************************************@\n"); diff --git a/tools/src/mid2agb/error.cpp b/tools/src/mid2agb/error.cpp index 13e38ffa..d824ae86 100755..100644 --- a/tools/src/mid2agb/error.cpp +++ b/tools/src/mid2agb/error.cpp @@ -23,8 +23,7 @@ #include <cstdarg> // Reports an error diagnostic and terminates the program. -[[noreturn]] void RaiseError(const char* format, ...) -{ +[[noreturn]] void RaiseError(const char* format, ...) { const int bufferSize = 1024; char buffer[bufferSize]; std::va_list args; diff --git a/tools/src/mid2agb/main.cpp b/tools/src/mid2agb/main.cpp index ea2b294a..6436b5a1 100755..100644 --- a/tools/src/mid2agb/main.cpp +++ b/tools/src/mid2agb/main.cpp @@ -42,52 +42,44 @@ int g_clocksPerBeat = 1; bool g_exactGateTime = false; bool g_compressionEnabled = true; -[[noreturn]] static void PrintUsage() -{ - std::printf( - "Usage: MID2AGB name [options]\n" - "\n" - " input_file filename(.mid) of MIDI file\n" - " output_file filename(.s) for AGB file (default:input_file)\n" - "\n" - "options -L??? label for assembler (default:output_file)\n" - " -V??? master volume (default:127)\n" - " -G??? voice group number (default:0)\n" - " -P??? priority (default:0)\n" - " -R??? reverb (default:off)\n" - " -X 48 clocks/beat (default:24 clocks/beat)\n" - " -E exact gate-time\n" - " -N no compression\n" - ); +[[noreturn]] static void PrintUsage() { + std::printf("Usage: MID2AGB name [options]\n" + "\n" + " input_file filename(.mid) of MIDI file\n" + " output_file filename(.s) for AGB file (default:input_file)\n" + "\n" + "options -L??? label for assembler (default:output_file)\n" + " -V??? master volume (default:127)\n" + " -G??? voice group number (default:0)\n" + " -P??? priority (default:0)\n" + " -R??? reverb (default:off)\n" + " -X 48 clocks/beat (default:24 clocks/beat)\n" + " -E exact gate-time\n" + " -N no compression\n"); std::exit(1); } -static std::string StripExtension(std::string s) -{ +static std::string StripExtension(std::string s) { std::size_t pos = s.find_last_of('.'); - if (pos > 0 && pos != std::string::npos) - { + if (pos > 0 && pos != std::string::npos) { s = s.substr(0, pos); } return s; } -static std::string GetExtension(std::string s) -{ +static std::string GetExtension(std::string s) { std::size_t pos = s.find_last_of('.'); - if (pos > 0 && pos != std::string::npos) - { + if (pos > 0 && pos != std::string::npos) { return s.substr(pos + 1); } return ""; } -static std::string BaseName(std::string s) -{ +static std::string BaseName(std::string s) { std::size_t posAfterSlash = s.find_last_of("/\\"); if (posAfterSlash == std::string::npos) @@ -102,11 +94,10 @@ static std::string BaseName(std::string s) return s; } -static const char *GetArgument(int argc, char **argv, int& index) -{ +static const char* GetArgument(int argc, char** argv, int& index) { assert(index >= 0 && index < argc); - const char *option = argv[index]; + const char* option = argv[index]; assert(option != nullptr); assert(option[0] == '-'); @@ -116,77 +107,68 @@ static const char *GetArgument(int argc, char **argv, int& index) return option + 2; // Otherwise, try to get the next arg. - if (index + 1 < argc) - { + if (index + 1 < argc) { index++; return argv[index]; - } - else - { + } else { return nullptr; } } -int main(int argc, char** argv) -{ +int main(int argc, char** argv) { std::string inputFilename; std::string outputFilename; - for (int i = 1; i < argc; i++) - { - const char *option = argv[i]; - - if (option[0] == '-' && option[1] != '\0') - { - const char *arg; - - switch (std::toupper(option[1])) - { - case 'E': - g_exactGateTime = true; - break; - case 'G': - arg = GetArgument(argc, argv, i); - if (arg == nullptr) - PrintUsage(); - g_voiceGroup = std::stoi(arg); - break; - case 'L': - arg = GetArgument(argc, argv, i); - if (arg == nullptr) - PrintUsage(); - g_asmLabel = arg; - break; - case 'N': - g_compressionEnabled = false; - break; - case 'P': - arg = GetArgument(argc, argv, i); - if (arg == nullptr) + for (int i = 1; i < argc; i++) { + const char* option = argv[i]; + + if (option[0] == '-' && option[1] != '\0') { + const char* arg; + + switch (std::toupper(option[1])) { + case 'E': + g_exactGateTime = true; + break; + case 'G': + arg = GetArgument(argc, argv, i); + if (arg == nullptr) + PrintUsage(); + g_voiceGroup = std::stoi(arg); + break; + case 'L': + arg = GetArgument(argc, argv, i); + if (arg == nullptr) + PrintUsage(); + g_asmLabel = arg; + break; + case 'N': + g_compressionEnabled = false; + break; + case 'P': + arg = GetArgument(argc, argv, i); + if (arg == nullptr) + PrintUsage(); + g_priority = std::stoi(arg); + break; + case 'R': + arg = GetArgument(argc, argv, i); + if (arg == nullptr) + PrintUsage(); + g_reverb = std::stoi(arg); + break; + case 'V': + arg = GetArgument(argc, argv, i); + if (arg == nullptr) + PrintUsage(); + g_masterVolume = std::stoi(arg); + break; + case 'X': + g_clocksPerBeat = 2; + break; + default: PrintUsage(); - g_priority = std::stoi(arg); - break; - case 'R': - arg = GetArgument(argc, argv, i); - if (arg == nullptr) - PrintUsage(); - g_reverb = std::stoi(arg); - break; - case 'V': - arg = GetArgument(argc, argv, i); - if (arg == nullptr) - PrintUsage(); - g_masterVolume = std::stoi(arg); - break; - case 'X': - g_clocksPerBeat = 2; - break; - default: - PrintUsage(); } - } - else - { + } else { if (inputFilename.empty()) inputFilename = argv[i]; else if (outputFilename.empty()) diff --git a/tools/src/mid2agb/midi.cpp b/tools/src/mid2agb/midi.cpp index d6e7f391..a082fecf 100755..100644 --- a/tools/src/mid2agb/midi.cpp +++ b/tools/src/mid2agb/midi.cpp @@ -30,8 +30,7 @@ #include "agb.h" #include "tables.h" -enum class MidiEventCategory -{ +enum class MidiEventCategory { Control, SysEx, Meta, @@ -54,20 +53,17 @@ static int s_minNote; static int s_maxNote; static int s_runningStatus; -void Seek(long offset) -{ +void Seek(long offset) { if (std::fseek(g_inputFile, offset, SEEK_SET) != 0) RaiseError("failed to seek to %l", offset); } -void Skip(long offset) -{ +void Skip(long offset) { if (std::fseek(g_inputFile, offset, SEEK_CUR) != 0) RaiseError("failed to skip %l bytes", offset); } -std::string ReadSignature() -{ +std::string ReadSignature() { char signature[4]; if (std::fread(signature, 4, 1, g_inputFile) != 1) @@ -76,8 +72,7 @@ std::string ReadSignature() return std::string(signature, 4); } -std::uint32_t ReadInt8() -{ +std::uint32_t ReadInt8() { int c = std::fgetc(g_inputFile); if (c < 0) @@ -86,16 +81,14 @@ std::uint32_t ReadInt8() return c; } -std::uint32_t ReadInt16() -{ +std::uint32_t ReadInt16() { std::uint32_t val = 0; val |= ReadInt8() << 8; val |= ReadInt8(); return val; } -std::uint32_t ReadInt24() -{ +std::uint32_t ReadInt24() { std::uint32_t val = 0; val |= ReadInt8() << 16; val |= ReadInt8() << 8; @@ -103,8 +96,7 @@ std::uint32_t ReadInt24() return val; } -std::uint32_t ReadInt32() -{ +std::uint32_t ReadInt32() { std::uint32_t val = 0; val |= ReadInt8() << 24; val |= ReadInt8() << 16; @@ -113,13 +105,11 @@ std::uint32_t ReadInt32() return val; } -std::uint32_t ReadVLQ() -{ +std::uint32_t ReadVLQ() { std::uint32_t val = 0; std::uint32_t c; - do - { + do { c = ReadInt8(); val <<= 7; val |= (c & 0x7F); @@ -128,8 +118,7 @@ std::uint32_t ReadVLQ() return val; } -void ReadMidiFileHeader() -{ +void ReadMidiFileHeader() { Seek(0); if (ReadSignature() != "MThd") @@ -153,8 +142,7 @@ void ReadMidiFileHeader() RaiseError("unsupported MIDI time division (%d)", g_midiTimeDiv); } -long ReadMidiTrackHeader(long offset) -{ +long ReadMidiTrackHeader(long offset) { Seek(offset); if (ReadSignature() != "MTrk") @@ -167,82 +155,65 @@ long ReadMidiTrackHeader(long offset) return size + 8; } -void StartTrack() -{ +void StartTrack() { Seek(s_trackDataStart); s_absoluteTime = 0; s_runningStatus = 0; } -void SkipEventData() -{ +void SkipEventData() { Skip(ReadVLQ()); } -void DetermineEventCategory(MidiEventCategory& category, int& typeChan, int& size) -{ +void DetermineEventCategory(MidiEventCategory& category, int& typeChan, int& size) { typeChan = ReadInt8(); - if (typeChan < 0x80) - { + if (typeChan < 0x80) { // If data byte was found, use the running status. ungetc(typeChan, g_inputFile); typeChan = s_runningStatus; } - if (typeChan == 0xFF) - { + if (typeChan == 0xFF) { category = MidiEventCategory::Meta; size = 0; s_runningStatus = 0; - } - else if (typeChan >= 0xF0) - { + } else if (typeChan >= 0xF0) { category = MidiEventCategory::SysEx; size = 0; s_runningStatus = 0; - } - else if (typeChan >= 0x80) - { + } else if (typeChan >= 0x80) { category = MidiEventCategory::Control; - switch (typeChan >> 4) - { - case 0xC: - case 0xD: - size = 1; - break; - default: - size = 2; - break; + switch (typeChan >> 4) { + case 0xC: + case 0xD: + size = 1; + break; + default: + size = 2; + break; } s_runningStatus = typeChan; - } - else - { + } else { category = MidiEventCategory::Invalid; } } -void MakeBlockEvent(Event& event, EventType type) -{ +void MakeBlockEvent(Event& event, EventType type) { event.type = type; event.param1 = s_blockCount++; event.param2 = 0; } -std::string ReadEventText() -{ +std::string ReadEventText() { char buffer[2]; std::uint32_t length = ReadVLQ(); - if (length <= 2) - { + if (length <= 2) { if (fread(buffer, length, 1, g_inputFile) != 1) RaiseError("failed to read event text"); - } - else - { + } else { Skip(length); length = 0; } @@ -250,8 +221,7 @@ std::string ReadEventText() return std::string(buffer, length); } -bool ReadSeqEvent(Event& event) -{ +bool ReadSeqEvent(Event& event) { s_absoluteTime += ReadVLQ(); event.time = s_absoluteTime; @@ -261,14 +231,12 @@ bool ReadSeqEvent(Event& event) DetermineEventCategory(category, typeChan, size); - if (category == MidiEventCategory::Control) - { + if (category == MidiEventCategory::Control) { Skip(size); return false; } - if (category == MidiEventCategory::SysEx) - { + if (category == MidiEventCategory::SysEx) { SkipEventData(); return false; } @@ -279,8 +247,7 @@ bool ReadSeqEvent(Event& event) // meta event int metaEventType = ReadInt8(); - if (metaEventType >= 1 && metaEventType <= 7) - { + if (metaEventType >= 1 && metaEventType <= 7) { // text event std::string text = ReadEventText(); @@ -294,69 +261,63 @@ bool ReadSeqEvent(Event& event) MakeBlockEvent(event, EventType::Label); else return false; - } - else - { - switch (metaEventType) - { - case 0x2F: // end of track - SkipEventData(); - event.type = EventType::EndOfTrack; - event.param1 = 0; - event.param2 = 0; - break; - case 0x51: // tempo - if (ReadVLQ() != 3) - RaiseError("invalid tempo size"); - - event.type = EventType::Tempo; - event.param1 = 0; - event.param2 = ReadInt24(); - break; - case 0x58: // time signature - { - if (ReadVLQ() != 4) - RaiseError("invalid time signature size"); + } else { + switch (metaEventType) { + case 0x2F: // end of track + SkipEventData(); + event.type = EventType::EndOfTrack; + event.param1 = 0; + event.param2 = 0; + break; + case 0x51: // tempo + if (ReadVLQ() != 3) + RaiseError("invalid tempo size"); + + event.type = EventType::Tempo; + event.param1 = 0; + event.param2 = ReadInt24(); + break; + case 0x58: // time signature + { + if (ReadVLQ() != 4) + RaiseError("invalid time signature size"); - int numerator = ReadInt8(); - int denominatorExponent = ReadInt8(); + int numerator = ReadInt8(); + int denominatorExponent = ReadInt8(); - if (denominatorExponent >= 16) - RaiseError("invalid time signature denominator"); + if (denominatorExponent >= 16) + RaiseError("invalid time signature denominator"); - Skip(2); // ignore other values + Skip(2); // ignore other values - int clockTicks = 96 * numerator * g_clocksPerBeat; - int denominator = 1 << denominatorExponent; - int timeSig = clockTicks / denominator; + int clockTicks = 96 * numerator * g_clocksPerBeat; + int denominator = 1 << denominatorExponent; + int timeSig = clockTicks / denominator; - if (timeSig <= 0 || timeSig >= 0x10000) - RaiseError("invalid time signature"); + if (timeSig <= 0 || timeSig >= 0x10000) + RaiseError("invalid time signature"); - event.type = EventType::TimeSignature; - event.param1 = 0; - event.param2 = timeSig; - break; - } - default: - SkipEventData(); - return false; + event.type = EventType::TimeSignature; + event.param1 = 0; + event.param2 = timeSig; + break; + } + default: + SkipEventData(); + return false; } } return true; } -void ReadSeqEvents() -{ +void ReadSeqEvents() { StartTrack(); - for (;;) - { + for (;;) { Event event = {}; - if (ReadSeqEvent(event)) - { + if (ReadSeqEvent(event)) { s_seqEvents.push_back(event); if (event.type == EventType::EndOfTrack) @@ -365,8 +326,7 @@ void ReadSeqEvents() } } -bool CheckNoteEnd(Event& event) -{ +bool CheckNoteEnd(Event& event) { event.param2 += ReadVLQ(); MidiEventCategory category; @@ -375,50 +335,45 @@ bool CheckNoteEnd(Event& event) DetermineEventCategory(category, typeChan, size); - if (category == MidiEventCategory::Control) - { + if (category == MidiEventCategory::Control) { int chan = typeChan & 0xF; - if (chan != g_midiChan) - { + if (chan != g_midiChan) { Skip(size); return false; } - switch (typeChan & 0xF0) - { - case 0x80: // note off - { - int note = ReadInt8(); - ReadInt8(); // ignore velocity - if (note == event.note) - return true; - break; - } - case 0x90: // note on - { - int note = ReadInt8(); - int velocity = ReadInt8(); - if (velocity == 0 && note == event.note) - return true; - break; - } - default: - Skip(size); - break; + switch (typeChan & 0xF0) { + case 0x80: // note off + { + int note = ReadInt8(); + ReadInt8(); // ignore velocity + if (note == event.note) + return true; + break; + } + case 0x90: // note on + { + int note = ReadInt8(); + int velocity = ReadInt8(); + if (velocity == 0 && note == event.note) + return true; + break; + } + default: + Skip(size); + break; } return false; } - if (category == MidiEventCategory::SysEx) - { + if (category == MidiEventCategory::SysEx) { SkipEventData(); return false; } - if (category == MidiEventCategory::Meta) - { + if (category == MidiEventCategory::Meta) { int metaEventType = ReadInt8(); SkipEventData(); @@ -431,8 +386,7 @@ bool CheckNoteEnd(Event& event) RaiseError("invalid event"); } -void FindNoteEnd(Event& event) -{ +void FindNoteEnd(Event& event) { // Save the current file position and running status // which get modified by CheckNoteEnd. long startPos = ftell(g_inputFile); @@ -447,8 +401,7 @@ void FindNoteEnd(Event& event) s_runningStatus = savedRunningStatus; } -bool ReadTrackEvent(Event& event) -{ +bool ReadTrackEvent(Event& event) { s_absoluteTime += ReadVLQ(); event.time = s_absoluteTime; @@ -458,74 +411,66 @@ bool ReadTrackEvent(Event& event) DetermineEventCategory(category, typeChan, size); - if (category == MidiEventCategory::Control) - { + if (category == MidiEventCategory::Control) { int chan = typeChan & 0xF; - if (chan != g_midiChan) - { + if (chan != g_midiChan) { Skip(size); return false; } - switch (typeChan & 0xF0) - { - case 0x90: // note on - { - int note = ReadInt8(); - int velocity = ReadInt8(); - - if (velocity != 0) + switch (typeChan & 0xF0) { + case 0x90: // note on { - event.type = EventType::Note; - event.note = note; - event.param1 = velocity; - FindNoteEnd(event); - if (event.param2 > 0) - { - if (note < s_minNote) - s_minNote = note; - if (note > s_maxNote) - s_maxNote = note; + int note = ReadInt8(); + int velocity = ReadInt8(); + + if (velocity != 0) { + event.type = EventType::Note; + event.note = note; + event.param1 = velocity; + FindNoteEnd(event); + if (event.param2 > 0) { + if (note < s_minNote) + s_minNote = note; + if (note > s_maxNote) + s_maxNote = note; + } } + break; } - break; - } - case 0xB0: // controller event - event.type = EventType::Controller; - event.param1 = ReadInt8(); // controller index - event.param2 = ReadInt8(); // value - break; - case 0xC0: // instrument change - event.type = EventType::InstrumentChange; - event.param1 = ReadInt8(); // instrument - event.param2 = 0; - break; - case 0xE0: // pitch bend - event.type = EventType::PitchBend; - event.param1 = ReadInt8(); - event.param2 = ReadInt8(); - break; - default: - Skip(size); - return false; + case 0xB0: // controller event + event.type = EventType::Controller; + event.param1 = ReadInt8(); // controller index + event.param2 = ReadInt8(); // value + break; + case 0xC0: // instrument change + event.type = EventType::InstrumentChange; + event.param1 = ReadInt8(); // instrument + event.param2 = 0; + break; + case 0xE0: // pitch bend + event.type = EventType::PitchBend; + event.param1 = ReadInt8(); + event.param2 = ReadInt8(); + break; + default: + Skip(size); + return false; } return true; } - if (category == MidiEventCategory::SysEx) - { + if (category == MidiEventCategory::SysEx) { SkipEventData(); return false; } - if (category == MidiEventCategory::Meta) - { + if (category == MidiEventCategory::Meta) { int metaEventType = ReadInt8(); - if (metaEventType >= 1 && metaEventType <= 7) - { + if (metaEventType >= 1 && metaEventType <= 7) { // text event std::string text = ReadEventText(); @@ -540,17 +485,13 @@ bool ReadTrackEvent(Event& event) else return false; return true; - } - else if (metaEventType == 0x2F) - { + } else if (metaEventType == 0x2F) { SkipEventData(); event.type = EventType::EndOfTrack; event.param1 = 0; event.param2 = 0; return true; - } - else - { + } else { SkipEventData(); } @@ -560,8 +501,7 @@ bool ReadTrackEvent(Event& event) RaiseError("invalid event"); } -void ReadTrackEvents() -{ +void ReadTrackEvents() { StartTrack(); s_trackEvents.clear(); @@ -569,12 +509,10 @@ void ReadTrackEvents() s_minNote = 0xFF; s_maxNote = 0; - for (;;) - { + for (;;) { Event event = {}; - if (ReadTrackEvent(event)) - { + if (ReadTrackEvent(event)) { s_trackEvents.push_back(event); if (event.type == EventType::EndOfTrack) @@ -583,8 +521,7 @@ void ReadTrackEvents() } } -bool EventCompare(const Event& event1, const Event& event2) -{ +bool EventCompare(const Event& event1, const Event& event2) { if (event1.time < event2.time) return true; @@ -606,8 +543,7 @@ bool EventCompare(const Event& event1, const Event& event2) if (event1Type > event2Type) return false; - if (event1.type == EventType::EndOfTie) - { + if (event1.type == EventType::EndOfTie) { if (event1.note < event2.note) return true; @@ -618,16 +554,14 @@ bool EventCompare(const Event& event1, const Event& event2) return false; } -std::unique_ptr<std::vector<Event>> MergeEvents() -{ +std::unique_ptr<std::vector<Event>> MergeEvents() { std::unique_ptr<std::vector<Event>> events(new std::vector<Event>()); unsigned trackEventPos = 0; unsigned seqEventPos = 0; - while (s_trackEvents[trackEventPos].type != EventType::EndOfTrack - && s_seqEvents[seqEventPos].type != EventType::EndOfTrack) - { + while (s_trackEvents[trackEventPos].type != EventType::EndOfTrack && + s_seqEvents[seqEventPos].type != EventType::EndOfTrack) { if (EventCompare(s_trackEvents[trackEventPos], s_seqEvents[seqEventPos])) events->push_back(s_trackEvents[trackEventPos++]); else @@ -649,14 +583,11 @@ std::unique_ptr<std::vector<Event>> MergeEvents() return events; } -void ConvertTimes(std::vector<Event>& events) -{ - for (Event& event : events) - { +void ConvertTimes(std::vector<Event>& events) { + for (Event& event : events) { event.time = (24 * g_clocksPerBeat * event.time) / g_midiTimeDiv; - if (event.type == EventType::Note) - { + if (event.type == EventType::Note) { event.param1 = g_noteVelocityLUT[event.param1]; std::uint32_t duration = (24 * g_clocksPerBeat * event.param2) / g_midiTimeDiv; @@ -682,8 +613,7 @@ void insertAtCorrectTimeFromEnd(const std::unique_ptr<std::vector<Event>>& event events->insert(events->begin(), event); } -std::unique_ptr<std::vector<Event>> InsertTimingEvents(std::vector<Event>& inEvents) -{ +std::unique_ptr<std::vector<Event>> InsertTimingEvents(std::vector<Event>& inEvents) { std::unique_ptr<std::vector<Event>> outEvents(new std::vector<Event>()); Event timingEvent = {}; @@ -691,18 +621,14 @@ std::unique_ptr<std::vector<Event>> InsertTimingEvents(std::vector<Event>& inEve timingEvent.type = EventType::TimeSignature; timingEvent.param2 = 96 * g_clocksPerBeat; - for (const Event& event : inEvents) - { - while (EventCompare(timingEvent, event)) - { + for (const Event& event : inEvents) { + while (EventCompare(timingEvent, event)) { outEvents->push_back(timingEvent); timingEvent.time += timingEvent.param2; } - if (event.type == EventType::TimeSignature) - { - if (g_agbTrack == 1 && event.param2 != timingEvent.param2) - { + if (event.type == EventType::TimeSignature) { + if (g_agbTrack == 1 && event.param2 != timingEvent.param2) { Event originalTimingEvent = event; originalTimingEvent.type = EventType::OriginalTimeSignature; outEvents->push_back(originalTimingEvent); @@ -717,23 +643,19 @@ std::unique_ptr<std::vector<Event>> InsertTimingEvents(std::vector<Event>& inEve return outEvents; } -std::unique_ptr<std::vector<Event>> SplitTime(std::vector<Event>& inEvents) -{ +std::unique_ptr<std::vector<Event>> SplitTime(std::vector<Event>& inEvents) { std::unique_ptr<std::vector<Event>> outEvents(new std::vector<Event>()); std::int32_t time = 0; - for (const Event& event : inEvents) - { + for (const Event& event : inEvents) { std::int32_t diff = event.time - time; - if (diff > 96) - { + if (diff > 96) { int wholeNoteCount = (diff - 1) / 96; diff -= 96 * wholeNoteCount; - for (int i = 0; i < wholeNoteCount; i++) - { + for (int i = 0; i < wholeNoteCount; i++) { time += 96; Event timeSplitEvent = {}; timeSplitEvent.time = time; @@ -744,8 +666,7 @@ std::unique_ptr<std::vector<Event>> SplitTime(std::vector<Event>& inEvents) std::int32_t lutValue = g_noteDurationLUT[diff]; - if (lutValue != diff) - { + if (lutValue != diff) { Event timeSplitEvent = {}; timeSplitEvent.time = time + lutValue; timeSplitEvent.type = EventType::TimeSplit; @@ -760,14 +681,11 @@ std::unique_ptr<std::vector<Event>> SplitTime(std::vector<Event>& inEvents) return outEvents; } -std::unique_ptr<std::vector<Event>> CreateTies(std::vector<Event>& inEvents) -{ +std::unique_ptr<std::vector<Event>> CreateTies(std::vector<Event>& inEvents) { std::unique_ptr<std::vector<Event>> outEvents(new std::vector<Event>()); - for (const Event& event : inEvents) - { - if (event.type == EventType::Note && event.param2 > 96) - { + for (const Event& event : inEvents) { + if (event.type == EventType::Note && event.param2 > 96) { Event tieEvent = event; tieEvent.param2 = -1; insertAtCorrectTimeFromEnd(outEvents, tieEvent); @@ -779,9 +697,7 @@ std::unique_ptr<std::vector<Event>> CreateTies(std::vector<Event>& inEvents) // directly insert at the correct position, so it does not need to be sorted later. // TODO rather keep eotEvent in queue until it's time is reached? insertAtCorrectTimeFromEnd(outEvents, eotEvent); - } - else - { + } else { insertAtCorrectTimeFromEnd(outEvents, event); } } @@ -789,25 +705,21 @@ std::unique_ptr<std::vector<Event>> CreateTies(std::vector<Event>& inEvents) return outEvents; } -void CalculateWaits(std::vector<Event>& events) -{ +void CalculateWaits(std::vector<Event>& events) { g_initialWait = events[0].time; int wholeNoteCount = 0; - for (unsigned i = 0; i < events.size() && events[i].type != EventType::EndOfTrack; i++) - { + for (unsigned i = 0; i < events.size() && events[i].type != EventType::EndOfTrack; i++) { events[i].time = events[i + 1].time - events[i].time; - if (events[i].type == EventType::TimeSignature) - { + if (events[i].type == EventType::TimeSignature) { events[i].type = EventType::WholeNoteMark; events[i].param2 = wholeNoteCount++; } } } -int CalculateCompressionScore(std::vector<Event>& events, int index) -{ +int CalculateCompressionScore(std::vector<Event>& events, int index) { int score = 0; std::uint8_t lastParam1 = events[index].param1; std::uint8_t lastVelocity = 0x80u; @@ -818,28 +730,23 @@ int CalculateCompressionScore(std::vector<Event>& events, int index) if (events[index].time > 0) score++; - for (int i = index + 1; !IsPatternBoundary(events[i].type); i++) - { - if (events[i].type == EventType::Note) - { + for (int i = index + 1; !IsPatternBoundary(events[i].type); i++) { + if (events[i].type == EventType::Note) { int val = 0; - if (events[i].note != lastNote) - { + if (events[i].note != lastNote) { val++; lastNote = events[i].note; } - if (events[i].param1 != lastVelocity) - { + if (events[i].param1 != lastVelocity) { val++; lastVelocity = events[i].param1; } std::int32_t duration = events[i].param2; - if (g_noteDurationLUT[duration] != lastDuration) - { + if (g_noteDurationLUT[duration] != lastDuration) { val++; lastDuration = g_noteDurationLUT[duration]; } @@ -851,24 +758,17 @@ int CalculateCompressionScore(std::vector<Event>& events, int index) val = 1; score += val; - } - else - { + } else { lastDuration = 0x80000000; - if (events[i].type == lastType) - { - if ((lastType != EventType::Controller && (int)lastType != 0x25 && lastType != EventType::EndOfTie) || events[i].param1 == lastParam1) - { + if (events[i].type == lastType) { + if ((lastType != EventType::Controller && (int)lastType != 0x25 && lastType != EventType::EndOfTie) || + events[i].param1 == lastParam1) { score++; - } - else - { + } else { score += 2; } - } - else - { + } else { score += 2; } } @@ -883,19 +783,15 @@ int CalculateCompressionScore(std::vector<Event>& events, int index) return score; } -bool IsCompressionMatch(std::vector<Event>& events, int index1, int index2) -{ - if (events[index1].type != events[index2].type || - events[index1].note != events[index2].note || - events[index1].param1 != events[index2].param1 || - events[index1].time != events[index2].time) +bool IsCompressionMatch(std::vector<Event>& events, int index1, int index2) { + if (events[index1].type != events[index2].type || events[index1].note != events[index2].note || + events[index1].param1 != events[index2].param1 || events[index1].time != events[index2].time) return false; index1++; index2++; - do - { + do { if (events[index1] != events[index2]) return false; @@ -906,20 +802,16 @@ bool IsCompressionMatch(std::vector<Event>& events, int index1, int index2) return IsPatternBoundary(events[index2].type); } -void CompressWholeNote(std::vector<Event>& events, int index) -{ - for (int j = index + 1; events[j].type != EventType::EndOfTrack; j++) - { - while (events[j].type != EventType::WholeNoteMark) - { +void CompressWholeNote(std::vector<Event>& events, int index) { + for (int j = index + 1; events[j].type != EventType::EndOfTrack; j++) { + while (events[j].type != EventType::WholeNoteMark) { j++; if (events[j].type == EventType::EndOfTrack) return; } - if (IsCompressionMatch(events, index, j)) - { + if (IsCompressionMatch(events, index, j)) { events[j].type = EventType::Pattern; events[j].param2 = events[index].param2 & 0x7FFFFFFF; events[index].param2 |= 0x80000000; @@ -927,27 +819,22 @@ void CompressWholeNote(std::vector<Event>& events, int index) } } -void Compress(std::vector<Event>& events) -{ - for (int i = 0; events[i].type != EventType::EndOfTrack; i++) - { - while (events[i].type != EventType::WholeNoteMark) - { +void Compress(std::vector<Event>& events) { + for (int i = 0; events[i].type != EventType::EndOfTrack; i++) { + while (events[i].type != EventType::WholeNoteMark) { i++; if (events[i].type == EventType::EndOfTrack) return; } - if (CalculateCompressionScore(events, i) >= 6) - { + if (CalculateCompressionScore(events, i) >= 6) { CompressWholeNote(events, i); } } } -void ReadMidiTracks() -{ +void ReadMidiTracks() { long trackHeaderStart = 14; ReadMidiTrackHeader(trackHeaderStart); @@ -955,16 +842,13 @@ void ReadMidiTracks() g_agbTrack = 1; - for (int midiTrack = 0; midiTrack < g_midiTrackCount; midiTrack++) - { + for (int midiTrack = 0; midiTrack < g_midiTrackCount; midiTrack++) { trackHeaderStart += ReadMidiTrackHeader(trackHeaderStart); - for (g_midiChan = 0; g_midiChan < 16; g_midiChan++) - { + for (g_midiChan = 0; g_midiChan < 16; g_midiChan++) { ReadTrackEvents(); - if (s_minNote != 0xFF) - { + if (s_minNote != 0xFF) { #ifdef DEBUG printf("Track%d = Midi-Ch.%d\n", g_agbTrack, g_midiChan + 1); #endif @@ -972,9 +856,9 @@ void ReadMidiTracks() std::unique_ptr<std::vector<Event>> events(MergeEvents()); // We don't need TEMPO in anything but track 1. - if (g_agbTrack == 1) - { - auto it = std::remove_if(s_seqEvents.begin(), s_seqEvents.end(), [](const Event& event) { return event.type == EventType::Tempo; }); + if (g_agbTrack == 1) { + auto it = std::remove_if(s_seqEvents.begin(), s_seqEvents.end(), + [](const Event& event) { return event.type == EventType::Tempo; }); s_seqEvents.erase(it, s_seqEvents.end()); } diff --git a/tools/src/mid2agb/midi.h b/tools/src/mid2agb/midi.h index 28c98f8f..5cfd1458 100755..100644 --- a/tools/src/mid2agb/midi.h +++ b/tools/src/mid2agb/midi.h @@ -23,14 +23,9 @@ #include <cstdint> -enum class MidiFormat -{ - SingleTrack, - MultiTrack -}; +enum class MidiFormat { SingleTrack, MultiTrack }; -enum class EventType -{ +enum class EventType { EndOfTie = 0x01, Label = 0x11, LoopEnd = 0x38, // To place it last if at the same time as other meta events, but before notes on the same frame @@ -50,25 +45,19 @@ enum class EventType EndOfTrack = 0xFF, }; -struct Event -{ +struct Event { std::int32_t time; EventType type; std::uint8_t note; std::uint8_t param1; std::int32_t param2; - bool operator==(const Event& other) - { - return (time == other.time - && type == other.type - && note == other.note - && param1 == other.param1 - && param2 == other.param2); + bool operator==(const Event& other) { + return (time == other.time && type == other.type && note == other.note && param1 == other.param1 && + param2 == other.param2); } - bool operator!=(const Event& other) - { + bool operator!=(const Event& other) { return !(*this == other); } }; @@ -79,8 +68,7 @@ void ReadMidiTracks(); extern int g_midiChan; extern std::int32_t g_initialWait; -inline bool IsPatternBoundary(EventType type) -{ +inline bool IsPatternBoundary(EventType type) { return type == EventType::EndOfTrack || (int)type <= 0x17; } diff --git a/tools/src/mid2agb/tables.cpp b/tools/src/mid2agb/tables.cpp index f254664a..f30f37c8 100755..100644 --- a/tools/src/mid2agb/tables.cpp +++ b/tools/src/mid2agb/tables.cpp @@ -20,18 +20,17 @@ #include "tables.h" -const int g_noteDurationLUT[] = -{ - 0, // 0 - 1, // 1 - 2, // 2 - 3, // 3 - 4, // 4 - 5, // 5 - 6, // 6 - 7, // 7 - 8, // 8 - 9, // 9 +const int g_noteDurationLUT[] = { + 0, // 0 + 1, // 1 + 2, // 2 + 3, // 3 + 4, // 4 + 5, // 5 + 6, // 6 + 7, // 7 + 8, // 8 + 9, // 9 10, // 10 11, // 11 12, // 12 @@ -121,105 +120,104 @@ const int g_noteDurationLUT[] = 96, // 96 }; -const int g_noteVelocityLUT[] = -{ - 0, // 0 - 4, // 1 - 4, // 2 - 4, // 3 - 4, // 4 - 8, // 5 - 8, // 6 - 8, // 7 - 8, // 8 - 12, // 9 - 12, // 10 - 12, // 11 - 12, // 12 - 16, // 13 - 16, // 14 - 16, // 15 - 16, // 16 - 20, // 17 - 20, // 18 - 20, // 19 - 20, // 20 - 24, // 21 - 24, // 22 - 24, // 23 - 24, // 24 - 28, // 25 - 28, // 26 - 28, // 27 - 28, // 28 - 32, // 29 - 32, // 30 - 32, // 31 - 32, // 32 - 36, // 33 - 36, // 34 - 36, // 35 - 36, // 36 - 40, // 37 - 40, // 38 - 40, // 39 - 40, // 40 - 44, // 41 - 44, // 42 - 44, // 43 - 44, // 44 - 48, // 45 - 48, // 46 - 48, // 47 - 48, // 48 - 52, // 49 - 52, // 50 - 52, // 51 - 52, // 52 - 56, // 53 - 56, // 54 - 56, // 55 - 56, // 56 - 60, // 57 - 60, // 58 - 60, // 59 - 60, // 60 - 64, // 61 - 64, // 62 - 64, // 63 - 64, // 64 - 68, // 65 - 68, // 66 - 68, // 67 - 68, // 68 - 72, // 69 - 72, // 70 - 72, // 71 - 72, // 72 - 76, // 73 - 76, // 74 - 76, // 75 - 76, // 76 - 80, // 77 - 80, // 78 - 80, // 79 - 80, // 80 - 84, // 81 - 84, // 82 - 84, // 83 - 84, // 84 - 88, // 85 - 88, // 86 - 88, // 87 - 88, // 88 - 92, // 89 - 92, // 90 - 92, // 91 - 92, // 92 - 96, // 93 - 96, // 94 - 96, // 95 - 96, // 96 +const int g_noteVelocityLUT[] = { + 0, // 0 + 4, // 1 + 4, // 2 + 4, // 3 + 4, // 4 + 8, // 5 + 8, // 6 + 8, // 7 + 8, // 8 + 12, // 9 + 12, // 10 + 12, // 11 + 12, // 12 + 16, // 13 + 16, // 14 + 16, // 15 + 16, // 16 + 20, // 17 + 20, // 18 + 20, // 19 + 20, // 20 + 24, // 21 + 24, // 22 + 24, // 23 + 24, // 24 + 28, // 25 + 28, // 26 + 28, // 27 + 28, // 28 + 32, // 29 + 32, // 30 + 32, // 31 + 32, // 32 + 36, // 33 + 36, // 34 + 36, // 35 + 36, // 36 + 40, // 37 + 40, // 38 + 40, // 39 + 40, // 40 + 44, // 41 + 44, // 42 + 44, // 43 + 44, // 44 + 48, // 45 + 48, // 46 + 48, // 47 + 48, // 48 + 52, // 49 + 52, // 50 + 52, // 51 + 52, // 52 + 56, // 53 + 56, // 54 + 56, // 55 + 56, // 56 + 60, // 57 + 60, // 58 + 60, // 59 + 60, // 60 + 64, // 61 + 64, // 62 + 64, // 63 + 64, // 64 + 68, // 65 + 68, // 66 + 68, // 67 + 68, // 68 + 72, // 69 + 72, // 70 + 72, // 71 + 72, // 72 + 76, // 73 + 76, // 74 + 76, // 75 + 76, // 76 + 80, // 77 + 80, // 78 + 80, // 79 + 80, // 80 + 84, // 81 + 84, // 82 + 84, // 83 + 84, // 84 + 88, // 85 + 88, // 86 + 88, // 87 + 88, // 88 + 92, // 89 + 92, // 90 + 92, // 91 + 92, // 92 + 96, // 93 + 96, // 94 + 96, // 95 + 96, // 96 100, // 97 100, // 98 100, // 99 @@ -253,34 +251,12 @@ const int g_noteVelocityLUT[] = 127, // 127 }; -const char* g_noteTable[] = -{ - "Cn%01u ", - "Cs%01u ", - "Dn%01u ", - "Ds%01u ", - "En%01u ", - "Fn%01u ", - "Fs%01u ", - "Gn%01u ", - "Gs%01u ", - "An%01u ", - "As%01u ", - "Bn%01u ", +const char* g_noteTable[] = { + "Cn%01u ", "Cs%01u ", "Dn%01u ", "Ds%01u ", "En%01u ", "Fn%01u ", + "Fs%01u ", "Gn%01u ", "Gs%01u ", "An%01u ", "As%01u ", "Bn%01u ", }; -const char* g_minusNoteTable[] = -{ - "CnM%01u", - "CsM%01u", - "DnM%01u", - "DsM%01u", - "EnM%01u", - "FnM%01u", - "FsM%01u", - "GnM%01u", - "GsM%01u", - "AnM%01u", - "AsM%01u", - "BnM%01u", +const char* g_minusNoteTable[] = { + "CnM%01u", "CsM%01u", "DnM%01u", "DsM%01u", "EnM%01u", "FnM%01u", + "FsM%01u", "GnM%01u", "GsM%01u", "AnM%01u", "AsM%01u", "BnM%01u", }; diff --git a/tools/src/preproc/asm_file.cpp b/tools/src/preproc/asm_file.cpp index 213a5135..30d6758f 100755..100644 --- a/tools/src/preproc/asm_file.cpp +++ b/tools/src/preproc/asm_file.cpp @@ -27,9 +27,8 @@ #include "utf8.h" #include "string_parser.h" -AsmFile::AsmFile(std::string filename) : m_filename(filename) -{ - FILE *fp = std::fopen(filename.c_str(), "rb"); +AsmFile::AsmFile(std::string filename) : m_filename(filename) { + FILE* fp = std::fopen(filename.c_str(), "rb"); if (fp == NULL) { // The include might be an asset. @@ -64,8 +63,7 @@ AsmFile::AsmFile(std::string filename) : m_filename(filename) RemoveComments(); } -AsmFile::AsmFile(AsmFile&& other) : m_filename(std::move(other.m_filename)) -{ +AsmFile::AsmFile(AsmFile&& other) : m_filename(std::move(other.m_filename)) { m_buffer = other.m_buffer; m_pos = other.m_pos; m_size = other.m_size; @@ -75,8 +73,7 @@ AsmFile::AsmFile(AsmFile&& other) : m_filename(std::move(other.m_filename)) other.m_buffer = nullptr; } -AsmFile::~AsmFile() -{ +AsmFile::~AsmFile() { delete[] m_buffer; } @@ -84,60 +81,44 @@ AsmFile::~AsmFile() // It stops upon encountering a null character, // which may or may not be the end of file marker. // If it's not, the error will be caught later. -void AsmFile::RemoveComments() -{ +void AsmFile::RemoveComments() { long pos = 0; char stringChar = 0; - for (;;) - { + for (;;) { if (m_buffer[pos] == 0) return; - if (stringChar != 0) - { - if (m_buffer[pos] == '\\' && m_buffer[pos + 1] == stringChar) - { + if (stringChar != 0) { + if (m_buffer[pos] == '\\' && m_buffer[pos + 1] == stringChar) { pos += 2; - } - else - { + } else { if (m_buffer[pos] == stringChar) stringChar = 0; pos++; } - } - else if (m_buffer[pos] == '@' && (pos == 0 || m_buffer[pos - 1] != '\\')) - { + } else if (m_buffer[pos] == '@' && (pos == 0 || m_buffer[pos - 1] != '\\')) { while (m_buffer[pos] != '\n' && m_buffer[pos] != 0) m_buffer[pos++] = ' '; - } - else if (m_buffer[pos] == '/' && m_buffer[pos + 1] == '*') - { + } else if (m_buffer[pos] == '/' && m_buffer[pos + 1] == '*') { m_buffer[pos++] = ' '; m_buffer[pos++] = ' '; - for (;;) - { + for (;;) { if (m_buffer[pos] == 0) return; - if (m_buffer[pos] == '*' && m_buffer[pos + 1] == '/') - { + if (m_buffer[pos] == '*' && m_buffer[pos + 1] == '/') { m_buffer[pos++] = ' '; m_buffer[pos++] = ' '; break; - } - else - { + } else { if (m_buffer[pos] != '\n') m_buffer[pos] = ' '; pos++; } } - } - else - { + } else { if (m_buffer[pos] == '"' || m_buffer[pos] == '\'') stringChar = m_buffer[pos]; pos++; @@ -147,8 +128,7 @@ void AsmFile::RemoveComments() // Checks if we're at a particular directive and if so, consumes it. // Returns whether the directive was found. -bool AsmFile::CheckForDirective(std::string name) -{ +bool AsmFile::CheckForDirective(std::string name) { long i; long length = static_cast<long>(name.length()); @@ -166,8 +146,7 @@ bool AsmFile::CheckForDirective(std::string name) // Checks if we're at a known directive and if so, consumes it. // Returns which directive was found. -Directive AsmFile::GetDirective() -{ +Directive AsmFile::GetDirective() { SkipWhitespace(); if (CheckForDirective(".include")) @@ -182,21 +161,18 @@ Directive AsmFile::GetDirective() // Checks if we're at label that ends with '::'. // Returns the name if so and an empty string if not. -std::string AsmFile::GetGlobalLabel() -{ +std::string AsmFile::GetGlobalLabel() { long start = m_pos; long pos = m_pos; - if (IsIdentifierStartingChar(m_buffer[pos])) - { + if (IsIdentifierStartingChar(m_buffer[pos])) { pos++; while (IsIdentifierChar(m_buffer[pos])) pos++; } - if (m_buffer[pos] == ':' && m_buffer[pos + 1] == ':') - { + if (m_buffer[pos] == ':' && m_buffer[pos + 1] == ':') { m_pos = pos + 2; ExpectEmptyRestOfLine(); return std::string(&m_buffer[start], pos - start); @@ -206,15 +182,13 @@ std::string AsmFile::GetGlobalLabel() } // Skips tabs and spaces. -void AsmFile::SkipWhitespace() -{ +void AsmFile::SkipWhitespace() { while (m_buffer[m_pos] == '\t' || m_buffer[m_pos] == ' ') m_pos++; } // Reads include path. -std::string AsmFile::ReadPath() -{ +std::string AsmFile::ReadPath() { SkipWhitespace(); if (m_buffer[m_pos] != '"') @@ -225,12 +199,10 @@ std::string AsmFile::ReadPath() int length = 0; long startPos = m_pos; - while (m_buffer[m_pos] != '"') - { + while (m_buffer[m_pos] != '"') { unsigned char c = m_buffer[m_pos++]; - if (c == 0) - { + if (c == 0) { if (m_pos >= m_size) RaiseError("unexpected EOF in include string"); else @@ -241,8 +213,7 @@ std::string AsmFile::ReadPath() RaiseError("unexpected character '\\x%02X' in include string", c); // Don't bother allowing any escape sequences. - if (c == '\\') - { + if (c == '\\') { c = m_buffer[m_pos]; RaiseError("unexpected escape '\\%c' in include string", c); } @@ -261,31 +232,23 @@ std::string AsmFile::ReadPath() } // Reads a charmap string. -int AsmFile::ReadString(unsigned char* s) -{ +int AsmFile::ReadString(unsigned char* s) { SkipWhitespace(); int length; StringParser stringParser(m_buffer, m_size); - try - { + try { m_pos += stringParser.ParseString(m_pos, s, length); - } - catch (std::runtime_error& e) - { - RaiseError(e.what()); - } + } catch (std::runtime_error& e) { RaiseError(e.what()); } SkipWhitespace(); - if (ConsumeComma()) - { + if (ConsumeComma()) { SkipWhitespace(); int padLength = ReadPadLength(); - while (length < padLength) - { + while (length < padLength) { s[length++] = 0; } } @@ -295,40 +258,13 @@ int AsmFile::ReadString(unsigned char* s) return length; } -int AsmFile::ReadBraille(unsigned char* s) -{ - static std::map<char, unsigned char> encoding = - { - { 'A', 0x01 }, - { 'B', 0x05 }, - { 'C', 0x03 }, - { 'D', 0x0B }, - { 'E', 0x09 }, - { 'F', 0x07 }, - { 'G', 0x0F }, - { 'H', 0x0D }, - { 'I', 0x06 }, - { 'J', 0x0E }, - { 'K', 0x11 }, - { 'L', 0x15 }, - { 'M', 0x13 }, - { 'N', 0x1B }, - { 'O', 0x19 }, - { 'P', 0x17 }, - { 'Q', 0x1F }, - { 'R', 0x1D }, - { 'S', 0x16 }, - { 'T', 0x1E }, - { 'U', 0x31 }, - { 'V', 0x35 }, - { 'W', 0x2E }, - { 'X', 0x33 }, - { 'Y', 0x3B }, - { 'Z', 0x39 }, - { ' ', 0x00 }, - { ',', 0x04 }, - { '.', 0x2C }, - { '$', 0xFF }, +int AsmFile::ReadBraille(unsigned char* s) { + static std::map<char, unsigned char> encoding = { + { 'A', 0x01 }, { 'B', 0x05 }, { 'C', 0x03 }, { 'D', 0x0B }, { 'E', 0x09 }, { 'F', 0x07 }, + { 'G', 0x0F }, { 'H', 0x0D }, { 'I', 0x06 }, { 'J', 0x0E }, { 'K', 0x11 }, { 'L', 0x15 }, + { 'M', 0x13 }, { 'N', 0x1B }, { 'O', 0x19 }, { 'P', 0x17 }, { 'Q', 0x1F }, { 'R', 0x1D }, + { 'S', 0x16 }, { 'T', 0x1E }, { 'U', 0x31 }, { 'V', 0x35 }, { 'W', 0x2E }, { 'X', 0x33 }, + { 'Y', 0x3B }, { 'Z', 0x39 }, { ' ', 0x00 }, { ',', 0x04 }, { '.', 0x2C }, { '$', 0xFF }, }; SkipWhitespace(); @@ -340,22 +276,17 @@ int AsmFile::ReadBraille(unsigned char* s) m_pos++; - while (m_buffer[m_pos] != '"') - { + while (m_buffer[m_pos] != '"') { if (length == kMaxStringLength) RaiseError("mapped string longer than %d bytes", kMaxStringLength); - if (m_buffer[m_pos] == '\\' && m_buffer[m_pos + 1] == 'n') - { + if (m_buffer[m_pos] == '\\' && m_buffer[m_pos + 1] == 'n') { s[length++] = 0xFE; m_pos += 2; - } - else - { + } else { char c = m_buffer[m_pos]; - if (encoding.count(c) == 0) - { + if (encoding.count(c) == 0) { if (IsAsciiPrintable(c)) RaiseError("character '%c' not valid in braille string", m_buffer[m_pos]); else @@ -376,10 +307,8 @@ int AsmFile::ReadBraille(unsigned char* s) // If we're at a comma, consumes it. // Returns whether a comma was found. -bool AsmFile::ConsumeComma() -{ - if (m_buffer[m_pos] == ',') - { +bool AsmFile::ConsumeComma() { + if (m_buffer[m_pos] == ',') { m_pos++; return true; } @@ -388,8 +317,7 @@ bool AsmFile::ConsumeComma() } // Converts digit character to numerical value. -static int ConvertDigit(char c, int radix) -{ +static int ConvertDigit(char c, int radix) { int digit; if (c >= '0' && c <= '9') @@ -405,15 +333,13 @@ static int ConvertDigit(char c, int radix) } // Reads an integer. If the integer is greater than maxValue, it returns -1. -int AsmFile::ReadPadLength() -{ +int AsmFile::ReadPadLength() { if (!IsAsciiDigit(m_buffer[m_pos])) RaiseError("expected integer"); int radix = 10; - if (m_buffer[m_pos] == '0' && m_buffer[m_pos + 1] == 'x') - { + if (m_buffer[m_pos] == '0' && m_buffer[m_pos + 1] == 'x') { radix = 16; m_pos += 2; } @@ -421,8 +347,7 @@ int AsmFile::ReadPadLength() unsigned n = 0; int digit; - while ((digit = ConvertDigit(m_buffer[m_pos], radix)) != -1) - { + while ((digit = ConvertDigit(m_buffer[m_pos], radix)) != -1) { n = n * radix + digit; if (n > kMaxStringLength) @@ -435,25 +360,18 @@ int AsmFile::ReadPadLength() } // Outputs the current line and moves to the next one. -void AsmFile::OutputLine() -{ +void AsmFile::OutputLine() { while (m_buffer[m_pos] != '\n' && m_buffer[m_pos] != 0) m_pos++; - if (m_buffer[m_pos] == 0) - { - if (m_pos >= m_size) - { + if (m_buffer[m_pos] == 0) { + if (m_pos >= m_size) { RaiseWarning("file doesn't end with newline"); puts(&m_buffer[m_lineStart]); - } - else - { + } else { RaiseError("unexpected null character"); } - } - else - { + } else { m_buffer[m_pos] = 0; puts(&m_buffer[m_lineStart]); m_buffer[m_pos] = '\n'; @@ -464,72 +382,58 @@ void AsmFile::OutputLine() } // Asserts that the rest of the line is empty and moves to the next one. -void AsmFile::ExpectEmptyRestOfLine() -{ +void AsmFile::ExpectEmptyRestOfLine() { SkipWhitespace(); - if (m_buffer[m_pos] == 0) - { + if (m_buffer[m_pos] == 0) { if (m_pos >= m_size) RaiseWarning("file doesn't end with newline"); else RaiseError("unexpected null character"); - } - else if (m_buffer[m_pos] == '\n') - { + } else if (m_buffer[m_pos] == '\n') { m_pos++; m_lineStart = m_pos; m_lineNum++; - } - else if (m_buffer[m_pos] == '\r') - { + } else if (m_buffer[m_pos] == '\r') { RaiseError("only Unix-style LF newlines are supported"); - } - else - { + } else { RaiseError("junk at end of line"); } } // Checks if we're at the end of the file. -bool AsmFile::IsAtEnd() -{ +bool AsmFile::IsAtEnd() { return (m_pos >= m_size); } // Output the current location to set gas's logical file and line numbers. -void AsmFile::OutputLocation() -{ +void AsmFile::OutputLocation() { std::printf("# %ld \"%s\"\n", m_lineNum, m_filename.c_str()); } // Reports a diagnostic message. -void AsmFile::ReportDiagnostic(const char* type, const char* format, std::va_list args) -{ +void AsmFile::ReportDiagnostic(const char* type, const char* format, std::va_list args) { const int bufferSize = 1024; char buffer[bufferSize]; std::vsnprintf(buffer, bufferSize, format, args); std::fprintf(stderr, "%s:%ld: %s: %s\n", m_filename.c_str(), m_lineNum, type, buffer); } -#define DO_REPORT(type) \ -do \ -{ \ - std::va_list args; \ - va_start(args, format); \ - ReportDiagnostic(type, format, args); \ - va_end(args); \ -} while (0) +#define DO_REPORT(type) \ + do { \ + std::va_list args; \ + va_start(args, format); \ + ReportDiagnostic(type, format, args); \ + va_end(args); \ + } while (0) // Reports an error diagnostic and terminates the program. -void AsmFile::RaiseError(const char* format, ...) -{ +void AsmFile::RaiseError(const char* format, ...) { DO_REPORT("error"); std::exit(1); } // Reports a warning diagnostic. -void AsmFile::RaiseWarning(const char* format, ...) -{ +void AsmFile::RaiseWarning(const char* format, ...) { DO_REPORT("warning"); } diff --git a/tools/src/preproc/asm_file.h b/tools/src/preproc/asm_file.h index d73b36e9..dc8838fe 100755..100644 --- a/tools/src/preproc/asm_file.h +++ b/tools/src/preproc/asm_file.h @@ -26,17 +26,10 @@ #include <string> #include "preproc.h" -enum class Directive -{ - Include, - String, - Braille, - Unknown -}; +enum class Directive { Include, String, Braille, Unknown }; -class AsmFile -{ -public: +class AsmFile { + public: AsmFile(std::string filename); AsmFile(AsmFile&& other); AsmFile(const AsmFile&) = delete; @@ -50,7 +43,7 @@ public: void OutputLine(); void OutputLocation(); -private: + private: char* m_buffer; long m_pos; long m_size; diff --git a/tools/src/preproc/c_file.cpp b/tools/src/preproc/c_file.cpp index d9775eb6..5ef403b3 100755..100644 --- a/tools/src/preproc/c_file.cpp +++ b/tools/src/preproc/c_file.cpp @@ -29,9 +29,8 @@ #include "utf8.h" #include "string_parser.h" -CFile::CFile(std::string filename) : m_filename(filename) -{ - FILE *fp = std::fopen(filename.c_str(), "rb"); +CFile::CFile(std::string filename) : m_filename(filename) { + FILE* fp = std::fopen(filename.c_str(), "rb"); if (fp == NULL) FATAL_ERROR("Failed to open \"%s\" for reading.\n", filename.c_str()); @@ -58,8 +57,7 @@ CFile::CFile(std::string filename) : m_filename(filename) m_lineNum = 1; } -CFile::CFile(CFile&& other) : m_filename(std::move(other.m_filename)) -{ +CFile::CFile(CFile&& other) : m_filename(std::move(other.m_filename)) { m_buffer = other.m_buffer; m_pos = other.m_pos; m_size = other.m_size; @@ -68,41 +66,30 @@ CFile::CFile(CFile&& other) : m_filename(std::move(other.m_filename)) other.m_buffer = nullptr; } -CFile::~CFile() -{ +CFile::~CFile() { delete[] m_buffer; } -void CFile::Preproc() -{ +void CFile::Preproc() { char stringChar = 0; - while (m_pos < m_size) - { - if (stringChar) - { - if (m_buffer[m_pos] == stringChar) - { + while (m_pos < m_size) { + if (stringChar) { + if (m_buffer[m_pos] == stringChar) { std::putchar(stringChar); m_pos++; stringChar = 0; - } - else if (m_buffer[m_pos] == '\\' && m_buffer[m_pos + 1] == stringChar) - { + } else if (m_buffer[m_pos] == '\\' && m_buffer[m_pos + 1] == stringChar) { std::putchar('\\'); std::putchar(stringChar); m_pos += 2; - } - else - { + } else { if (m_buffer[m_pos] == '\n') m_lineNum++; std::putchar(m_buffer[m_pos]); m_pos++; } - } - else - { + } else { TryConvertString(); TryConvertIncbin(); @@ -123,10 +110,8 @@ void CFile::Preproc() } } -bool CFile::ConsumeHorizontalWhitespace() -{ - if (m_buffer[m_pos] == '\t' || m_buffer[m_pos] == ' ') - { +bool CFile::ConsumeHorizontalWhitespace() { + if (m_buffer[m_pos] == '\t' || m_buffer[m_pos] == ' ') { m_pos++; return true; } @@ -134,18 +119,15 @@ bool CFile::ConsumeHorizontalWhitespace() return false; } -bool CFile::ConsumeNewline() -{ - if (m_buffer[m_pos] == '\r' && m_buffer[m_pos + 1] == '\n') - { +bool CFile::ConsumeNewline() { + if (m_buffer[m_pos] == '\r' && m_buffer[m_pos + 1] == '\n') { m_pos += 2; m_lineNum++; std::putchar('\n'); return true; } - if (m_buffer[m_pos] == '\n') - { + if (m_buffer[m_pos] == '\n') { m_pos++; m_lineNum++; std::putchar('\n'); @@ -155,14 +137,12 @@ bool CFile::ConsumeNewline() return false; } -void CFile::SkipWhitespace() -{ +void CFile::SkipWhitespace() { while (ConsumeHorizontalWhitespace() || ConsumeNewline()) ; } -void CFile::TryConvertString() -{ +void CFile::TryConvertString() { long oldPos = m_pos; long oldLineNum = m_lineNum; bool noTerminator = false; @@ -172,16 +152,14 @@ void CFile::TryConvertString() m_pos++; - if (m_buffer[m_pos] == '_') - { + if (m_buffer[m_pos] == '_') { noTerminator = true; m_pos++; } SkipWhitespace(); - if (m_buffer[m_pos] != '(') - { + if (m_buffer[m_pos] != '(') { m_pos = oldPos; m_lineNum = oldLineNum; return; @@ -193,35 +171,24 @@ void CFile::TryConvertString() std::printf("{ "); - while (1) - { + while (1) { SkipWhitespace(); - if (m_buffer[m_pos] == '"') - { + if (m_buffer[m_pos] == '"') { unsigned char s[kMaxStringLength]; int length; StringParser stringParser(m_buffer, m_size); - try - { + try { m_pos += stringParser.ParseString(m_pos, s, length); - } - catch (std::runtime_error& e) - { - RaiseError(e.what()); - } + } catch (std::runtime_error& e) { RaiseError(e.what()); } for (int i = 0; i < length; i++) printf("0x%02X, ", s[i]); - } - else if (m_buffer[m_pos] == ')') - { + } else if (m_buffer[m_pos] == ')') { m_pos++; break; - } - else - { + } else { if (m_pos >= m_size) RaiseError("unexpected EOF"); if (IsAsciiPrintable(m_buffer[m_pos])) @@ -237,8 +204,7 @@ void CFile::TryConvertString() std::printf("0xFF }"); } -bool CFile::CheckIdentifier(const std::string& ident) -{ +bool CFile::CheckIdentifier(const std::string& ident) { unsigned int i; for (i = 0; i < ident.length() && m_pos + i < (unsigned)m_size; i++) @@ -248,8 +214,7 @@ bool CFile::CheckIdentifier(const std::string& ident) return (i == ident.length()); } -std::unique_ptr<unsigned char[]> CFile::ReadWholeFile(const std::string& path, int& size) -{ +std::unique_ptr<unsigned char[]> CFile::ReadWholeFile(const std::string& path, int& size) { FILE* fp = std::fopen(path.c_str(), "rb"); if (fp == nullptr) @@ -271,34 +236,25 @@ std::unique_ptr<unsigned char[]> CFile::ReadWholeFile(const std::string& path, i return buffer; } -int ExtractData(const std::unique_ptr<unsigned char[]>& buffer, int offset, int size) -{ - switch (size) - { - case 1: - return buffer[offset]; - case 2: - return (buffer[offset + 1] << 8) - | buffer[offset]; - case 4: - return (buffer[offset + 3] << 24) - | (buffer[offset + 2] << 16) - | (buffer[offset + 1] << 8) - | buffer[offset]; - default: - FATAL_ERROR("Invalid size passed to ExtractData.\n"); +int ExtractData(const std::unique_ptr<unsigned char[]>& buffer, int offset, int size) { + switch (size) { + case 1: + return buffer[offset]; + case 2: + return (buffer[offset + 1] << 8) | buffer[offset]; + case 4: + return (buffer[offset + 3] << 24) | (buffer[offset + 2] << 16) | (buffer[offset + 1] << 8) | buffer[offset]; + default: + FATAL_ERROR("Invalid size passed to ExtractData.\n"); } } -void CFile::TryConvertIncbin() -{ +void CFile::TryConvertIncbin() { std::string idents[6] = { "INCBIN_S8", "INCBIN_U8", "INCBIN_S16", "INCBIN_U16", "INCBIN_S32", "INCBIN_U32" }; int incbinType = -1; - for (int i = 0; i < 6; i++) - { - if (CheckIdentifier(idents[i])) - { + for (int i = 0; i < 6; i++) { + if (CheckIdentifier(idents[i])) { incbinType = i; break; } @@ -317,8 +273,7 @@ void CFile::TryConvertIncbin() SkipWhitespace(); - if (m_buffer[m_pos] != '(') - { + if (m_buffer[m_pos] != '(') { m_pos = oldPos; m_lineNum = oldLineNum; return; @@ -328,8 +283,7 @@ void CFile::TryConvertIncbin() std::printf("{"); - while (true) - { + while (true) { SkipWhitespace(); if (m_buffer[m_pos] != '"') @@ -339,10 +293,8 @@ void CFile::TryConvertIncbin() int startPos = m_pos; - while (m_buffer[m_pos] != '"') - { - if (m_buffer[m_pos] == 0) - { + while (m_buffer[m_pos] != '"') { + if (m_buffer[m_pos] == 0) { if (m_pos >= m_size) RaiseError("unexpected EOF in path string"); else @@ -354,7 +306,7 @@ void CFile::TryConvertIncbin() if (m_buffer[m_pos] == '\\') RaiseError("unexpected escape in path string"); - + m_pos++; } @@ -371,8 +323,7 @@ void CFile::TryConvertIncbin() int count = fileSize / size; int offset = 0; - for (int i = 0; i < count; i++) - { + for (int i = 0; i < count; i++) { int data = ExtractData(buffer, offset, size); offset += size; @@ -389,7 +340,7 @@ void CFile::TryConvertIncbin() m_pos++; } - + if (m_buffer[m_pos] != ')') RaiseError("expected ')'"); @@ -399,32 +350,28 @@ void CFile::TryConvertIncbin() } // Reports a diagnostic message. -void CFile::ReportDiagnostic(const char* type, const char* format, std::va_list args) -{ +void CFile::ReportDiagnostic(const char* type, const char* format, std::va_list args) { const int bufferSize = 1024; char buffer[bufferSize]; std::vsnprintf(buffer, bufferSize, format, args); std::fprintf(stderr, "%s:%ld: %s: %s\n", m_filename.c_str(), m_lineNum, type, buffer); } -#define DO_REPORT(type) \ -do \ -{ \ - std::va_list args; \ - va_start(args, format); \ - ReportDiagnostic(type, format, args); \ - va_end(args); \ -} while (0) +#define DO_REPORT(type) \ + do { \ + std::va_list args; \ + va_start(args, format); \ + ReportDiagnostic(type, format, args); \ + va_end(args); \ + } while (0) // Reports an error diagnostic and terminates the program. -void CFile::RaiseError(const char* format, ...) -{ +void CFile::RaiseError(const char* format, ...) { DO_REPORT("error"); std::exit(1); } // Reports a warning diagnostic. -void CFile::RaiseWarning(const char* format, ...) -{ +void CFile::RaiseWarning(const char* format, ...) { DO_REPORT("warning"); } diff --git a/tools/src/preproc/c_file.h b/tools/src/preproc/c_file.h index 7369aba8..2d565179 100755..100644 --- a/tools/src/preproc/c_file.h +++ b/tools/src/preproc/c_file.h @@ -27,16 +27,15 @@ #include <memory> #include "preproc.h" -class CFile -{ -public: +class CFile { + public: CFile(std::string filename); CFile(CFile&& other); CFile(const CFile&) = delete; ~CFile(); void Preproc(); -private: + private: char* m_buffer; long m_pos; long m_size; diff --git a/tools/src/preproc/char_util.h b/tools/src/preproc/char_util.h index 02a6e1ce..23b7db79 100755..100644 --- a/tools/src/preproc/char_util.h +++ b/tools/src/preproc/char_util.h @@ -24,47 +24,37 @@ #include <cstdint> #include <cassert> -inline bool IsAscii(unsigned char c) -{ +inline bool IsAscii(unsigned char c) { return (c < 128); } -inline bool IsAsciiAlpha(unsigned char c) -{ +inline bool IsAsciiAlpha(unsigned char c) { return ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')); } -inline bool IsAsciiDigit(unsigned char c) -{ +inline bool IsAsciiDigit(unsigned char c) { return (c >= '0' && c <= '9'); } -inline bool IsAsciiHexDigit(unsigned char c) -{ - return ((c >= '0' && c <= '9') - || (c >= 'a' && c <= 'f') - || (c >= 'A' && c <= 'F')); +inline bool IsAsciiHexDigit(unsigned char c) { + return ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); } -inline bool IsAsciiAlphanum(unsigned char c) -{ +inline bool IsAsciiAlphanum(unsigned char c) { return (IsAsciiAlpha(c) || IsAsciiDigit(c)); } -inline bool IsAsciiPrintable(unsigned char c) -{ +inline bool IsAsciiPrintable(unsigned char c) { return (c >= ' ' && c <= '~'); } // Returns whether the character can start a C identifier or the identifier of a "{FOO}" constant in strings. -inline bool IsIdentifierStartingChar(unsigned char c) -{ +inline bool IsIdentifierStartingChar(unsigned char c) { return IsAsciiAlpha(c) || c == '_'; } // Returns whether the character can be used in a C identifier or the identifier of a "{FOO}" constant in strings. -inline bool IsIdentifierChar(unsigned char c) -{ +inline bool IsIdentifierChar(unsigned char c) { return IsAsciiAlphanum(c) || c == '_'; } diff --git a/tools/src/preproc/charmap.cpp b/tools/src/preproc/charmap.cpp index 45a6b50a..d86eb755 100755..100644 --- a/tools/src/preproc/charmap.cpp +++ b/tools/src/preproc/charmap.cpp @@ -26,24 +26,16 @@ #include "char_util.h" #include "utf8.h" -enum LhsType -{ - Char, - Escape, - Constant, - None -}; +enum LhsType { Char, Escape, Constant, None }; -struct Lhs -{ +struct Lhs { LhsType type; std::string name; std::int32_t code; }; -class CharmapReader -{ -public: +class CharmapReader { + public: CharmapReader(std::string filename); CharmapReader(const CharmapReader&) = delete; ~CharmapReader(); @@ -53,7 +45,7 @@ public: void ExpectEmptyRestOfLine(); void RaiseError(const char* format, ...); -private: + private: char* m_buffer; long m_pos; long m_size; @@ -65,17 +57,15 @@ private: void SkipWhitespace(); }; -CharmapReader::CharmapReader(std::string filename) : m_filename(filename) -{ - if (filename == "") - { +CharmapReader::CharmapReader(std::string filename) : m_filename(filename) { + if (filename == "") { m_pos = 0; m_size = 0; - m_buffer = new char[1] {}; + m_buffer = new char[1]{}; return; } - FILE *fp = std::fopen(filename.c_str(), "rb"); + FILE* fp = std::fopen(filename.c_str(), "rb"); if (fp == NULL) FATAL_ERROR("Failed to open \"%s\" for reading.\n", filename.c_str()); @@ -104,45 +94,36 @@ CharmapReader::CharmapReader(std::string filename) : m_filename(filename) RemoveComments(); } -CharmapReader::~CharmapReader() -{ +CharmapReader::~CharmapReader() { delete[] m_buffer; } -Lhs CharmapReader::ReadLhs() -{ +Lhs CharmapReader::ReadLhs() { Lhs lhs; - for (;;) - { + for (;;) { SkipWhitespace(); - if (m_buffer[m_pos] == '\n') - { + if (m_buffer[m_pos] == '\n') { m_pos++; m_lineNum++; - } - else - { + } else { break; } } - - if (m_buffer[m_pos] == '\'') - { + + if (m_buffer[m_pos] == '\'') { m_pos++; bool isEscape = (m_buffer[m_pos] == '\\'); - if (isEscape) - { + if (isEscape) { m_pos++; } unsigned char c = m_buffer[m_pos]; - if (c == 0) - { + if (c == 0) { if (m_pos >= m_size) RaiseError("unexpected EOF in UTF-8 character literal"); else @@ -167,58 +148,45 @@ Lhs CharmapReader::ReadLhs() lhs.code = code; - if (isEscape) - { + if (isEscape) { if (code >= 128) RaiseError("escapes using non-ASCII characters are invalid"); - switch (code) - { - case '\'': - lhs.type = LhsType::Char; - break; - case '\\': - lhs.type = LhsType::Char; - case '"': - RaiseError("cannot escape double quote"); - break; - default: - lhs.type = LhsType::Escape; + switch (code) { + case '\'': + lhs.type = LhsType::Char; + break; + case '\\': + lhs.type = LhsType::Char; + case '"': + RaiseError("cannot escape double quote"); + break; + default: + lhs.type = LhsType::Escape; } - } - else - { + } else { if (code == '\'') RaiseError("empty character literal"); lhs.type = LhsType::Char; } - } - else if (IsIdentifierStartingChar(m_buffer[m_pos])) - { + } else if (IsIdentifierStartingChar(m_buffer[m_pos])) { lhs.type = LhsType::Constant; lhs.name = ReadConstant(); - } - else if (m_buffer[m_pos] == '\r') - { + } else if (m_buffer[m_pos] == '\r') { RaiseError("only Unix-style LF newlines are supported"); - } - else if (m_buffer[m_pos] == 0) - { + } else if (m_buffer[m_pos] == 0) { if (m_pos < m_size) RaiseError("unexpected null character"); lhs.type = LhsType::None; - } - else - { + } else { RaiseError("junk at start of line"); } return lhs; } -void CharmapReader::ExpectEqualsSign() -{ +void CharmapReader::ExpectEqualsSign() { SkipWhitespace(); if (m_buffer[m_pos] != '=') @@ -227,8 +195,7 @@ void CharmapReader::ExpectEqualsSign() m_pos++; } -static unsigned int ConvertHexDigit(char c) -{ +static unsigned int ConvertHexDigit(char c) { unsigned int digit = 0; if (c >= '0' && c <= '9') @@ -241,16 +208,14 @@ static unsigned int ConvertHexDigit(char c) return digit; } -std::string CharmapReader::ReadSequence() -{ +std::string CharmapReader::ReadSequence() { SkipWhitespace(); long startPos = m_pos; unsigned int length = 0; - while (IsAsciiHexDigit(m_buffer[m_pos]) && IsAsciiHexDigit(m_buffer[m_pos + 1])) - { + while (IsAsciiHexDigit(m_buffer[m_pos]) && IsAsciiHexDigit(m_buffer[m_pos + 1])) { m_pos += 2; length++; @@ -271,8 +236,7 @@ std::string CharmapReader::ReadSequence() m_pos = startPos; - for (unsigned int i = 0; i < length; i++) - { + for (unsigned int i = 0; i < length; i++) { unsigned int digit1 = ConvertHexDigit(m_buffer[m_pos]); unsigned int digit2 = ConvertHexDigit(m_buffer[m_pos + 1]); unsigned char byte = digit1 * 16 + digit2; @@ -285,32 +249,23 @@ std::string CharmapReader::ReadSequence() return sequence; } -void CharmapReader::ExpectEmptyRestOfLine() -{ +void CharmapReader::ExpectEmptyRestOfLine() { SkipWhitespace(); - if (m_buffer[m_pos] == 0) - { + if (m_buffer[m_pos] == 0) { if (m_pos < m_size) RaiseError("unexpected null character"); - } - else if (m_buffer[m_pos] == '\n') - { + } else if (m_buffer[m_pos] == '\n') { m_pos++; m_lineNum++; - } - else if (m_buffer[m_pos] == '\r') - { + } else if (m_buffer[m_pos] == '\r') { RaiseError("only Unix-style LF newlines are supported"); - } - else - { + } else { RaiseError("junk at end of line"); } } -void CharmapReader::RaiseError(const char* format, ...) -{ +void CharmapReader::RaiseError(const char* format, ...) { const int bufferSize = 1024; char buffer[bufferSize]; @@ -324,36 +279,26 @@ void CharmapReader::RaiseError(const char* format, ...) std::exit(1); } -void CharmapReader::RemoveComments() -{ +void CharmapReader::RemoveComments() { long pos = 0; bool inString = false; - for (;;) - { + for (;;) { if (m_buffer[pos] == 0) return; - if (inString) - { - if (m_buffer[pos] == '\\' && m_buffer[pos + 1] == '\'') - { + if (inString) { + if (m_buffer[pos] == '\\' && m_buffer[pos + 1] == '\'') { pos += 2; - } - else - { + } else { if (m_buffer[pos] == '\'') inString = false; pos++; } - } - else if (m_buffer[pos] == '@') - { + } else if (m_buffer[pos] == '@') { while (m_buffer[pos] != '\n' && m_buffer[pos] != 0) m_buffer[pos++] = ' '; - } - else - { + } else { if (m_buffer[pos] == '\'') inString = true; pos++; @@ -361,8 +306,7 @@ void CharmapReader::RemoveComments() } } -std::string CharmapReader::ReadConstant() -{ +std::string CharmapReader::ReadConstant() { long startPos = m_pos; while (IsIdentifierChar(m_buffer[m_pos])) @@ -371,18 +315,15 @@ std::string CharmapReader::ReadConstant() return std::string(&m_buffer[startPos], m_pos - startPos); } -void CharmapReader::SkipWhitespace() -{ +void CharmapReader::SkipWhitespace() { while (m_buffer[m_pos] == '\t' || m_buffer[m_pos] == ' ') m_pos++; } -Charmap::Charmap(std::string filename) -{ +Charmap::Charmap(std::string filename) { CharmapReader reader(filename); - for (;;) - { + for (;;) { Lhs lhs = reader.ReadLhs(); if (lhs.type == LhsType::None) @@ -392,23 +333,22 @@ Charmap::Charmap(std::string filename) std::string sequence = reader.ReadSequence(); - switch (lhs.type) - { - case LhsType::Char: - if (m_chars.find(lhs.code) != m_chars.end()) - reader.RaiseError("redefining char"); - m_chars[lhs.code] = sequence; - break; - case LhsType::Escape: - if (m_escapes[lhs.code].length() != 0) - reader.RaiseError("redefining escape"); - m_escapes[lhs.code] = sequence; - break; - case LhsType::Constant: - if (m_constants.find(lhs.name) != m_constants.end()) - reader.RaiseError("redefining constant"); - m_constants[lhs.name] = sequence; - break; + switch (lhs.type) { + case LhsType::Char: + if (m_chars.find(lhs.code) != m_chars.end()) + reader.RaiseError("redefining char"); + m_chars[lhs.code] = sequence; + break; + case LhsType::Escape: + if (m_escapes[lhs.code].length() != 0) + reader.RaiseError("redefining escape"); + m_escapes[lhs.code] = sequence; + break; + case LhsType::Constant: + if (m_constants.find(lhs.name) != m_constants.end()) + reader.RaiseError("redefining constant"); + m_constants[lhs.name] = sequence; + break; } reader.ExpectEmptyRestOfLine(); diff --git a/tools/src/preproc/charmap.h b/tools/src/preproc/charmap.h index 0d752ac9..f4eaca84 100755..100644 --- a/tools/src/preproc/charmap.h +++ b/tools/src/preproc/charmap.h @@ -26,13 +26,11 @@ #include <map> #include <vector> -class Charmap -{ -public: +class Charmap { + public: Charmap(std::string filename); - std::string Char(std::int32_t code) - { + std::string Char(std::int32_t code) { auto it = m_chars.find(code); if (it == m_chars.end()) @@ -41,13 +39,11 @@ public: return it->second; } - std::string Escape(unsigned char code) - { + std::string Escape(unsigned char code) { return m_escapes[code]; } - std::string Constant(std::string identifier) - { + std::string Constant(std::string identifier) { auto it = m_constants.find(identifier); if (it == m_constants.end()) @@ -55,7 +51,8 @@ public: return it->second; } -private: + + private: std::map<std::int32_t, std::string> m_chars; std::string m_escapes[128]; std::map<std::string, std::string> m_constants; diff --git a/tools/src/preproc/preproc.cpp b/tools/src/preproc/preproc.cpp index 3fd3ae6b..2aada83d 100755..100644 --- a/tools/src/preproc/preproc.cpp +++ b/tools/src/preproc/preproc.cpp @@ -28,13 +28,10 @@ Charmap* g_charmap; std::string g_buildName; -void PrintAsmBytes(unsigned char *s, int length) -{ - if (length > 0) - { +void PrintAsmBytes(unsigned char* s, int length) { + if (length > 0) { std::printf("\t.byte "); - for (int i = 0; i < length; i++) - { + for (int i = 0; i < length; i++) { std::printf("0x%02X", s[i]); if (i < length - 1) @@ -44,16 +41,13 @@ void PrintAsmBytes(unsigned char *s, int length) } } -void PreprocAsmFile(std::string filename) -{ +void PreprocAsmFile(std::string filename) { std::stack<AsmFile> stack; stack.push(AsmFile(filename)); - for (;;) - { - while (stack.top().IsAtEnd()) - { + for (;;) { + while (stack.top().IsAtEnd()) { stack.pop(); if (stack.empty()) @@ -64,54 +58,45 @@ void PreprocAsmFile(std::string filename) Directive directive = stack.top().GetDirective(); - switch (directive) - { - case Directive::Include: - stack.push(AsmFile(stack.top().ReadPath())); - stack.top().OutputLocation(); - break; - case Directive::String: - { - unsigned char s[kMaxStringLength]; - int length = stack.top().ReadString(s); - PrintAsmBytes(s, length); - break; - } - case Directive::Braille: - { - unsigned char s[kMaxStringLength]; - int length = stack.top().ReadBraille(s); - PrintAsmBytes(s, length); - break; - } - case Directive::Unknown: - { - std::string globalLabel = stack.top().GetGlobalLabel(); - - if (globalLabel.length() != 0) - { - const char *s = globalLabel.c_str(); - std::printf("%s: ; .global %s\n", s, s); + switch (directive) { + case Directive::Include: + stack.push(AsmFile(stack.top().ReadPath())); + stack.top().OutputLocation(); + break; + case Directive::String: { + unsigned char s[kMaxStringLength]; + int length = stack.top().ReadString(s); + PrintAsmBytes(s, length); + break; } - else - { - stack.top().OutputLine(); + case Directive::Braille: { + unsigned char s[kMaxStringLength]; + int length = stack.top().ReadBraille(s); + PrintAsmBytes(s, length); + break; } + case Directive::Unknown: { + std::string globalLabel = stack.top().GetGlobalLabel(); - break; - } + if (globalLabel.length() != 0) { + const char* s = globalLabel.c_str(); + std::printf("%s: ; .global %s\n", s, s); + } else { + stack.top().OutputLine(); + } + + break; + } } } } -void PreprocCFile(std::string filename) -{ +void PreprocCFile(std::string filename) { CFile cFile(filename); cFile.Preproc(); } -char* GetFileExtension(char* filename) -{ +char* GetFileExtension(char* filename) { char* extension = filename; while (*extension != 0) @@ -131,10 +116,8 @@ char* GetFileExtension(char* filename) return extension; } -int main(int argc, char **argv) -{ - if (argc != 4 && argc != 3) - { +int main(int argc, char** argv) { + if (argc != 4 && argc != 3) { std::fprintf(stderr, "Usage: %s BUILD_NAME SRC_FILE CHARMAP_FILE", argv[0]); return 1; } diff --git a/tools/src/preproc/preproc.h b/tools/src/preproc/preproc.h index 1b1e1bdf..f896b6ae 100755..100644 --- a/tools/src/preproc/preproc.h +++ b/tools/src/preproc/preproc.h @@ -27,21 +27,19 @@ #ifdef _MSC_VER -#define FATAL_ERROR(format, ...) \ -do \ -{ \ - std::fprintf(stderr, format, __VA_ARGS__); \ - std::exit(1); \ -} while (0) +#define FATAL_ERROR(format, ...) \ + do { \ + std::fprintf(stderr, format, __VA_ARGS__); \ + std::exit(1); \ + } while (0) #else -#define FATAL_ERROR(format, ...) \ -do \ -{ \ - std::fprintf(stderr, format, ##__VA_ARGS__); \ - std::exit(1); \ -} while (0) +#define FATAL_ERROR(format, ...) \ + do { \ + std::fprintf(stderr, format, ##__VA_ARGS__); \ + std::exit(1); \ + } while (0) #endif // _MSC_VER diff --git a/tools/src/preproc/string_parser.cpp b/tools/src/preproc/string_parser.cpp index dd5196a4..7c3cc1c7 100755..100644 --- a/tools/src/preproc/string_parser.cpp +++ b/tools/src/preproc/string_parser.cpp @@ -27,27 +27,22 @@ #include "utf8.h" // Reads a charmap char or escape sequence. -std::string StringParser::ReadCharOrEscape() -{ +std::string StringParser::ReadCharOrEscape() { std::string sequence; bool isEscape = (m_buffer[m_pos] == '\\'); - if (isEscape) - { + if (isEscape) { m_pos++; - if (m_buffer[m_pos] == '"') - { + if (m_buffer[m_pos] == '"') { sequence = g_charmap->Char('"'); if (sequence.length() == 0) RaiseError("no mapping exists for double quote"); return sequence; - } - else if (m_buffer[m_pos] == '\\') - { + } else if (m_buffer[m_pos] == '\\') { sequence = g_charmap->Char('\\'); if (sequence.length() == 0) @@ -59,8 +54,7 @@ std::string StringParser::ReadCharOrEscape() unsigned char c = m_buffer[m_pos]; - if (c == 0) - { + if (c == 0) { if (m_pos >= m_size) RaiseError("unexpected EOF in UTF-8 string"); else @@ -82,8 +76,7 @@ std::string StringParser::ReadCharOrEscape() sequence = isEscape ? g_charmap->Escape(code) : g_charmap->Char(code); - if (sequence.length() == 0) - { + if (sequence.length() == 0) { if (isEscape) RaiseError("unknown escape '\\%c'", code); else @@ -94,18 +87,15 @@ std::string StringParser::ReadCharOrEscape() } // Reads a charmap constant, i.e. "{FOO}". -std::string StringParser::ReadBracketedConstants() -{ +std::string StringParser::ReadBracketedConstants() { std::string totalSequence; m_pos++; // Assume we're on the left curly bracket. - while (m_buffer[m_pos] != '}') - { + while (m_buffer[m_pos] != '}') { SkipWhitespace(); - if (IsIdentifierStartingChar(m_buffer[m_pos])) - { + if (IsIdentifierStartingChar(m_buffer[m_pos])) { long startPos = m_pos; m_pos++; @@ -115,44 +105,36 @@ std::string StringParser::ReadBracketedConstants() std::string sequence = g_charmap->Constant(std::string(&m_buffer[startPos], m_pos - startPos)); - if (sequence.length() == 0) - { + if (sequence.length() == 0) { m_buffer[m_pos] = 0; RaiseError("unknown constant '%s'", &m_buffer[startPos]); } totalSequence += sequence; - } - else if (IsAsciiDigit(m_buffer[m_pos])) - { + } else if (IsAsciiDigit(m_buffer[m_pos])) { Integer integer = ReadInteger(); - switch (integer.size) - { - case 1: - totalSequence += (unsigned char)integer.value; - break; - case 2: - totalSequence += (unsigned char)integer.value; - totalSequence += (unsigned char)(integer.value >> 8); - break; - case 4: - totalSequence += (unsigned char)integer.value; - totalSequence += (unsigned char)(integer.value >> 8); - totalSequence += (unsigned char)(integer.value >> 16); - totalSequence += (unsigned char)(integer.value >> 24); - break; + switch (integer.size) { + case 1: + totalSequence += (unsigned char)integer.value; + break; + case 2: + totalSequence += (unsigned char)integer.value; + totalSequence += (unsigned char)(integer.value >> 8); + break; + case 4: + totalSequence += (unsigned char)integer.value; + totalSequence += (unsigned char)(integer.value >> 8); + totalSequence += (unsigned char)(integer.value >> 16); + totalSequence += (unsigned char)(integer.value >> 24); + break; } - } - else if (m_buffer[m_pos] == 0) - { + } else if (m_buffer[m_pos] == 0) { if (m_pos >= m_size) RaiseError("unexpected EOF after left curly bracket"); else RaiseError("unexpected null character within curly brackets"); - } - else - { + } else { if (IsAsciiPrintable(m_buffer[m_pos])) RaiseError("unexpected character '%c' within curly brackets", m_buffer[m_pos]); else @@ -166,8 +148,7 @@ std::string StringParser::ReadBracketedConstants() } // Reads a charmap string. -int StringParser::ParseString(long srcPos, unsigned char* dest, int& destLength) -{ +int StringParser::ParseString(long srcPos, unsigned char* dest, int& destLength) { m_pos = srcPos; if (m_buffer[m_pos] != '"') @@ -179,12 +160,10 @@ int StringParser::ParseString(long srcPos, unsigned char* dest, int& destLength) destLength = 0; - while (m_buffer[m_pos] != '"') - { + while (m_buffer[m_pos] != '"') { std::string sequence = (m_buffer[m_pos] == '{') ? ReadBracketedConstants() : ReadCharOrEscape(); - for (const char& c : sequence) - { + for (const char& c : sequence) { if (destLength == kMaxStringLength) RaiseError("mapped string longer than %d bytes", kMaxStringLength); @@ -197,8 +176,7 @@ int StringParser::ParseString(long srcPos, unsigned char* dest, int& destLength) return m_pos - start; } -void StringParser::RaiseError(const char* format, ...) -{ +void StringParser::RaiseError(const char* format, ...) { const int bufferSize = 1024; char buffer[bufferSize]; @@ -211,8 +189,7 @@ void StringParser::RaiseError(const char* format, ...) } // Converts digit character to numerical value. -static int ConvertDigit(char c, int radix) -{ +static int ConvertDigit(char c, int radix) { int digit; if (c >= '0' && c <= '9') @@ -227,26 +204,22 @@ static int ConvertDigit(char c, int radix) return (digit < radix) ? digit : -1; } -void StringParser::SkipRestOfInteger(int radix) -{ +void StringParser::SkipRestOfInteger(int radix) { while (ConvertDigit(m_buffer[m_pos], radix) != -1) m_pos++; } -StringParser::Integer StringParser::ReadDecimal() -{ +StringParser::Integer StringParser::ReadDecimal() { const int radix = 10; std::uint64_t n = 0; int digit; std::uint64_t max = UINT32_MAX; long startPos = m_pos; - while ((digit = ConvertDigit(m_buffer[m_pos], radix)) != -1) - { + while ((digit = ConvertDigit(m_buffer[m_pos], radix)) != -1) { n = n * radix + digit; - if (n >= max) - { + if (n >= max) { SkipRestOfInteger(radix); std::string intLiteral(m_buffer + startPos, m_pos - startPos); @@ -258,23 +231,17 @@ StringParser::Integer StringParser::ReadDecimal() int size; - if (m_buffer[m_pos] == 'H') - { - if (n >= 0x10000) - { + if (m_buffer[m_pos] == 'H') { + if (n >= 0x10000) { RaiseError("%lu is too large to be a halfword", (unsigned long)n); } size = 2; m_pos++; - } - else if (m_buffer[m_pos] == 'W') - { + } else if (m_buffer[m_pos] == 'W') { size = 4; m_pos++; - } - else - { + } else { if (n >= 0x10000) size = 4; else if (n >= 0x100) @@ -283,23 +250,20 @@ StringParser::Integer StringParser::ReadDecimal() size = 1; } - return{ static_cast<std::uint32_t>(n), size }; + return { static_cast<std::uint32_t>(n), size }; } -StringParser::Integer StringParser::ReadHex() -{ +StringParser::Integer StringParser::ReadHex() { const int radix = 16; std::uint64_t n = 0; int digit; std::uint64_t max = UINT32_MAX; long startPos = m_pos; - while ((digit = ConvertDigit(m_buffer[m_pos], radix)) != -1) - { + while ((digit = ConvertDigit(m_buffer[m_pos], radix)) != -1) { n = n * radix + digit; - if (n >= max) - { + if (n >= max) { SkipRestOfInteger(radix); std::string intLiteral(m_buffer + startPos, m_pos - startPos); @@ -312,34 +276,30 @@ StringParser::Integer StringParser::ReadHex() int length = m_pos - startPos; int size = 0; - switch (length) - { - case 2: - size = 1; - break; - case 4: - size = 2; - break; - case 8: - size = 4; - break; - default: - { - std::string intLiteral(m_buffer + startPos, m_pos - startPos); - RaiseError("hex integer literal \"0x%s\" doesn't have length of 2, 4, or 8 digits", intLiteral.c_str()); - } + switch (length) { + case 2: + size = 1; + break; + case 4: + size = 2; + break; + case 8: + size = 4; + break; + default: { + std::string intLiteral(m_buffer + startPos, m_pos - startPos); + RaiseError("hex integer literal \"0x%s\" doesn't have length of 2, 4, or 8 digits", intLiteral.c_str()); + } } - return{ static_cast<std::uint32_t>(n), size }; + return { static_cast<std::uint32_t>(n), size }; } -StringParser::Integer StringParser::ReadInteger() -{ +StringParser::Integer StringParser::ReadInteger() { if (!IsAsciiDigit(m_buffer[m_pos])) RaiseError("expected integer"); - if (m_buffer[m_pos] == '0' && m_buffer[m_pos + 1] == 'x') - { + if (m_buffer[m_pos] == '0' && m_buffer[m_pos + 1] == 'x') { m_pos += 2; return ReadHex(); } @@ -348,8 +308,7 @@ StringParser::Integer StringParser::ReadInteger() } // Skips tabs and spaces. -void StringParser::SkipWhitespace() -{ +void StringParser::SkipWhitespace() { while (m_buffer[m_pos] == '\t' || m_buffer[m_pos] == ' ') m_pos++; } diff --git a/tools/src/preproc/string_parser.h b/tools/src/preproc/string_parser.h index abd2bfe9..2e212640 100755..100644 --- a/tools/src/preproc/string_parser.h +++ b/tools/src/preproc/string_parser.h @@ -25,15 +25,14 @@ #include <string> #include "preproc.h" -class StringParser -{ -public: - StringParser(char* buffer, long size) : m_buffer(buffer), m_size(size), m_pos(0) {} - int ParseString(long srcPos, unsigned char* dest, int &destLength); +class StringParser { + public: + StringParser(char* buffer, long size) : m_buffer(buffer), m_size(size), m_pos(0) { + } + int ParseString(long srcPos, unsigned char* dest, int& destLength); -private: - struct Integer - { + private: + struct Integer { std::uint32_t value; int size; }; diff --git a/tools/src/preproc/utf8.cpp b/tools/src/preproc/utf8.cpp index 7facfd44..abeccfe9 100755..100644 --- a/tools/src/preproc/utf8.cpp +++ b/tools/src/preproc/utf8.cpp @@ -24,17 +24,23 @@ #include <cstdint> #include "utf8.h" -static const unsigned char s_byteTypeTable[] = -{ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 00..1f - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 20..3f - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 40..5f - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 60..7f - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, // 80..9f - 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, // a0..bf - 8,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, // c0..df - 0xa,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x4,0x3,0x3, // e0..ef - 0xb,0x6,0x6,0x6,0x5,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8, // f0..ff +static const unsigned char s_byteTypeTable[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 00..1f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 20..3f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 40..5f + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 60..7f + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, // 80..9f + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, // a0..bf + 8, 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // c0..df + 0xa, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x4, 0x3, 0x3, // e0..ef + 0xb, 0x6, 0x6, 0x6, 0x5, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, // f0..ff }; const unsigned char s0 = 0 * 12; @@ -47,28 +53,25 @@ const unsigned char s6 = 6 * 12; const unsigned char s7 = 7 * 12; const unsigned char s8 = 8 * 12; -static const unsigned char s_transitionTable[] = -{ - s0,s1,s2,s3,s5,s8,s7,s1,s1,s1,s4,s6, // s0 - s1,s1,s1,s1,s1,s1,s1,s1,s1,s1,s1,s1, // s1 - s1,s0,s1,s1,s1,s1,s1,s0,s1,s0,s1,s1, // s2 - s1,s2,s1,s1,s1,s1,s1,s2,s1,s2,s1,s1, // s3 - s1,s1,s1,s1,s1,s1,s1,s2,s1,s1,s1,s1, // s4 - s1,s2,s1,s1,s1,s1,s1,s1,s1,s2,s1,s1, // s5 - s1,s1,s1,s1,s1,s1,s1,s3,s1,s3,s1,s1, // s6 - s1,s3,s1,s1,s1,s1,s1,s3,s1,s3,s1,s1, // s7 - s1,s3,s1,s1,s1,s1,s1,s1,s1,s1,s1,s1, // s8 +static const unsigned char s_transitionTable[] = { + s0, s1, s2, s3, s5, s8, s7, s1, s1, s1, s4, s6, // s0 + s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, // s1 + s1, s0, s1, s1, s1, s1, s1, s0, s1, s0, s1, s1, // s2 + s1, s2, s1, s1, s1, s1, s1, s2, s1, s2, s1, s1, // s3 + s1, s1, s1, s1, s1, s1, s1, s2, s1, s1, s1, s1, // s4 + s1, s2, s1, s1, s1, s1, s1, s1, s1, s2, s1, s1, // s5 + s1, s1, s1, s1, s1, s1, s1, s3, s1, s3, s1, s1, // s6 + s1, s3, s1, s1, s1, s1, s1, s3, s1, s3, s1, s1, // s7 + s1, s3, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, // s8 }; // Decodes UTF-8 encoded Unicode code point at "s". -UnicodeChar DecodeUtf8(const char* s) -{ +UnicodeChar DecodeUtf8(const char* s) { UnicodeChar unicodeChar; int state = s0; auto start = s; - do - { + do { unsigned char byte = *s++; int type = s_byteTypeTable[byte]; @@ -79,8 +82,7 @@ UnicodeChar DecodeUtf8(const char* s) state = s_transitionTable[state + type]; - if (state == s1) - { + if (state == s1) { unicodeChar.code = -1; return unicodeChar; } diff --git a/tools/src/preproc/utf8.h b/tools/src/preproc/utf8.h index 259de67c..28d03d30 100755..100644 --- a/tools/src/preproc/utf8.h +++ b/tools/src/preproc/utf8.h @@ -23,8 +23,7 @@ #include <cstdint> -struct UnicodeChar -{ +struct UnicodeChar { std::int32_t code; int encodingLength; }; diff --git a/tools/src/scaninc/asm_file.cpp b/tools/src/scaninc/asm_file.cpp index 109e604a..0fa0a20d 100755..100644 --- a/tools/src/scaninc/asm_file.cpp +++ b/tools/src/scaninc/asm_file.cpp @@ -23,11 +23,10 @@ #include "scaninc.h" #include "asm_file.h" -AsmFile::AsmFile(std::string path) -{ +AsmFile::AsmFile(std::string path) { m_path = path; - FILE *fp = std::fopen(path.c_str(), "rb"); + FILE* fp = std::fopen(path.c_str(), "rb"); if (fp == NULL) FATAL_ERROR("Failed to open \"%s\" for reading.\n", path.c_str()); @@ -49,24 +48,20 @@ AsmFile::AsmFile(std::string path) m_lineNum = 1; } -AsmFile::~AsmFile() -{ +AsmFile::~AsmFile() { delete[] m_buffer; } -IncDirectiveType AsmFile::ReadUntilIncDirective(std::string &path) -{ +IncDirectiveType AsmFile::ReadUntilIncDirective(std::string& path) { // At the beginning of each loop iteration, the current file position // should be at the start of a line or at the end of the file. - for (;;) - { + for (;;) { SkipTabsAndSpaces(); IncDirectiveType incDirectiveType = IncDirectiveType::None; char c = PeekChar(); - if (c == '.' || c == '#') - { + if (c == '.' || c == '#') { m_pos++; if (MatchIncDirective("incbin", path)) @@ -75,29 +70,21 @@ IncDirectiveType AsmFile::ReadUntilIncDirective(std::string &path) incDirectiveType = IncDirectiveType::Include; } - for (;;) - { + for (;;) { int c = GetChar(); if (c == -1) return incDirectiveType; - if (c == ';') - { + if (c == ';') { SkipEndOfLineComment(); break; - } - else if (c == '/' && PeekChar() == '*') - { + } else if (c == '/' && PeekChar() == '*') { m_pos++; SkipMultiLineComment(); - } - else if (c == '"') - { + } else if (c == '"') { SkipString(); - } - else if (c == '\n') - { + } else if (c == '\n') { break; } } @@ -107,13 +94,11 @@ IncDirectiveType AsmFile::ReadUntilIncDirective(std::string &path) } } -std::string AsmFile::ReadPath() -{ +std::string AsmFile::ReadPath() { int length = 0; int startPos = m_pos; - for (;;) - { + for (;;) { int c = GetChar(); if (c == '"') @@ -141,41 +126,31 @@ std::string AsmFile::ReadPath() return std::string(m_buffer + startPos, length); } -void AsmFile::SkipEndOfLineComment() -{ +void AsmFile::SkipEndOfLineComment() { int c; - do - { + do { c = GetChar(); } while (c != -1 && c != '\n'); } -void AsmFile::SkipMultiLineComment() -{ - for (;;) - { +void AsmFile::SkipMultiLineComment() { + for (;;) { int c = GetChar(); - if (c == '*') - { - if (PeekChar() == '/') - { + if (c == '*') { + if (PeekChar() == '/') { m_pos++; return; } - } - else if (c == -1) - { + } else if (c == -1) { return; } } } -void AsmFile::SkipString() -{ - for (;;) - { +void AsmFile::SkipString() { + for (;;) { int c = GetChar(); if (c == '"') @@ -184,8 +159,7 @@ void AsmFile::SkipString() if (c == -1) FATAL_INPUT_ERROR("unexpected EOF in string\n"); - if (c == '\\') - { + if (c == '\\') { c = GetChar(); } } diff --git a/tools/src/scaninc/asm_file.h b/tools/src/scaninc/asm_file.h index ad99b757..1f07b169 100755..100644 --- a/tools/src/scaninc/asm_file.h +++ b/tools/src/scaninc/asm_file.h @@ -24,43 +24,32 @@ #include <string> #include "scaninc.h" -enum class IncDirectiveType -{ - None, - Include, - Incbin -}; +enum class IncDirectiveType { None, Include, Incbin }; -class AsmFile -{ -public: +class AsmFile { + public: AsmFile(std::string path); ~AsmFile(); IncDirectiveType ReadUntilIncDirective(std::string& path); -private: - char *m_buffer; + private: + char* m_buffer; int m_pos; int m_size; int m_lineNum; std::string m_path; - int GetChar() - { + int GetChar() { if (m_pos >= m_size) return -1; int c = m_buffer[m_pos++]; - if (c == '\r') - { - if (m_pos < m_size && m_buffer[m_pos++] == '\n') - { + if (c == '\r') { + if (m_pos < m_size && m_buffer[m_pos++] == '\n') { m_lineNum++; return '\n'; - } - else - { + } else { FATAL_INPUT_ERROR("CR line endings are not supported\n"); } } @@ -72,22 +61,19 @@ private: } // No newline translation because it's not needed for any use of this function. - int PeekChar() - { + int PeekChar() { if (m_pos >= m_size) return -1; return m_buffer[m_pos]; } - void SkipTabsAndSpaces() - { + void SkipTabsAndSpaces() { while (m_pos < m_size && (m_buffer[m_pos] == '\t' || m_buffer[m_pos] == ' ')) m_pos++; } - bool MatchIncDirective(std::string directiveName, std::string& path) - { + bool MatchIncDirective(std::string directiveName, std::string& path) { int length = directiveName.length(); int i; diff --git a/tools/src/scaninc/c_file.cpp b/tools/src/scaninc/c_file.cpp index 595f366c..b567d646 100755..100644 --- a/tools/src/scaninc/c_file.cpp +++ b/tools/src/scaninc/c_file.cpp @@ -20,11 +20,10 @@ #include "c_file.h" -CFile::CFile(std::string path) -{ +CFile::CFile(std::string path) { m_path = path; - FILE *fp = std::fopen(path.c_str(), "rb"); + FILE* fp = std::fopen(path.c_str(), "rb"); if (fp == NULL) FATAL_ERROR("Failed to open \"%s\" for reading.\n", path.c_str()); @@ -47,37 +46,26 @@ CFile::CFile(std::string path) m_lineNum = 1; } -CFile::~CFile() -{ +CFile::~CFile() { delete[] m_buffer; } -void CFile::FindIncbins() -{ +void CFile::FindIncbins() { char stringChar = 0; - while (m_pos < m_size) - { - if (stringChar) - { - if (m_buffer[m_pos] == stringChar) - { + while (m_pos < m_size) { + if (stringChar) { + if (m_buffer[m_pos] == stringChar) { m_pos++; stringChar = 0; - } - else if (m_buffer[m_pos] == '\\' && m_buffer[m_pos + 1] == stringChar) - { + } else if (m_buffer[m_pos] == '\\' && m_buffer[m_pos + 1] == stringChar) { m_pos += 2; - } - else - { + } else { if (m_buffer[m_pos] == '\n') m_lineNum++; m_pos++; } - } - else - { + } else { SkipWhitespace(); CheckInclude(); CheckIncbin(); @@ -99,10 +87,8 @@ void CFile::FindIncbins() } } -bool CFile::ConsumeHorizontalWhitespace() -{ - if (m_buffer[m_pos] == '\t' || m_buffer[m_pos] == ' ') - { +bool CFile::ConsumeHorizontalWhitespace() { + if (m_buffer[m_pos] == '\t' || m_buffer[m_pos] == ' ') { m_pos++; return true; } @@ -110,17 +96,14 @@ bool CFile::ConsumeHorizontalWhitespace() return false; } -bool CFile::ConsumeNewline() -{ - if (m_buffer[m_pos] == '\n') - { +bool CFile::ConsumeNewline() { + if (m_buffer[m_pos] == '\n') { m_pos++; m_lineNum++; return true; } - if (m_buffer[m_pos] == '\r' && m_buffer[m_pos + 1] == '\n') - { + if (m_buffer[m_pos] == '\r' && m_buffer[m_pos + 1] == '\n') { m_pos += 2; m_lineNum++; return true; @@ -129,13 +112,10 @@ bool CFile::ConsumeNewline() return false; } -bool CFile::ConsumeComment() -{ - if (m_buffer[m_pos] == '/' && m_buffer[m_pos + 1] == '*') - { +bool CFile::ConsumeComment() { + if (m_buffer[m_pos] == '/' && m_buffer[m_pos + 1] == '*') { m_pos += 2; - while (m_buffer[m_pos] != '*' || m_buffer[m_pos + 1] != '/') - { + while (m_buffer[m_pos] != '*' || m_buffer[m_pos + 1] != '/') { if (m_buffer[m_pos] == 0) return false; if (!ConsumeNewline()) @@ -143,12 +123,9 @@ bool CFile::ConsumeComment() } m_pos += 2; return true; - } - else if (m_buffer[m_pos] == '/' && m_buffer[m_pos + 1] == '/') - { + } else if (m_buffer[m_pos] == '/' && m_buffer[m_pos + 1] == '/') { m_pos += 2; - while (!ConsumeNewline()) - { + while (!ConsumeNewline()) { if (m_buffer[m_pos] == 0) return false; m_pos++; @@ -159,14 +136,12 @@ bool CFile::ConsumeComment() return false; } -void CFile::SkipWhitespace() -{ +void CFile::SkipWhitespace() { while (ConsumeHorizontalWhitespace() || ConsumeNewline() || ConsumeComment()) ; } -bool CFile::CheckIdentifier(const std::string& ident) -{ +bool CFile::CheckIdentifier(const std::string& ident) { unsigned int i; for (i = 0; i < ident.length() && m_pos + i < (unsigned)m_size; i++) @@ -176,15 +151,13 @@ bool CFile::CheckIdentifier(const std::string& ident) return (i == ident.length()); } -void CFile::CheckInclude() -{ +void CFile::CheckInclude() { if (m_buffer[m_pos] != '#') return; std::string ident = "#include"; - if (!CheckIdentifier(ident)) - { + if (!CheckIdentifier(ident)) { return; } @@ -199,27 +172,19 @@ void CFile::CheckInclude() } } -void CFile::CheckIncbin() -{ +void CFile::CheckIncbin() { // Optimization: assume most lines are not incbins - if (!(m_buffer[m_pos+0] == 'I' - && m_buffer[m_pos+1] == 'N' - && m_buffer[m_pos+2] == 'C' - && m_buffer[m_pos+3] == 'B' - && m_buffer[m_pos+4] == 'I' - && m_buffer[m_pos+5] == 'N' - && m_buffer[m_pos+6] == '_')) - { - return; + if (!(m_buffer[m_pos + 0] == 'I' && m_buffer[m_pos + 1] == 'N' && m_buffer[m_pos + 2] == 'C' && + m_buffer[m_pos + 3] == 'B' && m_buffer[m_pos + 4] == 'I' && m_buffer[m_pos + 5] == 'N' && + m_buffer[m_pos + 6] == '_')) { + return; } std::string idents[6] = { "INCBIN_S8", "INCBIN_U8", "INCBIN_S16", "INCBIN_U16", "INCBIN_S32", "INCBIN_U32" }; int incbinType = -1; - for (int i = 0; i < 6; i++) - { - if (CheckIdentifier(idents[i])) - { + for (int i = 0; i < 6; i++) { + if (CheckIdentifier(idents[i])) { incbinType = i; break; } @@ -235,8 +200,7 @@ void CFile::CheckIncbin() SkipWhitespace(); - if (m_buffer[m_pos] != '(') - { + if (m_buffer[m_pos] != '(') { m_pos = oldPos; m_lineNum = oldLineNum; return; @@ -244,8 +208,7 @@ void CFile::CheckIncbin() m_pos++; - while (true) - { + while (true) { SkipWhitespace(); std::string path = ReadPath(); @@ -264,15 +227,11 @@ void CFile::CheckIncbin() FATAL_INPUT_ERROR("expected ')'"); m_pos++; - } -std::string CFile::ReadPath() -{ - if (m_buffer[m_pos] != '"') - { - if (m_buffer[m_pos] == '<') - { +std::string CFile::ReadPath() { + if (m_buffer[m_pos] != '"') { + if (m_buffer[m_pos] == '<') { return std::string(); } FATAL_INPUT_ERROR("expected '\"' or '<'"); @@ -282,10 +241,8 @@ std::string CFile::ReadPath() int startPos = m_pos; - while (m_buffer[m_pos] != '"') - { - if (m_buffer[m_pos] == 0) - { + while (m_buffer[m_pos] != '"') { + if (m_buffer[m_pos] == 0) { if (m_pos >= m_size) FATAL_INPUT_ERROR("unexpected EOF in path string"); else diff --git a/tools/src/scaninc/c_file.h b/tools/src/scaninc/c_file.h index 618901b8..2d4fc688 100755..100644 --- a/tools/src/scaninc/c_file.h +++ b/tools/src/scaninc/c_file.h @@ -26,17 +26,20 @@ #include <memory> #include "scaninc.h" -class CFile -{ -public: +class CFile { + public: CFile(std::string path); ~CFile(); void FindIncbins(); - const std::set<std::string>& GetIncbins() { return m_incbins; } - const std::set<std::string>& GetIncludes() { return m_includes; } + const std::set<std::string>& GetIncbins() { + return m_incbins; + } + const std::set<std::string>& GetIncludes() { + return m_includes; + } -private: - char *m_buffer; + private: + char* m_buffer; int m_pos; int m_size; int m_lineNum; diff --git a/tools/src/scaninc/scaninc.cpp b/tools/src/scaninc/scaninc.cpp index 1bf7feb5..e77982c8 100755..100644 --- a/tools/src/scaninc/scaninc.cpp +++ b/tools/src/scaninc/scaninc.cpp @@ -27,9 +27,8 @@ #include "scaninc.h" #include "source_file.h" -bool CanOpenFile(std::string path) -{ - FILE *fp = std::fopen(path.c_str(), "rb"); +bool CanOpenFile(std::string path) { + FILE* fp = std::fopen(path.c_str(), "rb"); if (fp == NULL) return false; @@ -38,10 +37,9 @@ bool CanOpenFile(std::string path) return true; } -const char *const USAGE = "Usage: scaninc [-I INCLUDE_PATH] FILE_PATH\n"; +const char* const USAGE = "Usage: scaninc [-I INCLUDE_PATH] FILE_PATH\n"; -int main(int argc, char **argv) -{ +int main(int argc, char** argv) { std::queue<std::string> filesToProcess; std::set<std::string> dependencies; @@ -50,26 +48,20 @@ int main(int argc, char **argv) argc--; argv++; - while (argc > 1) - { + while (argc > 1) { std::string arg(argv[0]); - if (arg.substr(0, 2) == "-I") - { + if (arg.substr(0, 2) == "-I") { std::string includeDir = arg.substr(2); - if (includeDir.empty()) - { + if (includeDir.empty()) { argc--; argv++; includeDir = std::string(argv[0]); } - if (!includeDir.empty() && includeDir.back() != '/') - { + if (!includeDir.empty() && includeDir.back() != '/') { includeDir += '/'; } includeDirs.push_back(includeDir); - } - else - { + } else { FATAL_ERROR(USAGE); } argc--; @@ -84,36 +76,28 @@ int main(int argc, char **argv) filesToProcess.push(initialPath); - while (!filesToProcess.empty()) - { + while (!filesToProcess.empty()) { std::string filePath = filesToProcess.front(); SourceFile file(filePath); filesToProcess.pop(); includeDirs.push_back(file.GetSrcDir()); - for (auto incbin : file.GetIncbins()) - { + for (auto incbin : file.GetIncbins()) { // Search for the incbin in the include directories as well. - for (auto includeDir : includeDirs) - { + for (auto includeDir : includeDirs) { std::string path(includeDir + incbin); - if (CanOpenFile(path)) - { + if (CanOpenFile(path)) { dependencies.insert(path); break; } } } - for (auto include : file.GetIncludes()) - { - for (auto includeDir : includeDirs) - { + for (auto include : file.GetIncludes()) { + for (auto includeDir : includeDirs) { std::string path(includeDir + include); - if (CanOpenFile(path)) - { + if (CanOpenFile(path)) { bool inserted = dependencies.insert(path).second; - if (inserted) - { + if (inserted) { filesToProcess.push(path); } break; @@ -123,8 +107,7 @@ int main(int argc, char **argv) includeDirs.pop_back(); } - for (const std::string &path : dependencies) - { + for (const std::string& path : dependencies) { std::printf("%s\n", path.c_str()); } } diff --git a/tools/src/scaninc/scaninc.h b/tools/src/scaninc/scaninc.h index 30cc9611..92bff804 100755..100644 --- a/tools/src/scaninc/scaninc.h +++ b/tools/src/scaninc/scaninc.h @@ -26,31 +26,31 @@ #ifdef _MSC_VER -#define FATAL_INPUT_ERROR(format, ...) \ -do { \ - fprintf(stderr, "%s:%d " format, m_path.c_str(), m_lineNum, __VA_ARGS__); \ - exit(1); \ -} while (0) - -#define FATAL_ERROR(format, ...) \ -do { \ - fprintf(stderr, format, __VA_ARGS__); \ - exit(1); \ -} while (0) +#define FATAL_INPUT_ERROR(format, ...) \ + do { \ + fprintf(stderr, "%s:%d " format, m_path.c_str(), m_lineNum, __VA_ARGS__); \ + exit(1); \ + } while (0) + +#define FATAL_ERROR(format, ...) \ + do { \ + fprintf(stderr, format, __VA_ARGS__); \ + exit(1); \ + } while (0) #else -#define FATAL_INPUT_ERROR(format, ...) \ -do { \ - fprintf(stderr, "%s:%d " format, m_path.c_str(), m_lineNum, ##__VA_ARGS__); \ - exit(1); \ -} while (0) - -#define FATAL_ERROR(format, ...) \ -do { \ - fprintf(stderr, format, ##__VA_ARGS__); \ - exit(1); \ -} while (0) +#define FATAL_INPUT_ERROR(format, ...) \ + do { \ + fprintf(stderr, "%s:%d " format, m_path.c_str(), m_lineNum, ##__VA_ARGS__); \ + exit(1); \ + } while (0) + +#define FATAL_ERROR(format, ...) \ + do { \ + fprintf(stderr, format, ##__VA_ARGS__); \ + exit(1); \ + } while (0) #endif // _MSC_VER diff --git a/tools/src/scaninc/source_file.cpp b/tools/src/scaninc/source_file.cpp index f23ff6db..12daa0c6 100755..100644 --- a/tools/src/scaninc/source_file.cpp +++ b/tools/src/scaninc/source_file.cpp @@ -21,9 +21,7 @@ #include <new> #include "source_file.h" - -SourceFileType GetFileType(std::string& path) -{ +SourceFileType GetFileType(std::string& path) { std::size_t pos = path.find_last_of('.'); if (pos == std::string::npos) @@ -41,13 +39,12 @@ SourceFileType GetFileType(std::string& path) return SourceFileType::Inc; else FATAL_ERROR("Unrecognized extension \"%s\"\n", extension.c_str()); - + // Unreachable return SourceFileType::Cpp; } -std::string GetDir(std::string& path) -{ +std::string GetDir(std::string& path) { std::size_t slash = path.rfind('/'); if (slash != std::string::npos) @@ -56,20 +53,15 @@ std::string GetDir(std::string& path) return std::string(""); } -SourceFile::SourceFile(std::string path) -{ +SourceFile::SourceFile(std::string path) { m_file_type = GetFileType(path); m_src_dir = GetDir(path); - if (m_file_type == SourceFileType::Cpp - || m_file_type == SourceFileType::Header) - { + if (m_file_type == SourceFileType::Cpp || m_file_type == SourceFileType::Header) { new (&m_source_file.c_file) CFile(path); m_source_file.c_file.FindIncbins(); - } - else - { + } else { AsmFile file(path); std::set<std::string> incbins; std::set<std::string> includes; @@ -77,49 +69,40 @@ SourceFile::SourceFile(std::string path) IncDirectiveType incDirectiveType; std::string outputPath; - while ((incDirectiveType = file.ReadUntilIncDirective(outputPath)) != IncDirectiveType::None) - { + while ((incDirectiveType = file.ReadUntilIncDirective(outputPath)) != IncDirectiveType::None) { if (incDirectiveType == IncDirectiveType::Include) includes.insert(outputPath); else incbins.insert(outputPath); } - - new (&m_source_file.asm_wrapper) SourceFile::InnerUnion::AsmWrapper{incbins, includes}; + + new (&m_source_file.asm_wrapper) SourceFile::InnerUnion::AsmWrapper{ incbins, includes }; } } -SourceFile::~SourceFile() -{ - if (m_file_type == SourceFileType::Cpp || m_file_type == SourceFileType::Header) - { +SourceFile::~SourceFile() { + if (m_file_type == SourceFileType::Cpp || m_file_type == SourceFileType::Header) { m_source_file.c_file.~CFile(); - } - else - { + } else { m_source_file.asm_wrapper.asm_incbins.~set(); m_source_file.asm_wrapper.asm_includes.~set(); } } -const std::set<std::string>& SourceFile::GetIncbins() -{ +const std::set<std::string>& SourceFile::GetIncbins() { if (m_file_type == SourceFileType::Cpp || m_file_type == SourceFileType::Header) return m_source_file.c_file.GetIncbins(); else return m_source_file.asm_wrapper.asm_incbins; } -const std::set<std::string>& SourceFile::GetIncludes() -{ +const std::set<std::string>& SourceFile::GetIncludes() { if (m_file_type == SourceFileType::Cpp || m_file_type == SourceFileType::Header) return m_source_file.c_file.GetIncludes(); else return m_source_file.asm_wrapper.asm_includes; } -std::string& SourceFile::GetSrcDir() -{ +std::string& SourceFile::GetSrcDir() { return m_src_dir; } - diff --git a/tools/src/scaninc/source_file.h b/tools/src/scaninc/source_file.h index f7b6412b..76a09d8c 100755..100644 --- a/tools/src/scaninc/source_file.h +++ b/tools/src/scaninc/source_file.h @@ -26,32 +26,24 @@ #include "asm_file.h" #include "c_file.h" -enum class SourceFileType -{ - Cpp, - Header, - Asm, - Inc -}; +enum class SourceFileType { Cpp, Header, Asm, Inc }; SourceFileType GetFileType(std::string& path); -class SourceFile -{ -public: - +class SourceFile { + public: SourceFile(std::string path); ~SourceFile(); SourceFile(SourceFile const&) = delete; SourceFile(SourceFile&&) = delete; - SourceFile& operator =(SourceFile const&) = delete; - SourceFile& operator =(SourceFile&&) = delete; + SourceFile& operator=(SourceFile const&) = delete; + SourceFile& operator=(SourceFile&&) = delete; bool HasIncbins(); const std::set<std::string>& GetIncbins(); const std::set<std::string>& GetIncludes(); std::string& GetSrcDir(); -private: + private: union InnerUnion { CFile c_file; struct AsmWrapper { @@ -60,12 +52,11 @@ private: } asm_wrapper; // Construction and destruction handled by SourceFile. - InnerUnion() {}; - ~InnerUnion() {}; + InnerUnion(){}; + ~InnerUnion(){}; } m_source_file; SourceFileType m_file_type; std::string m_src_dir; }; #endif // SOURCE_FILE_H - diff --git a/tools/src/tmc_strings/main.cpp b/tools/src/tmc_strings/main.cpp index 6490113a..7f5bbf22 100644 --- a/tools/src/tmc_strings/main.cpp +++ b/tools/src/tmc_strings/main.cpp @@ -4,522 +4,339 @@ using namespace std::string_literals; using json = nlohmann::json; -using u8 = std::uint8_t; -using u16 = std::uint16_t; -using u32 = std::uint32_t; +using u8 = std::uint8_t; +using u16 = std::uint16_t; +using u32 = std::uint32_t; const u32 RomStartAddress = 0x8000000; namespace { - struct LanguageTable { - const char *name; - u32 address; - }; - - enum Color { - Color_White, - Color_Red, - Color_Green, - Color_Blue, - Color_Yellow, - - Color_Count, - }; - - constexpr const char *const ColorStrings[] = { - "White", - "Red", - "Green", - "Blue", - "Yellow", - }; - - enum Input { - Input_A, - Input_B, - Input_Left, - Input_Right, - Input_DUp, - Input_DDown, - Input_DLeft, - Input_DRight, - Input_Dpad, - Input_Select, - Input_Start, - - Input_Count, - }; - - constexpr const char *const InputStrings[] = { - "A", - "B", - "Left", - "Right", - "DUp", - "DDown", - "DLeft", - "DRight", - "Dpad", - "Select", - "Start", - }; - - const std::map<u8, std::string> CharConvertArray = { - {0x0a, "\n"}, - {0x0d, "\r"}, - {0x20, " "}, - {0x21, "!"}, - {0x22, "\""}, - {0x23, "#"}, - {0x24, "$"}, - {0x25, "%"}, - {0x26, "&"}, - {0x27, "\'"}, - {0x28, "("}, - {0x29, ")"}, - {0x2a, "*"}, - {0x2b, "+"}, - {0x2c, ","}, - {0x2d, "-"}, - {0x2e, "."}, - {0x2f, "/"}, - {0x30, "0"}, - {0x31, "1"}, - {0x32, "2"}, - {0x33, "3"}, - {0x34, "4"}, - {0x35, "5"}, - {0x36, "6"}, - {0x37, "7"}, - {0x38, "8"}, - {0x39, "9"}, - {0x3a, ":"}, - {0x3b, ";"}, - {0x3c, "<"}, - {0x3d, "="}, - {0x3e, ">"}, - {0x3f, "?"}, - {0x40, "@"}, - {0x41, "A"}, - {0x42, "B"}, - {0x43, "C"}, - {0x44, "D"}, - {0x45, "E"}, - {0x46, "F"}, - {0x47, "G"}, - {0x48, "H"}, - {0x49, "I"}, - {0x4a, "J"}, - {0x4b, "K"}, - {0x4c, "L"}, - {0x4d, "M"}, - {0x4e, "N"}, - {0x4f, "O"}, - {0x50, "P"}, - {0x51, "Q"}, - {0x52, "R"}, - {0x53, "S"}, - {0x54, "T"}, - {0x55, "U"}, - {0x56, "V"}, - {0x57, "W"}, - {0x58, "X"}, - {0x59, "Y"}, - {0x5a, "Z"}, - {0x5b, "["}, - {0x5c, "\'"}, - {0x5d, "]"}, - {0x5e, "^"}, - {0x5f, "_"}, - {0x60, "`"}, - {0x61, "a"}, - {0x62, "b"}, - {0x63, "c"}, - {0x64, "d"}, - {0x65, "e"}, - {0x66, "f"}, - {0x67, "g"}, - {0x68, "h"}, - {0x69, "i"}, - {0x6a, "j"}, - {0x6b, "k"}, - {0x6c, "l"}, - {0x6d, "m"}, - {0x6e, "n"}, - {0x6f, "o"}, - {0x70, "p"}, - {0x71, "q"}, - {0x72, "r"}, - {0x73, "s"}, - {0x74, "t"}, - {0x75, "u"}, - {0x76, "v"}, - {0x77, "w"}, - {0x78, "x"}, - {0x79, "y"}, - {0x7a, "z"}, - {0x82, ","}, - {0x84, "„"}, - {0x85, "⋯"}, - {0x8A, "Š"}, - {0x8B, "‹"}, - {0x8C, "Œ"}, - {0x8E, "Ž"}, - {0x91, "‘"}, - {0x92, "’"}, - {0x93, "“"}, - {0x94, "”"}, - {0x95, "·"}, - {0x99, "™"}, - {0x9A, "š"}, - {0x9B, "›"}, - {0x9C, "œ"}, - {0x9E, "ž"}, - {0x9F, "Ÿ"}, - {0xA1, "¡"}, - {0xA3, "♪"}, - {0xAA, "ª"}, - {0xAB, "«"}, - {0xB0, "º"}, - {0xB4, "'"}, - {0xB7, "´"}, - {0xBA, "º"}, - {0xBB, "»"}, - {0xBF, "¿"}, - {0xC0, "À"}, - {0xC1, "Á"}, - {0xC2, "Â"}, - {0xC3, "Ã"}, - {0xC4, "Ä"}, - {0xC5, "Å"}, - {0xC6, "Æ"}, - {0xC7, "Ç"}, - {0xC8, "È"}, - {0xC9, "É"}, - {0xCA, "Ê"}, - {0xCB, "Ë"}, - {0xCC, "Ì"}, - {0xCD, "Í"}, - {0xCE, "Î"}, - {0xCF, "Ï"}, - {0xD0, "Đ"}, - {0xD1, "Ñ"}, - {0xD2, "Ò"}, - {0xD3, "Ó"}, - {0xD4, "Ô"}, - {0xD5, "Õ"}, - {0xD6, "Ö"}, - {0xD7, "×"}, - {0xD8, "Ø"}, - {0xD9, "Ù"}, - {0xDA, "Ú"}, - {0xDB, "Û"}, - {0xDC, "Ü"}, - {0xDD, "Ý"}, - {0xDE, "Þ"}, - {0xDF, "β"}, - {0xE0, "à"}, - {0xE1, "á"}, - {0xE2, "â"}, - {0xE3, "ã"}, - {0xE4, "ä"}, - {0xE5, "å"}, - {0xE6, "æ"}, - {0xE7, "ç"}, - {0xE8, "è"}, - {0xE9, "é"}, - {0xEA, "ê"}, - {0xEB, "ë"}, - {0xEC, "ì"}, - {0xED, "í"}, - {0xEE, "î"}, - {0xEF, "ï"}, - {0xF0, "ð"}, - {0xF1, "ñ"}, - {0xF2, "ò"}, - {0xF3, "ó"}, - {0xF4, "ô"}, - {0xF5, "õ"}, - {0xF6, "ö"}, - {0xF7, "÷"}, - {0xF8, "ø"}, - {0xF9, "ù"}, - {0xFA, "ú"}, - {0xFB, "û"}, - {0xFC, "ü"}, - {0xFD, "ý"}, - {0xFE, "þ"}, - {0xFF, "ÿ"}, - }; - - using ConvertFunction = std::string (*const)(const char *&); - - std::string Unk1Handler(const char *&ptr) { - u8 a = *ptr++; - return fmt::format("{{01:{:02X}}}", a); - } +struct LanguageTable { + const char* name; + u32 address; +}; - std::string ColorHandler(const char *&ptr) { - u8 color = *ptr++; - if (color >= Color_Count) - throw std::runtime_error(ptr); - return fmt::format("{{Color:{}}}", ColorStrings[color]); - } +enum Color { + Color_White, + Color_Red, + Color_Green, + Color_Blue, + Color_Yellow, - std::string SoundHandler(const char *&ptr) { - u8 a = *ptr++; - u8 b = *ptr++; - return fmt::format("{{Sound:{:02X}:{:02X}}}", a, b); - } + Color_Count, +}; - std::string Unk4Handler(const char *&ptr) { - u8 a = *ptr++; - if (a == 0x10) { - u8 b = *ptr++; - return fmt::format("{{04:{:02X}:{:02X}}}", a, b); - } else { - return fmt::format("{{04:{:02X}}}", a); - } - } +constexpr const char* const ColorStrings[] = { + "White", "Red", "Green", "Blue", "Yellow", +}; - std::string ChoiceHandler(const char *&ptr) { - u8 category = *ptr++; - if (category == 0xff) { - return "{Choice:FF}"; - } else { - u8 action = *ptr++; - return fmt::format("{{Choice:{:02X}:{:02X}}}", category, action); - } - } +enum Input { + Input_A, + Input_B, + Input_Left, + Input_Right, + Input_DUp, + Input_DDown, + Input_DLeft, + Input_DRight, + Input_Dpad, + Input_Select, + Input_Start, + + Input_Count, +}; - std::string VariableHandler(const char *&ptr) { - u8 idx = *ptr++; - if (idx == 0) { - return "{Player}"; - } else { - return fmt::format("{{Var:{:X}}}", idx); - } - } +constexpr const char* const InputStrings[] = { + "A", "B", "Left", "Right", "DUp", "DDown", "DLeft", "DRight", "Dpad", "Select", "Start", +}; + +const std::map<u8, std::string> CharConvertArray = { + { 0x0a, "\n" }, { 0x0d, "\r" }, { 0x20, " " }, { 0x21, "!" }, { 0x22, "\"" }, { 0x23, "#" }, { 0x24, "$" }, + { 0x25, "%" }, { 0x26, "&" }, { 0x27, "\'" }, { 0x28, "(" }, { 0x29, ")" }, { 0x2a, "*" }, { 0x2b, "+" }, + { 0x2c, "," }, { 0x2d, "-" }, { 0x2e, "." }, { 0x2f, "/" }, { 0x30, "0" }, { 0x31, "1" }, { 0x32, "2" }, + { 0x33, "3" }, { 0x34, "4" }, { 0x35, "5" }, { 0x36, "6" }, { 0x37, "7" }, { 0x38, "8" }, { 0x39, "9" }, + { 0x3a, ":" }, { 0x3b, ";" }, { 0x3c, "<" }, { 0x3d, "=" }, { 0x3e, ">" }, { 0x3f, "?" }, { 0x40, "@" }, + { 0x41, "A" }, { 0x42, "B" }, { 0x43, "C" }, { 0x44, "D" }, { 0x45, "E" }, { 0x46, "F" }, { 0x47, "G" }, + { 0x48, "H" }, { 0x49, "I" }, { 0x4a, "J" }, { 0x4b, "K" }, { 0x4c, "L" }, { 0x4d, "M" }, { 0x4e, "N" }, + { 0x4f, "O" }, { 0x50, "P" }, { 0x51, "Q" }, { 0x52, "R" }, { 0x53, "S" }, { 0x54, "T" }, { 0x55, "U" }, + { 0x56, "V" }, { 0x57, "W" }, { 0x58, "X" }, { 0x59, "Y" }, { 0x5a, "Z" }, { 0x5b, "[" }, { 0x5c, "\'" }, + { 0x5d, "]" }, { 0x5e, "^" }, { 0x5f, "_" }, { 0x60, "`" }, { 0x61, "a" }, { 0x62, "b" }, { 0x63, "c" }, + { 0x64, "d" }, { 0x65, "e" }, { 0x66, "f" }, { 0x67, "g" }, { 0x68, "h" }, { 0x69, "i" }, { 0x6a, "j" }, + { 0x6b, "k" }, { 0x6c, "l" }, { 0x6d, "m" }, { 0x6e, "n" }, { 0x6f, "o" }, { 0x70, "p" }, { 0x71, "q" }, + { 0x72, "r" }, { 0x73, "s" }, { 0x74, "t" }, { 0x75, "u" }, { 0x76, "v" }, { 0x77, "w" }, { 0x78, "x" }, + { 0x79, "y" }, { 0x7a, "z" }, { 0x82, "," }, { 0x84, "„" }, { 0x85, "⋯" }, { 0x8A, "Š" }, { 0x8B, "‹" }, + { 0x8C, "Œ" }, { 0x8E, "Ž" }, { 0x91, "‘" }, { 0x92, "’" }, { 0x93, "“" }, { 0x94, "”" }, { 0x95, "·" }, + { 0x99, "™" }, { 0x9A, "š" }, { 0x9B, "›" }, { 0x9C, "œ" }, { 0x9E, "ž" }, { 0x9F, "Ÿ" }, { 0xA1, "¡" }, + { 0xA3, "♪" }, { 0xAA, "ª" }, { 0xAB, "«" }, { 0xB0, "º" }, { 0xB4, "'" }, { 0xB7, "´" }, { 0xBA, "º" }, + { 0xBB, "»" }, { 0xBF, "¿" }, { 0xC0, "À" }, { 0xC1, "Á" }, { 0xC2, "Â" }, { 0xC3, "Ã" }, { 0xC4, "Ä" }, + { 0xC5, "Å" }, { 0xC6, "Æ" }, { 0xC7, "Ç" }, { 0xC8, "È" }, { 0xC9, "É" }, { 0xCA, "Ê" }, { 0xCB, "Ë" }, + { 0xCC, "Ì" }, { 0xCD, "Í" }, { 0xCE, "Î" }, { 0xCF, "Ï" }, { 0xD0, "Đ" }, { 0xD1, "Ñ" }, { 0xD2, "Ò" }, + { 0xD3, "Ó" }, { 0xD4, "Ô" }, { 0xD5, "Õ" }, { 0xD6, "Ö" }, { 0xD7, "×" }, { 0xD8, "Ø" }, { 0xD9, "Ù" }, + { 0xDA, "Ú" }, { 0xDB, "Û" }, { 0xDC, "Ü" }, { 0xDD, "Ý" }, { 0xDE, "Þ" }, { 0xDF, "β" }, { 0xE0, "à" }, + { 0xE1, "á" }, { 0xE2, "â" }, { 0xE3, "ã" }, { 0xE4, "ä" }, { 0xE5, "å" }, { 0xE6, "æ" }, { 0xE7, "ç" }, + { 0xE8, "è" }, { 0xE9, "é" }, { 0xEA, "ê" }, { 0xEB, "ë" }, { 0xEC, "ì" }, { 0xED, "í" }, { 0xEE, "î" }, + { 0xEF, "ï" }, { 0xF0, "ð" }, { 0xF1, "ñ" }, { 0xF2, "ò" }, { 0xF3, "ó" }, { 0xF4, "ô" }, { 0xF5, "õ" }, + { 0xF6, "ö" }, { 0xF7, "÷" }, { 0xF8, "ø" }, { 0xF9, "ù" }, { 0xFA, "ú" }, { 0xFB, "û" }, { 0xFC, "ü" }, + { 0xFD, "ý" }, { 0xFE, "þ" }, { 0xFF, "ÿ" }, +}; + +using ConvertFunction = std::string (*const)(const char*&); + +std::string Unk1Handler(const char*& ptr) { + u8 a = *ptr++; + return fmt::format("{{01:{:02X}}}", a); +} - std::string Unk7Handler(const char *&ptr) { - u8 a = *ptr++; +std::string ColorHandler(const char*& ptr) { + u8 color = *ptr++; + if (color >= Color_Count) + throw std::runtime_error(ptr); + return fmt::format("{{Color:{}}}", ColorStrings[color]); +} + +std::string SoundHandler(const char*& ptr) { + u8 a = *ptr++; + u8 b = *ptr++; + return fmt::format("{{Sound:{:02X}:{:02X}}}", a, b); +} + +std::string Unk4Handler(const char*& ptr) { + u8 a = *ptr++; + if (a == 0x10) { u8 b = *ptr++; - return fmt::format("{{07:{:02X}:{:02X}}}", a, b); + return fmt::format("{{04:{:02X}:{:02X}}}", a, b); + } else { + return fmt::format("{{04:{:02X}}}", a); } +} - std::string Unk8Handler(const char *&ptr) { - u8 a = *ptr++; - if (a != 0xff) - throw std::runtime_error("unmatched unk8: "s + std::to_string(a)); - return "{08:FF}"; +std::string ChoiceHandler(const char*& ptr) { + u8 category = *ptr++; + if (category == 0xff) { + return "{Choice:FF}"; + } else { + u8 action = *ptr++; + return fmt::format("{{Choice:{:02X}:{:02X}}}", category, action); } +} - std::string Unk9Handler(const char *&ptr) { - u8 a = *ptr++; - if (a != 0x78 && a != 0x00) - throw std::runtime_error("unmatched unk8: "s + std::to_string(a)); - return fmt::format("{{09:{:02X}}}", a); +std::string VariableHandler(const char*& ptr) { + u8 idx = *ptr++; + if (idx == 0) { + return "{Player}"; + } else { + return fmt::format("{{Var:{:X}}}", idx); } +} - std::string InputHandler(const char *&ptr) { - u8 key = *ptr++; - if (key > 8) - throw std::runtime_error("unmatched key: "s + std::to_string(key)); - return fmt::format("{{Key:{}}}", InputStrings[key]); - } +std::string Unk7Handler(const char*& ptr) { + u8 a = *ptr++; + u8 b = *ptr++; + return fmt::format("{{07:{:02X}:{:02X}}}", a, b); +} - std::string SymbolHandler(const char *&ptr) { - u8 a = *ptr++; - return fmt::format("{{Symbol:{:02X}}}", a); - } +std::string Unk8Handler(const char*& ptr) { + u8 a = *ptr++; + if (a != 0xff) + throw std::runtime_error("unmatched unk8: "s + std::to_string(a)); + return "{08:FF}"; +} - const std::map<u8, ConvertFunction> FuncConvertArray = { - {0x01, Unk1Handler}, - {0x02, ColorHandler}, - {0x03, SoundHandler}, - {0x04, Unk4Handler}, - {0x05, ChoiceHandler}, - {0x06, VariableHandler}, - {0x07, Unk7Handler}, - {0x08, Unk8Handler}, - {0x09, Unk9Handler}, - {0x0c, InputHandler}, - {0x0f, SymbolHandler}, - }; - - std::string ParseTMCString(const char *ptr) { - std::string ret; - - while (*ptr) { - u8 c = *ptr++; - - /* Convert character. */ - { - const auto it = CharConvertArray.find(c); - - if (it != std::end(CharConvertArray)) { - ret += it->second; - continue; - } - } +std::string Unk9Handler(const char*& ptr) { + u8 a = *ptr++; + if (a != 0x78 && a != 0x00) + throw std::runtime_error("unmatched unk8: "s + std::to_string(a)); + return fmt::format("{{09:{:02X}}}", a); +} - /* Convert function. */ - { - const auto it = FuncConvertArray.find(c); +std::string InputHandler(const char*& ptr) { + u8 key = *ptr++; + if (key > 8) + throw std::runtime_error("unmatched key: "s + std::to_string(key)); + return fmt::format("{{Key:{}}}", InputStrings[key]); +} - if (it != std::end(FuncConvertArray)) { - ret += it->second(ptr); - continue; - } - } +std::string SymbolHandler(const char*& ptr) { + u8 a = *ptr++; + return fmt::format("{{Symbol:{:02X}}}", a); +} + +const std::map<u8, ConvertFunction> FuncConvertArray = { + { 0x01, Unk1Handler }, { 0x02, ColorHandler }, { 0x03, SoundHandler }, { 0x04, Unk4Handler }, + { 0x05, ChoiceHandler }, { 0x06, VariableHandler }, { 0x07, Unk7Handler }, { 0x08, Unk8Handler }, + { 0x09, Unk9Handler }, { 0x0c, InputHandler }, { 0x0f, SymbolHandler }, +}; + +std::string ParseTMCString(const char* ptr) { + std::string ret; + + while (*ptr) { + u8 c = *ptr++; - throw std::runtime_error(fmt::format("Unknown characters: {}", ptr)); + /* Convert character. */ + { + const auto it = CharConvertArray.find(c); + + if (it != std::end(CharConvertArray)) { + ret += it->second; + continue; + } } - return ret; - } + /* Convert function. */ + { + const auto it = FuncConvertArray.find(c); - using RevertFunction = void (*)(const char *&, char *&); - - void ColorRevert(const char *&src, char *&dst) { - *dst++ = 0x02; - src++; // ':' - for (u32 i = 0; i < Color_Count; i++) { - const char *const color = ColorStrings[i]; - const std::size_t color_len = std::strlen(color); - if (std::strncmp(src, color, color_len) == 0) { - *dst++ = i; - src += color_len; - return; + if (it != std::end(FuncConvertArray)) { + ret += it->second(ptr); + continue; } } - throw std::runtime_error(fmt::format("Color not found: {}", src)); + throw std::runtime_error(fmt::format("Unknown characters: {}", ptr)); } - void SoundRevert(const char *&src, char *&dst) { - *dst++ = 0x03; - *dst++ = std::strtoul(++src, nullptr, 0x10); - src += 2; - *dst++ = std::strtoul(++src, nullptr, 0x10); - src += 2; + return ret; +} + +using RevertFunction = void (*)(const char*&, char*&); + +void ColorRevert(const char*& src, char*& dst) { + *dst++ = 0x02; + src++; // ':' + for (u32 i = 0; i < Color_Count; i++) { + const char* const color = ColorStrings[i]; + const std::size_t color_len = std::strlen(color); + if (std::strncmp(src, color, color_len) == 0) { + *dst++ = i; + src += color_len; + return; + } } - void ChoiceRevert(const char *&src, char *&dst) { - *dst++ = 0x05; - u8 choice = std::strtoul(++src, nullptr, 0x10); + throw std::runtime_error(fmt::format("Color not found: {}", src)); +} - *dst++ = choice; - src += 2; +void SoundRevert(const char*& src, char*& dst) { + *dst++ = 0x03; + *dst++ = std::strtoul(++src, nullptr, 0x10); + src += 2; + *dst++ = std::strtoul(++src, nullptr, 0x10); + src += 2; +} - if (choice == 0xff) - return; +void ChoiceRevert(const char*& src, char*& dst) { + *dst++ = 0x05; + u8 choice = std::strtoul(++src, nullptr, 0x10); - *dst++ = std::strtoul(++src, nullptr, 0x10); - src += 2; - } + *dst++ = choice; + src += 2; - void PlayerRevert(const char *&src, char *&dst) { - *dst++ = 0x06; - *dst++ = 0x00; + if (choice == 0xff) + return; - (void)src; - } + *dst++ = std::strtoul(++src, nullptr, 0x10); + src += 2; +} - void VariableRevert(const char *&src, char *&dst) { - *dst++ = 0x06; - src++; // ':' +void PlayerRevert(const char*& src, char*& dst) { + *dst++ = 0x06; + *dst++ = 0x00; - *dst++ = std::strtoul(src, nullptr, 0x10); - src++; - } + (void)src; +} - void KeyRevert(const char *&src, char *&dst) { - *dst++ = 0x0c; - src++; // ':' - for (u32 i = 0; i < Input_Count; i++) { - const char *const input = InputStrings[i]; - const std::size_t input_len = std::strlen(input); - if (std::strncmp(src, input, input_len) == 0) { - *dst++ = i; - src += input_len; - return; - } - } +void VariableRevert(const char*& src, char*& dst) { + *dst++ = 0x06; + src++; // ':' - throw std::runtime_error(fmt::format("Input not found: {}", src)); + *dst++ = std::strtoul(src, nullptr, 0x10); + src++; +} + +void KeyRevert(const char*& src, char*& dst) { + *dst++ = 0x0c; + src++; // ':' + for (u32 i = 0; i < Input_Count; i++) { + const char* const input = InputStrings[i]; + const std::size_t input_len = std::strlen(input); + if (std::strncmp(src, input, input_len) == 0) { + *dst++ = i; + src += input_len; + return; + } } - void SymbolRevert(const char *&src, char *&dst) { - *dst++ = 0x0f; - src++; // ':' + throw std::runtime_error(fmt::format("Input not found: {}", src)); +} + +void SymbolRevert(const char*& src, char*& dst) { + *dst++ = 0x0f; + src++; // ':' - *dst++ = std::strtoul(src, nullptr, 0x10); - src += 2; - } + *dst++ = std::strtoul(src, nullptr, 0x10); + src += 2; +} + +const std::pair<std::string, RevertFunction> FuncRevertArray[] = { + { "Color", ColorRevert }, { "Sound", SoundRevert }, { "Choice", ChoiceRevert }, { "Player", PlayerRevert }, + { "Var", VariableRevert }, { "Key", KeyRevert }, { "Symbol", SymbolRevert }, +}; - const std::pair<std::string, RevertFunction> FuncRevertArray[] = { - {"Color", ColorRevert}, - {"Sound", SoundRevert}, - {"Choice", ChoiceRevert}, - {"Player", PlayerRevert}, - {"Var", VariableRevert}, - {"Key", KeyRevert}, - {"Symbol", SymbolRevert}, - }; - - void WriteTMCString(char *&dst, const std::string &src) { - const char *ptr = src.data(); - - while (*ptr) { - /* Parse special */ - { - if (*ptr == '{') { - ptr++; - const auto it = std::find_if(std::begin(FuncRevertArray), std::end(FuncRevertArray), [&](const auto &data) { +void WriteTMCString(char*& dst, const std::string& src) { + const char* ptr = src.data(); + + while (*ptr) { + /* Parse special */ + { + if (*ptr == '{') { + ptr++; + const auto it = + std::find_if(std::begin(FuncRevertArray), std::end(FuncRevertArray), [&](const auto& data) { return std::strncmp(ptr, data.first.c_str(), data.first.size()) == 0; }); - if (it != std::end(FuncRevertArray)) { - ptr += it->first.size(); - it->second(ptr, dst); - } else { - do { - *dst++ = std::strtoul(ptr, nullptr, 0x10); - ptr += 2; - } while (*ptr == ':' && (ptr++, true)); - } - - if (*ptr != '}') - throw std::runtime_error(fmt::format("unmatched characters: \"{}\"\n", ptr)); - - ptr++; - continue; + if (it != std::end(FuncRevertArray)) { + ptr += it->first.size(); + it->second(ptr, dst); + } else { + do { + *dst++ = std::strtoul(ptr, nullptr, 0x10); + ptr += 2; + } while (*ptr == ':' && (ptr++, true)); } + + if (*ptr != '}') + throw std::runtime_error(fmt::format("unmatched characters: \"{}\"\n", ptr)); + + ptr++; + continue; } + } - /* Convert character. */ - { - const auto it = std::find_if(std::begin(CharConvertArray), std::end(CharConvertArray), [ptr](const auto &data) { + /* Convert character. */ + { + const auto it = + std::find_if(std::begin(CharConvertArray), std::end(CharConvertArray), [ptr](const auto& data) { return std::strncmp(ptr, data.second.c_str(), data.second.length()) == 0; }); - if (it != std::end(CharConvertArray)) { - ptr += it->second.size(); - *dst++ = it->first; - continue; - } + if (it != std::end(CharConvertArray)) { + ptr += it->second.size(); + *dst++ = it->first; + continue; } - - throw std::runtime_error(fmt::format("unmatched characters: \"{}\"\n", ptr)); } - *dst++ = '\0'; - } + throw std::runtime_error(fmt::format("unmatched characters: \"{}\"\n", ptr)); + } + *dst++ = '\0'; } -void ExtractStringTable(std::string &rom_path, const std::vector<LanguageTable> &tables) { +} // namespace + +void ExtractStringTable(std::string& rom_path, const std::vector<LanguageTable>& tables) { const std::vector<char> rom = [&]() { std::vector<char> rom; @@ -543,11 +360,9 @@ void ExtractStringTable(std::string &rom_path, const std::vector<LanguageTable> return rom; }(); - auto ReadAbsolute = [&](u32 address) -> u32 { - return *(u32 *)&rom[address - RomStartAddress]; - }; + auto ReadAbsolute = [&](u32 address) -> u32 { return *(u32*)&rom[address - RomStartAddress]; }; - for (auto &language : tables) { + for (auto& language : tables) { /* Get category table start. */ const std::size_t table_start = language.address; @@ -560,7 +375,7 @@ void ExtractStringTable(std::string &rom_path, const std::vector<LanguageTable> json j = json::array(); - for (auto &category_offset : category_table) { + for (auto& category_offset : category_table) { /* Get string table start. */ const std::size_t category_start = table_start + category_offset; @@ -571,7 +386,7 @@ void ExtractStringTable(std::string &rom_path, const std::vector<LanguageTable> std::vector<u32> string_table(string_count); std::memcpy(&string_table[0], &rom[category_start - RomStartAddress], string_count * sizeof(u32)); - auto &category = j.emplace_back(); + auto& category = j.emplace_back(); for (std::size_t l = 0; l < string_count; l++) { /* Get string start. */ @@ -588,7 +403,7 @@ void ExtractStringTable(std::string &rom_path, const std::vector<LanguageTable> } } -void PackStringTable(const std::string &src_path, const std::string &dst_path, const std::size_t out_size) { +void PackStringTable(const std::string& src_path, const std::string& dst_path, const std::size_t out_size) { const json j = [&]() -> json { std::ifstream ifs(src_path); @@ -603,16 +418,16 @@ void PackStringTable(const std::string &src_path, const std::string &dst_path, c std::vector<char> buffer(0x100000); std::uintptr_t root_start = (std::uintptr_t)buffer.data(); - char *root_ptr = buffer.data(); - char *table = buffer.data() + j.size() * sizeof(u32); + char* root_ptr = buffer.data(); + char* table = buffer.data() + j.size() * sizeof(u32); - for (auto &category : j) { - char *table_ptr = table; - char *str_start = table_ptr + category.size() * sizeof(u32); - char *str_ptr = str_start; - for (auto &str_j : category) { + for (auto& category : j) { + char* table_ptr = table; + char* str_start = table_ptr + category.size() * sizeof(u32); + char* str_ptr = str_start; + for (auto& str_j : category) { /* Write string offset to table. */ - *(u32 *)table_ptr = (std::uintptr_t)str_ptr - (std::uintptr_t)table; + *(u32*)table_ptr = (std::uintptr_t)str_ptr - (std::uintptr_t)table; table_ptr += sizeof(u32); auto str = str_j.get<std::string>(); @@ -628,7 +443,7 @@ void PackStringTable(const std::string &src_path, const std::string &dst_path, c } /* Write category offset to root table. */ - *(u32 *)root_ptr = (std::uintptr_t)table - root_start; + *(u32*)root_ptr = (std::uintptr_t)table - root_start; root_ptr += sizeof(u32); table = str_ptr; @@ -675,7 +490,7 @@ const std::vector<LanguageTable> LanguageTableEU = { #include <getopt.h> -const char *progname; +const char* progname; void usage() { fmt::print(stderr, @@ -705,7 +520,7 @@ constexpr const struct option long_options[] = { }; // clang-format on -int main(int argc, char **argv) { +int main(int argc, char** argv) { std::string src_path; std::string dst_path; std::size_t max_size = 0; |
