cleans the code a bit, half implements little endian
This commit is contained in:
parent
74bedb5e3a
commit
5e6881234c
41
src/hex.c
41
src/hex.c
@ -18,7 +18,11 @@ void init_flags(struct flags* flags)
|
||||
|
||||
flags->offset = 0;
|
||||
|
||||
flags->littleendian = false;
|
||||
|
||||
flags->octets = 2;
|
||||
flags->customoctets = false;
|
||||
|
||||
flags->len = -1; // -1 means til EOF
|
||||
flags->uppercase = false;
|
||||
flags->decimaloffset = false;
|
||||
@ -30,19 +34,37 @@ void init_flags(struct flags* flags)
|
||||
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)
|
||||
return;
|
||||
|
||||
if (flags->postscript == true)
|
||||
if (flags->postscript)
|
||||
flags->cols = 30;
|
||||
else if (flags->c_style == true)
|
||||
else if (flags->c_style)
|
||||
flags->cols = 12;
|
||||
else
|
||||
flags->cols = 16;
|
||||
}
|
||||
|
||||
void init_var_defaults(struct flags* flags)
|
||||
{
|
||||
init_octets(flags);
|
||||
init_cols(flags);
|
||||
}
|
||||
|
||||
|
||||
void free_hex_chunk(hex_chunk_t* chunk)
|
||||
{
|
||||
free(chunk->text);
|
||||
@ -124,13 +146,20 @@ static void write_octet(char a, char b, FILE* stream)
|
||||
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)
|
||||
{
|
||||
uint i, j;
|
||||
uint i;
|
||||
|
||||
for (i = 0; i < (flags.cols * 2); i += (flags.octets * 2)) {
|
||||
for (j = 0; j < (flags.octets * 2); j += 2)
|
||||
write_octet(((*text) + i + j)[0], ((*text) + i + j)[1], stream);
|
||||
display_octet(((*text) + i), stream);
|
||||
|
||||
if (!flags.postscript)
|
||||
fprintf(stream, " ");
|
||||
}
|
||||
|
@ -27,9 +27,13 @@ struct flags {
|
||||
uint cols; // choose the amount of columns to display (default 16) // done
|
||||
bool customcols;
|
||||
|
||||
bool littleendian;
|
||||
|
||||
uint offset;
|
||||
|
||||
uint octets; // number of octets per line (default 2) // done
|
||||
bool customoctets;
|
||||
|
||||
int len; // max len to stop at //done
|
||||
bool uppercase; // do uppercase hex chars // done
|
||||
bool decimaloffset; // do decimal offset instead of hex // done
|
||||
@ -44,7 +48,7 @@ struct flags {
|
||||
// TODO: implement flags and stuff
|
||||
|
||||
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 add_text_to_chunk(char* src, char** dst);
|
||||
|
@ -23,6 +23,7 @@ static struct argp_option options[] = {
|
||||
{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, '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}
|
||||
};
|
||||
|
||||
@ -42,10 +43,14 @@ static error_t parse_opt(int key, char* arg, struct argp_state* state)
|
||||
break;
|
||||
case 'g':
|
||||
flags->octets = atoi(arg);
|
||||
flags->customoctets = true;
|
||||
break;
|
||||
case 'o':
|
||||
flags->offset = atoi(arg);
|
||||
break;
|
||||
case 'e':
|
||||
flags->littleendian = true;
|
||||
break;
|
||||
case 'R':
|
||||
if (strcmp(arg, "none") == 0)
|
||||
flags->coloured = false;
|
||||
@ -204,7 +209,7 @@ int main(int argc, char* argv[])
|
||||
|
||||
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));
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user