summaryrefslogblamecommitdiffstats
path: root/H64E-2/h64e.h
blob: 21d334e91cd38f9ceb7e605b01d4079d03ffd01b (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12











                                                   
                  

                   


                                                         
  





                       












                                    
                          






                                                                       
                                                             
                                                             
                                                    
                        
                                       
                              
              


                     
                    

                          

               


                         
                                  

                                                      

                                
                            


                            





                               
                       





                    
                                                       
                                                   
                                                    
                                                  



                                                                  

                 
              

                         
                     


                                     



                                                                                                             
                                                                                                                     
                                                                                                                               
                                       
 


                                                                                                                             
                                                                                                           
 
                   
//
//  h64e.h
//  H64E-2
//
//  Created by dianshi on 3/13/20.
//  Copyright © 2020 dianshi. All rights reserved.
//

#ifndef h64e_h
#define h64e_h

#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <stdint.h>
#include "h64e-model.h"
/*
 Set data structure from arguments and use to handle data
*/
#define H64E_G_NONE   0
#define H64E_G_BYTE   1
#define H64E_G_WORD   2
#define H64E_G_DWORD  3
#define H64E_G_QWORD  4

#define H64E_O_START   0
#define H64E_O_NONE    0
#define H64E_O_STRING  1
#define H64E_O_INT8    2
#define H64E_O_UINT8   3
#define H64E_O_INT16   4
#define H64E_O_UINT16  5
#define H64E_O_INT32   6
#define H64E_O_UINT32  7
#define H64E_O_INT64   8
#define H64E_O_UINT64  9
#define H64E_O_END     H64E_O_UINT64

typedef struct H64E_params
{
    
    int      flag_offset; /* output offset */
    uint64_t offset_addr; /* offset postion */
    uint8_t  column_size; /* size of column to operate with */
    int      flag_no_group; /* dont output hex values */
    uint8_t  group;   /* if there is need transdorm to specific type */
    int      flag_output_types; /* output convereted types */
    uint8_t  output_type; /* output in many different ways */
    int      flag_space; /*space between columns **/
    int      flag_ascii;
    int      flag_hex; /* hex outout */
    int      flag_show_offset;
} H64E_params;

typedef struct H64E_t
{
    H64E_params fmt;
    H64E_stream_in *sin;
    H64E_stream_out *sout;
    int fd_in;
    int fd_out;
} H64E_t;

int h64e_init(H64E_t *s);
int h64e_check_param( H64E_t *s );
int h64e_set_input(H64E_t *s, H64E_stream_in *sin);
int h64e_set_output(H64E_t *s, H64E_stream_out *sout);
int h64e_data_sz(H64E_t *s);
int h64e_space_width(H64E_t *s);
int h64e_convert(H64E_t *s);
int h64e_destroy(H64E_t *s);


#define H64E_FMT_STATE_NONE   0
#define H64E_FMT_STATE_INIT   1
#define H64E_FMT_STATE_CNV    2
#define H64E_FMT_STATE_FINISH 3

typedef struct H64E_format {
    int f_output_types;
    int group_fmt;
    int output_fmt;
    int min_input;
    int max_output;
    int column_size;
    int f_space;
    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 slide_offset; //offset since stream start
    int state;
    int t_new_line; // if new line or buffer full
    int f_nw_pos; // if new line then save place where new line is
    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);
int h64e_fmt_byte(  H64E_format *fs, uint8_t *in_data, int32_t in_size, uint8_t *out_data, int32_t out_size);
int h64e_fmt_byte_align16(  H64E_format *fs, uint8_t *in_data, int32_t in_size, uint8_t *out_data, int32_t out_size);
int h64e_fmt_align(  H64E_format *fs, uint8_t *in_data, int32_t in_size, uint8_t *out_data, int32_t out_size, int32_t data_sz);
int h64e_fmt_finish(  H64E_format *fs);

int h64e_fmt_space(H64E_format *fs, uint8_t *out_data, int32_t out_size, int32_t data_sz, int32_t type);
int h64e_fmt_ascii(H64E_format *fs, uint8_t *in_data, int32_t in_size, uint8_t *out_data, int32_t out_size, int32_t data_sz);
int h64e_fmt_hex(H64E_format *fs, uint8_t *in_data, int32_t in_size, uint8_t *out_data, int32_t out_size, int32_t data_sz);
int h64e_fmt_type(H64E_format *fs, uint8_t *in_data, int32_t in_size, uint8_t *out_data, int32_t out_size);

#endif /* h64e_h */