diff options
-rw-r--r-- | H64E-2.xcodeproj/project.pbxproj | 312 | ||||
-rw-r--r-- | H64E-2.xcodeproj/project.xcworkspace/contents.xcworkspacedata | 7 | ||||
-rw-r--r-- | H64E-2.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist | 8 | ||||
-rw-r--r-- | H64E-2.xcodeproj/xcuserdata/dianshi.xcuserdatad/xcschemes/xcschememanagement.plist | 14 | ||||
-rw-r--r-- | H64E-2/h64e-model.c | 81 | ||||
-rw-r--r-- | H64E-2/h64e-model.h | 27 | ||||
-rw-r--r-- | H64E-2/h64e.c | 83 | ||||
-rw-r--r-- | H64E-2/h64e.h | 37 | ||||
-rw-r--r-- | H64E-2/main.c | 70 | ||||
-rw-r--r-- | Tests/files/test_01 | 1 | ||||
-rw-r--r-- | Tests/files/test_02 | 10 | ||||
-rw-r--r-- | Tests/files/test_03 | 8 |
12 files changed, 610 insertions, 48 deletions
diff --git a/H64E-2.xcodeproj/project.pbxproj b/H64E-2.xcodeproj/project.pbxproj new file mode 100644 index 0000000..05aae75 --- /dev/null +++ b/H64E-2.xcodeproj/project.pbxproj @@ -0,0 +1,312 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + A927BD95241C279000DC8519 /* main.c in Sources */ = {isa = PBXBuildFile; fileRef = A927BD94241C279000DC8519 /* main.c */; }; + A927BD9D241C344C00DC8519 /* h64e.c in Sources */ = {isa = PBXBuildFile; fileRef = A927BD9C241C344C00DC8519 /* h64e.c */; }; + A927BDA0241C350A00DC8519 /* h64e-model.c in Sources */ = {isa = PBXBuildFile; fileRef = A927BD9F241C350A00DC8519 /* h64e-model.c */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + A927BD8F241C279000DC8519 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = /usr/share/man/man1/; + dstSubfolderSpec = 0; + files = ( + ); + runOnlyForDeploymentPostprocessing = 1; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + A927BD91241C279000DC8519 /* H64E-2 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "H64E-2"; sourceTree = BUILT_PRODUCTS_DIR; }; + A927BD94241C279000DC8519 /* main.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = main.c; sourceTree = "<group>"; }; + A927BD9B241C344C00DC8519 /* h64e.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = h64e.h; sourceTree = "<group>"; }; + A927BD9C241C344C00DC8519 /* h64e.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = h64e.c; sourceTree = "<group>"; }; + A927BD9E241C350A00DC8519 /* h64e-model.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "h64e-model.h"; sourceTree = "<group>"; }; + A927BD9F241C350A00DC8519 /* h64e-model.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "h64e-model.c"; sourceTree = "<group>"; }; + A927BDA3241C534700DC8519 /* test_01 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = test_01; sourceTree = "<group>"; }; + A927BDA5241D0B4900DC8519 /* test_02 */ = {isa = PBXFileReference; lastKnownFileType = text; path = test_02; sourceTree = "<group>"; }; + A927BDA6241D0B7700DC8519 /* test_03 */ = {isa = PBXFileReference; lastKnownFileType = text; path = test_03; sourceTree = "<group>"; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + A927BD8E241C279000DC8519 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + A927BD88241C279000DC8519 = { + isa = PBXGroup; + children = ( + A927BDA1241C530300DC8519 /* Tests */, + A927BD93241C279000DC8519 /* H64E-2 */, + A927BD92241C279000DC8519 /* Products */, + ); + sourceTree = "<group>"; + }; + A927BD92241C279000DC8519 /* Products */ = { + isa = PBXGroup; + children = ( + A927BD91241C279000DC8519 /* H64E-2 */, + ); + name = Products; + sourceTree = "<group>"; + }; + A927BD93241C279000DC8519 /* H64E-2 */ = { + isa = PBXGroup; + children = ( + A927BD94241C279000DC8519 /* main.c */, + A927BD9B241C344C00DC8519 /* h64e.h */, + A927BD9E241C350A00DC8519 /* h64e-model.h */, + A927BD9F241C350A00DC8519 /* h64e-model.c */, + A927BD9C241C344C00DC8519 /* h64e.c */, + ); + path = "H64E-2"; + sourceTree = "<group>"; + }; + A927BDA1241C530300DC8519 /* Tests */ = { + isa = PBXGroup; + children = ( + A927BDA2241C530D00DC8519 /* files */, + ); + path = Tests; + sourceTree = "<group>"; + }; + A927BDA2241C530D00DC8519 /* files */ = { + isa = PBXGroup; + children = ( + A927BDA3241C534700DC8519 /* test_01 */, + A927BDA5241D0B4900DC8519 /* test_02 */, + A927BDA6241D0B7700DC8519 /* test_03 */, + ); + path = files; + sourceTree = "<group>"; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + A927BD90241C279000DC8519 /* H64E-2 */ = { + isa = PBXNativeTarget; + buildConfigurationList = A927BD98241C279000DC8519 /* Build configuration list for PBXNativeTarget "H64E-2" */; + buildPhases = ( + A927BD8D241C279000DC8519 /* Sources */, + A927BD8E241C279000DC8519 /* Frameworks */, + A927BD8F241C279000DC8519 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "H64E-2"; + productName = "H64E-2"; + productReference = A927BD91241C279000DC8519 /* H64E-2 */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + A927BD89241C279000DC8519 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1130; + ORGANIZATIONNAME = dianshi; + TargetAttributes = { + A927BD90241C279000DC8519 = { + CreatedOnToolsVersion = 11.3.1; + }; + }; + }; + buildConfigurationList = A927BD8C241C279000DC8519 /* Build configuration list for PBXProject "H64E-2" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = A927BD88241C279000DC8519; + productRefGroup = A927BD92241C279000DC8519 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + A927BD90241C279000DC8519 /* H64E-2 */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + A927BD8D241C279000DC8519 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A927BD9D241C344C00DC8519 /* h64e.c in Sources */, + A927BDA0241C350A00DC8519 /* h64e-model.c in Sources */, + A927BD95241C279000DC8519 /* main.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + A927BD96241C279000DC8519 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + A927BD97241C279000DC8519 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = macosx; + }; + name = Release; + }; + A927BD99241C279000DC8519 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + A927BD9A241C279000DC8519 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + A927BD8C241C279000DC8519 /* Build configuration list for PBXProject "H64E-2" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A927BD96241C279000DC8519 /* Debug */, + A927BD97241C279000DC8519 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + A927BD98241C279000DC8519 /* Build configuration list for PBXNativeTarget "H64E-2" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A927BD99241C279000DC8519 /* Debug */, + A927BD9A241C279000DC8519 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = A927BD89241C279000DC8519 /* Project object */; +} diff --git a/H64E-2.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/H64E-2.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..0fedac4 --- /dev/null +++ b/H64E-2.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Workspace + version = "1.0"> + <FileRef + location = "self:H64E-2.xcodeproj"> + </FileRef> +</Workspace> diff --git a/H64E-2.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/H64E-2.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/H64E-2.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>IDEDidComputeMac32BitWarning</key> + <true/> +</dict> +</plist> diff --git a/H64E-2.xcodeproj/xcuserdata/dianshi.xcuserdatad/xcschemes/xcschememanagement.plist b/H64E-2.xcodeproj/xcuserdata/dianshi.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..c3bc962 --- /dev/null +++ b/H64E-2.xcodeproj/xcuserdata/dianshi.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>SchemeUserState</key> + <dict> + <key>H64E-2.xcscheme_^#shared#^_</key> + <dict> + <key>orderHint</key> + <integer>0</integer> + </dict> + </dict> +</dict> +</plist> diff --git a/H64E-2/h64e-model.c b/H64E-2/h64e-model.c index b794f52..3bd0d1f 100644 --- a/H64E-2/h64e-model.c +++ b/H64E-2/h64e-model.c @@ -8,7 +8,7 @@ #include "h64e-model.h" -int h64e_si_init(H64E_stream_in *in, ssize_t size) +int h64e_si_init(H64E_stream_in *in, int32_t size) { in->size = size; in->cur_size = 0; @@ -17,42 +17,53 @@ int h64e_si_init(H64E_stream_in *in, ssize_t size) } //return amount of copied bytes -int h64e_si_data_in(H64E_stream_in *in, uint8_t *data, size_t size) +int h64e_si_data_in(H64E_stream_in *in, uint8_t *data, int32_t size) { - ssize_t start = in->cur_size; - ssize_t end = start+size; - ssize_t len = 0; + int32_t start = in->cur_size; + int32_t end = start+size; + int32_t len = 0; + if (end > in->size) { end = in->size; } len = end-start; - - memcpy(in->buf, data, len); - + memcpy(&in->buf[start], data, len); + in->cur_size += len; return (int)len; } -int h64e_si_data_out(H64E_stream_in *in, uint8_t *data, size_t size) +int h64e_si_data_out(H64E_stream_in *in, uint8_t *data, int32_t size) { - ssize_t len=0; + int32_t len=0; + int32_t i=0; - if (size<in->cur_size) + if (size < in->cur_size) { len = size; } else { len = in->cur_size; } - memcpy(data,in->buf,len); - memmove(in->buf,in->buf[len],len); + //memcpy(data,&in->buf[0],len); + for (i=0;i<len;i++) + { + data[i] = in->buf[i]; + } + + memmove(&in->buf[0],&in->buf[len],len); in->cur_size -= len; return len; } -int h64e_so_init(H64E_stream_out *out, ssize_t size) +int h64e_si_len(H64E_stream_in *in) +{ + return in->cur_size; +} + +int h64e_so_init(H64E_stream_out *out, int32_t size) { out->size = size; out->cur_size = 0; @@ -60,37 +71,55 @@ int h64e_so_init(H64E_stream_out *out, ssize_t size) return 0; } -int h64e_so_data_in(H64E_stream_in *out, uint8_t *data, size_t size) +int h64e_so_data_in(H64E_stream_out *out, uint8_t *data, int32_t size) { - ssize_t start = out->cur_size; - ssize_t end = start+size; - ssize_t len = 0; + int32_t start = out->cur_size; + int32_t end = start+size; + int32_t len = 0; + if (end > out->size) { end = out->size; } len = end-start; - - memcpy(out->buf, data, len); - + memcpy(&out->buf[start], data, len); + out->cur_size += len; return (int)len; } -int h64e_so_data_out(H64E_stream_in *out, uint8_t *data, size_t size) +int h64e_so_data_out(H64E_stream_out *out, uint8_t *data, int32_t size) { - ssize_t len=0; + int32_t len=0; + int32_t i=0; - if (size<out->cur_size) + if (size < out->cur_size) { len = size; } else { len = out->cur_size; } - memcpy(data,out->buf,len); - memmove(out->buf,out->buf[len],len); + //memcpy(data,&in->buf[0],len); + for (i=0;i<len;i++) + { + data[i] = out->buf[i]; + } + + memmove(&out->buf[0],&out->buf[len],len); out->cur_size -= len; return len; } + +int h64e_so_ready(H64E_stream_out *out) +{ + int ret = 0; + + return ret; +} + +int h64e_so_len(H64E_stream_out *out) +{ + return out->cur_size; +} diff --git a/H64E-2/h64e-model.h b/H64E-2/h64e-model.h index 516f8dc..761d327 100644 --- a/H64E-2/h64e-model.h +++ b/H64E-2/h64e-model.h @@ -10,30 +10,37 @@ #define h64e_model_h #include <stdio.h> +#include <stdlib.h> #include <string.h> typedef int (*trnf_clb)(char*); typedef struct H64E_stream_in { - int cur_size; - int size; + int32_t cur_size; + int32_t size; uint8_t *buf; } H64E_stream_in; //used to get collected data -int h64e_si_init(H64E_stream_in *in, ssize_t size); -int h64e_si_data_in(H64E_stream_in *in, uint8_t *data, size_t size); -int h64e_si_data_out(H64E_stream_in *in, uint8_t *data, size_t size); +int h64e_si_init(H64E_stream_in *in, int32_t size); +int h64e_si_data_in(H64E_stream_in *in, uint8_t *data, int32_t size); +int h64e_si_data_out(H64E_stream_in *in, uint8_t *data, int32_t size); +int h64e_si_len(H64E_stream_in *in); typedef struct H64E_stream_out { - int cur_size; - int size; + int32_t cur_size; + int32_t size; uint8_t *buf; } H64E_stream_out; //using to collect output formated data -int h64e_so_init(H64E_stream_out *out, ssize_t size); -int h64e_so_data_in(H64E_stream_in *out, uint8_t *data, size_t size); -int h64e_so_data_out(H64E_stream_in *out, uint8_t *data, size_t size); +int h64e_so_init(H64E_stream_out *out, int32_t size); +int h64e_so_data_in(H64E_stream_out *out, uint8_t *data, int32_t size); +int h64e_so_data_out(H64E_stream_out *out, uint8_t *data, int32_t size); +/* + * Trigger that buffer is full, or trigger new line in buffer + */ +int h64e_so_ready(H64E_stream_out *out); +int h64e_so_len(H64E_stream_out *out); #endif /* h64e_model_h */ diff --git a/H64E-2/h64e.c b/H64E-2/h64e.c index 0072030..1e0662c 100644 --- a/H64E-2/h64e.c +++ b/H64E-2/h64e.c @@ -49,3 +49,86 @@ int h64e_destroy(H64E_t *s) { return 0; } + +int h64e_fmt_init( H64E_format *fs) +{ + memset(fs,0,sizeof(H64E_format)); + + return 0; +} + +/* + * out_size - allways give enought data to buffer otherwise it will partially write data, or flush data out more often + */ +int h64e_fmt_byte(H64E_format *fs, uint8_t *in_data, int32_t in_size, uint8_t *out_data, int32_t out_size) +{ + //printf("h64e_fmt_byte in %d out %d\n",in_size,out_size); + int ret=0; + int cur_size=0; + int i,j=0; + const int SZ=16; + uint8_t buf[SZ]; + int buf_sz=0; + int trail_size=0; + + for (i=0; i<in_size; i++) + { + buf_sz = snprintf(&buf[0], SZ, "%02x",in_data[i]); + //count converted chars per line + fs->cur_pos += 1; + //add space if configured + if (fs->f_space) + { + if (buf_sz+1<SZ) + { + buf[buf_sz] = ' '; + buf_sz += 1; + } + } + + if (fs->cur_pos == fs->column_size) + { + if (fs->f_new_line) { + //set triger to newline + fs->t_new_line = 1; + fs->cur_pos = 0; + //set new line to buffer + if (buf_sz+1<SZ) + { + buf[buf_sz] = '\n'; + buf_sz += 1; + } + } + } + //printf("D: %s",buf); + if (trail_size+buf_sz<out_size) + { + for(j=0;j<buf_sz;j++) + { + out_data[trail_size+j] = buf[j]; + } + ret = buf_sz; + + } else { + //not enought output to handle data + ret=-1; + } + } +#if 0 + printf("D:["); + for (i=0;i<ret;i++) + { + printf("%c",(unsigned char)out_data[i]); + } + printf("]\n"); +#endif + + return ret; +} + +int h64e_fmt_finish(H64E_format *fs) +{ + + + return 0; +} diff --git a/H64E-2/h64e.h b/H64E-2/h64e.h index 397a36b..d8a95cd 100644 --- a/H64E-2/h64e.h +++ b/H64E-2/h64e.h @@ -13,16 +13,13 @@ #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 @@ -36,7 +33,7 @@ #define H64E_O_UINT64 9 #define H64E_O_END H64E_O_UINT64 -typedef struct H64E_format +typedef struct H64E_params { int flag_offset; /* output offset */ @@ -46,11 +43,11 @@ typedef struct H64E_format uint8_t group; /* if there is need transdorm to specific type */ int flag_output; /* output convereted types */ uint8_t output_type; /* output in many different ways */ -} H64E_format; +} H64E_params; typedef struct H64E_t { - H64E_format fmt; + H64E_params fmt; H64E_stream_in *sin; H64E_stream_out *sout; int fd_in; @@ -65,4 +62,30 @@ 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 group_fmt; + int output_fmt; + int min_input; + int max_output; + int column_size; + int f_space; + int cur_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 +} 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_finish(H64E_format *fs); + #endif /* h64e_h */ diff --git a/H64E-2/main.c b/H64E-2/main.c index e1d3d7b..bd1910e 100644 --- a/H64E-2/main.c +++ b/H64E-2/main.c @@ -161,8 +161,10 @@ int main(int argc, const char * argv[]) { int param_offset = -1; char *fname = NULL; int fd; - int in_bytes = 0; - uint8_t buf[128]; + int in_bytes = 0, out_bytes=0, cnv_bytes=0; + int in_total = 0, out_total=0, cnv_total=0; + uint8_t buf_in[128+1],buf_cnv_in[128+1],buf_cnv_out[256+1],buf_out[512+1]; + int i=0; printf("H64E-2 Project started 1\n"); @@ -172,10 +174,14 @@ int main(int argc, const char * argv[]) { H64E_stream_out sout; h64e_init(&h64e); h64e_si_init(&sin, 128); - h64e_so_init(&sout, 128); + h64e_so_init(&sout, 512); h64e_set_input(&h64e, &sin); h64e_set_output(&h64e, &sout); + H64E_format int8_fmt; + + h64e_fmt_init(&int8_fmt); + //set all params from arguments /*get cmd args and set options */ @@ -244,13 +250,67 @@ int main(int argc, const char * argv[]) { } //register formats + //configure format of u8 to terminate on new line and have space between types + int8_fmt.f_space = 1; + int8_fmt.f_new_line = 1; + int8_fmt.column_size = 16; //do conversation, reading input and outputing - while ((in_bytes = file_read(fd,(char *)&buf,128)) != -1) + while ((in_bytes = file_read(fd,(char *)&buf_in,1)) != -1) { - printf("Reading %d bytes\n",in_bytes); + if (in_bytes == 0) + { + //printf("Stream ended\n"); + break; + } + + //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); + h64e_si_data_in(&sin, &buf_in[0], in_bytes); + + //if buffer have enought data then convert it + if (h64e_si_len(&sin)>1) + { + int cnv_num=-1; + //printf("Input Out\n"); + cnv_bytes = h64e_si_data_out(&sin, &buf_cnv_in[0], 1); + //cnv_total += cnv_bytes; + + + //Convert output data to desired format + //printf("Start converting to byte8\n"); + cnv_num = h64e_fmt_byte(&int8_fmt, &buf_cnv_in[0], cnv_bytes, buf_cnv_out, 512); + //printf("Conversation amount\n"); + //Push all data ot output buffer + //printf("Write to output stream data %d bytes\n",cnv_bytes); + cnv_bytes = h64e_so_data_in(&sout, &buf_cnv_out[0], cnv_num); + cnv_total += cnv_num; + //printf("Written bytes to output steam %d bytes %d bytes total\n",cnv_bytes,cnv_total); + } + + //Get data out of buffer + if ((out_bytes = h64e_so_len(&sout)) > 0) + { + out_bytes = h64e_so_data_out(&sout, &buf_out[0],512); + buf_out[out_bytes] = 0x00; + printf("%s",buf_out); + } + /* + out_bytes = h64e_so_data_out(&sout, &buf_out[0],512); + printf("Output out\n"); + out_total += out_bytes; + buf_out[out_bytes] = 0x00; + printf("%s\n",buf_out); + printf("Read converted data %d bytes %d total bytes\n",out_bytes,out_total); + */ + //printf("Total: in %d cnv %d out %d\n",in_total,cnv_total,out_total); + + //printf("Reading %d bytes\n",in_bytes); } + //check and empty all buffers + //deinit all structures h64e_destroy(&h64e); file_close(fd); diff --git a/Tests/files/test_01 b/Tests/files/test_01 new file mode 100644 index 0000000..720691a --- /dev/null +++ b/Tests/files/test_01 @@ -0,0 +1 @@ +Hello this is me diff --git a/Tests/files/test_02 b/Tests/files/test_02 new file mode 100644 index 0000000..57d07c3 --- /dev/null +++ b/Tests/files/test_02 @@ -0,0 +1,10 @@ +LINE01 +LINE02 +LINE03 +LINE04 +LINE05 +LINE06 +LINE07 +LINE08 +LINE09 +LINE10 diff --git a/Tests/files/test_03 b/Tests/files/test_03 new file mode 100644 index 0000000..6b1a644 --- /dev/null +++ b/Tests/files/test_03 @@ -0,0 +1,8 @@ +AAAAAAAAAA +BBBBBBBBBB +CCCCCCCCCC +DDDDDDDDDD +EEEEEEEEEE +FFFFFFFFFF +GGGGGGGGGG +HHHHHHHHHH |