cleans the code a bit, half implements little endian

This commit is contained in:
SuperNovaa41 2025-02-12 13:32:30 -05:00
parent 74bedb5e3a
commit 5e6881234c
3 changed files with 46 additions and 8 deletions

View File

@ -18,7 +18,11 @@ void init_flags(struct flags* flags)
flags->offset = 0; flags->offset = 0;
flags->littleendian = false;
flags->octets = 2; flags->octets = 2;
flags->customoctets = false;
flags->len = -1; // -1 means til EOF flags->len = -1; // -1 means til EOF
flags->uppercase = false; flags->uppercase = false;
flags->decimaloffset = false; flags->decimaloffset = false;
@ -30,19 +34,37 @@ void init_flags(struct flags* flags)
flags->cap_c_style = false; flags->cap_c_style = false;
} }
void init_cols(struct flags* flags) static void init_octets(struct flags* flags)
{
if (flags->customoctets)
return;
if (flags->littleendian)
flags->octets = 4;
else
flags->octets = 2;;
}
static void init_cols(struct flags* flags)
{ {
if (flags->customcols) if (flags->customcols)
return; return;
if (flags->postscript == true) if (flags->postscript)
flags->cols = 30; flags->cols = 30;
else if (flags->c_style == true) else if (flags->c_style)
flags->cols = 12; flags->cols = 12;
else else
flags->cols = 16; flags->cols = 16;
} }
void init_var_defaults(struct flags* flags)
{
init_octets(flags);
init_cols(flags);
}
void free_hex_chunk(hex_chunk_t* chunk) void free_hex_chunk(hex_chunk_t* chunk)
{ {
free(chunk->text); free(chunk->text);
@ -124,13 +146,20 @@ static void write_octet(char a, char b, FILE* stream)
a, b, (newline ? green_str : "")); a, b, (newline ? green_str : ""));
} }
static void display_octet(char* text, FILE* stream)
{
uint i;
for (i = 0; i < (flags.octets * 2); i += 2)
write_octet(((text) + i)[0], ((text) + i)[1], stream);
}
static void standard_output(char** text, FILE* stream) static void standard_output(char** text, FILE* stream)
{ {
uint i, j; uint i;
for (i = 0; i < (flags.cols * 2); i += (flags.octets * 2)) { for (i = 0; i < (flags.cols * 2); i += (flags.octets * 2)) {
for (j = 0; j < (flags.octets * 2); j += 2) display_octet(((*text) + i), stream);
write_octet(((*text) + i + j)[0], ((*text) + i + j)[1], stream);
if (!flags.postscript) if (!flags.postscript)
fprintf(stream, " "); fprintf(stream, " ");
} }

View File

@ -27,9 +27,13 @@ struct flags {
uint cols; // choose the amount of columns to display (default 16) // done uint cols; // choose the amount of columns to display (default 16) // done
bool customcols; bool customcols;
bool littleendian;
uint offset; uint offset;
uint octets; // number of octets per line (default 2) // done uint octets; // number of octets per line (default 2) // done
bool customoctets;
int len; // max len to stop at //done int len; // max len to stop at //done
bool uppercase; // do uppercase hex chars // done bool uppercase; // do uppercase hex chars // done
bool decimaloffset; // do decimal offset instead of hex // done bool decimaloffset; // do decimal offset instead of hex // done
@ -44,7 +48,7 @@ struct flags {
// TODO: implement flags and stuff // TODO: implement flags and stuff
void init_flags(struct flags* flags); void init_flags(struct flags* flags);
void init_cols(struct flags* flags); void init_var_defaults(struct flags* flags);
void free_hex_chunk(hex_chunk_t* chunk); void free_hex_chunk(hex_chunk_t* chunk);
void add_text_to_chunk(char* src, char** dst); void add_text_to_chunk(char* src, char** dst);

View File

@ -23,6 +23,7 @@ static struct argp_option options[] = {
{0, 'C', 0, 0, "capitalize variable names in C include file style (-i).", 0}, {0, 'C', 0, 0, "capitalize variable names in C include file style (-i).", 0},
{0, 'n', "name", 0, "set the variable name used in C include output (-i).", 0}, {0, 'n', "name", 0, "set the variable name used in C include output (-i).", 0},
{0, 'o', "off", 0, "add <off> to the displayed file position.", 0}, {0, 'o', "off", 0, "add <off> to the displayed file position.", 0},
{0, 'e', 0, 0, "little-endian dump (incompatible with -ps,-i,-r).", 0},
{0} {0}
}; };
@ -42,10 +43,14 @@ static error_t parse_opt(int key, char* arg, struct argp_state* state)
break; break;
case 'g': case 'g':
flags->octets = atoi(arg); flags->octets = atoi(arg);
flags->customoctets = true;
break; break;
case 'o': case 'o':
flags->offset = atoi(arg); flags->offset = atoi(arg);
break; break;
case 'e':
flags->littleendian = true;
break;
case 'R': case 'R':
if (strcmp(arg, "none") == 0) if (strcmp(arg, "none") == 0)
flags->coloured = false; flags->coloured = false;
@ -204,7 +209,7 @@ int main(int argc, char* argv[])
argp_parse(&argp, argc, argv, 0, 0, &flags); argp_parse(&argp, argc, argv, 0, 0, &flags);
init_cols(&flags); init_var_defaults(&flags);
do_text_parse(&lines, (flags.files[0] == NULL ? true : false)); do_text_parse(&lines, (flags.files[0] == NULL ? true : false));