summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--H64E-2/h64e.c8
-rw-r--r--H64E-2/h64e.h8
-rw-r--r--H64E-2/main.c46
3 files changed, 52 insertions, 10 deletions
diff --git a/H64E-2/h64e.c b/H64E-2/h64e.c
index 39884ca..ad8957e 100644
--- a/H64E-2/h64e.c
+++ b/H64E-2/h64e.c
@@ -95,7 +95,7 @@ int h64e_destroy(H64E_t *s)
int h64e_fmt_init( H64E_format *fs)
{
memset(fs,0,sizeof(H64E_format));
-
+ fs->length = -1;
return 0;
}
@@ -222,10 +222,10 @@ int h64e_fmt_byte_align16(H64E_format *fs, uint8_t *in_data, int32_t in_size, ui
int trail_size=0;
//set offset to output
- if (fs->f_offset)
+ if (fs->f_show_offset)
{
//printf("Print offset\n");
- int offset = fs->start_offset + fs->total_output;
+ int offset = fs->offset_addr + fs->total_output;
buf_offset_sz = snprintf((char *)&buf_offset[0], BUF_SZ, "%08x: ",offset); //make it wider
}
@@ -502,7 +502,7 @@ int h64e_fmt_align( H64E_format *fs, uint8_t *in_data, int32_t in_size, uint8_t
if (fs->f_offset)
{
//printf("Print offset\n");
- int offset = fs->start_offset + fs->total_output;
+ int offset = fs->offset_addr + fs->total_output;
buf_offset_sz = snprintf((char *)&buf_offset[0], BUF_SZ, "%08x: ",offset); //make it wider
}
diff --git a/H64E-2/h64e.h b/H64E-2/h64e.h
index 7871d21..21d334e 100644
--- a/H64E-2/h64e.h
+++ b/H64E-2/h64e.h
@@ -49,6 +49,7 @@ typedef struct H64E_params
int flag_space; /*space between columns **/
int flag_ascii;
int flag_hex; /* hex outout */
+ int flag_show_offset;
} H64E_params;
typedef struct H64E_t
@@ -86,7 +87,7 @@ typedef struct H64E_format {
int column_pos; //position where output stoped
int end_pos; //end postion before new line
int f_new_line; //should be new line set after
- int start_offset; //start position of offset
+ //int start_offset; //start position of offset
int slide_offset; //offset since stream start
int state;
int t_new_line; // if new line or buffer full
@@ -94,7 +95,12 @@ typedef struct H64E_format {
int f_ascii;
int f_offset;
int f_hex;
+ int f_show_offset;
+ uint64_t offset_addr;
int total_output;
+ int f_length;
+ uint64_t length; //size to output
+
} H64E_format;
int h64e_fmt_init( H64E_format *fs);
diff --git a/H64E-2/main.c b/H64E-2/main.c
index c95291f..07e96d8 100644
--- a/H64E-2/main.c
+++ b/H64E-2/main.c
@@ -180,8 +180,9 @@ void helper( char *progname )
" -c - column size in bytes\n"
" -e - interp data output: u8,i8,u16,i16,u32,i32,u64,i64\n"
" -s - disable space between columns\n"
+ " -t - show offset numbers\n"
" -h - extra hex output\n"
- "Version: 2.0.4 \n"
+ "Version: 2.1.0 \n"
"\n"
, progname);
}
@@ -229,7 +230,7 @@ int main(int argc, const char * argv[]) {
//set all params from arguments
/*get cmd args and set options */
- while ( (c = getopt(argc, argv, "abo:il:vc:e:sh")) != -1 )
+ while ( (c = getopt(argc, argv, "abo:il:vc:e:sht")) != -1 )
{
switch(c)
{
@@ -266,6 +267,9 @@ int main(int argc, const char * argv[]) {
case 'h':
h64e.fmt.flag_hex = 0;
break;
+ case 't':
+ h64e.fmt.flag_show_offset = 1;
+ break;
case 'v':
version();
exit(1);
@@ -312,14 +316,25 @@ int main(int argc, const char * argv[]) {
int8_fmt.group_fmt = h64e.fmt.group;
int8_fmt.output_fmt = h64e.fmt.output_type;
int8_fmt.f_offset = h64e.fmt.flag_offset;
- int8_fmt.start_offset = h64e.fmt.offset_addr;
+ int8_fmt.offset_addr = h64e.fmt.offset_addr;
int8_fmt.f_output_types = h64e.fmt.flag_output_types;
int8_fmt.output_fmt = h64e.fmt.output_type;
int8_fmt.f_ascii = h64e.fmt.flag_ascii;
int8_fmt.f_hex = h64e.fmt.flag_hex;
+ int8_fmt.f_show_offset = h64e.fmt.flag_show_offset;
-
-
+ if (param_length > -1)
+ {
+ printf("param length %d\n", param_length);
+ int8_fmt.length = param_length;
+ int8_fmt.f_length = 1;
+ }
+
+ //set offset in file
+ if (int8_fmt.f_offset)
+ {
+ file_seek(fd, int8_fmt.offset_addr);
+ }
//do conversation, reading input and outputing
while ((in_bytes = file_read(fd,(char *)&buf_in,int8_fmt.column_size)) != -1)
{
@@ -329,6 +344,27 @@ int main(int argc, const char * argv[]) {
break;
}
+ if (in_total == int8_fmt.length)
+ {
+ break;
+ }
+
+ if (int8_fmt.f_length == 1)
+ {
+ /*
+ printf("-->\n");
+ printf("in_total %d\n", in_total);
+ printf("in_bytes %d\n", in_bytes);
+ printf("(in_total+in_bytes)=%d",(in_total+in_bytes));
+ */
+ //if ((int8_fmt.total_output+in_bytes) >= int8_fmt.length)
+ if ((in_total+in_bytes) >= int8_fmt.length)
+ {
+ in_bytes = int8_fmt.length - in_total;
+ //printf("in_bytes %d\n", in_bytes);
+ }
+ }
+
//write to input stream, connect all streams in a pipe
in_total += in_bytes;
//printf("Read from file %d bytes %d bytes total\n",in_bytes,in_total);