From c42a2ef5a38f053b2486bb9295372158fbc3d5f8 Mon Sep 17 00:00:00 2001 From: jukoo Date: Tue, 24 Feb 2026 15:07:39 +0000 Subject: [PATCH] enhancement feat: able to convert single intruction @ target base --- src/baseconv.c | 14 +++++++++++--- src/baseconv.h | 7 ++++--- src/bcvrepl.c | 17 ++++++++--------- 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/src/baseconv.c b/src/baseconv.c index 29dd33c..3753e4d 100644 --- a/src/baseconv.c +++ b/src/baseconv.c @@ -101,7 +101,7 @@ void bcv_print(uf64_t value) } -void bcv_guess_base(const char * restrict num) +uf64_t __bcv_guess_base(const char * restrict num , void (*base_printer)(uf64_t)) { uf64_t options = __allbase_enable__, @@ -138,11 +138,14 @@ void bcv_guess_base(const char * restrict num) excluded= (__allbase_enable__ ^ options) ; __allbase_enable__^=excluded; - bcv_print(value) ; + + if(base_printer) + base_printer(value) ; + __allbase_enable__ = restore_option ; _end: - return ; + return value ; } int bcv_launch_interactive_repl_on(int check_shell_argument) @@ -152,3 +155,8 @@ int bcv_launch_interactive_repl_on(int check_shell_argument) return 0; } + +uf64_t bcv_guess_base(const char * restrict num) +{ + return __bcv_guess_base(num , bcv_print) ; +} diff --git a/src/baseconv.h b/src/baseconv.h index b807226..ea8990d 100644 --- a/src/baseconv.h +++ b/src/baseconv.h @@ -88,7 +88,8 @@ " __extension__ -typedef unsigned long long int uf64_t ; +typedef unsigned long long int uf64_t; +//typeof (void (uf64_t)) * bcv_printer_t; struct __bcb_t { @@ -192,7 +193,7 @@ __BCX(char *) bc_hex(uf64_t value) ; __BCX(char *) bc_dec(uf64_t value) ; __BCX(char *) bc_chr(uf64_t value) ; __BCX(void) bcv_print(uf64_t value) ; -__BCX(void) bcv_guess_base(const char * rawinput) ; +__BCX(uf64_t) __bcv_guess_base(const char * rawinput, void (*)(uf64_t)) ; +__BCX(uf64_t) bcv_guess_base(const char * rawinput); __BCX(int) bcv_launch_interactive_repl_on(int no_args) ; - #endif //!__BASECONV diff --git a/src/bcvrepl.c b/src/bcvrepl.c index da3f2cc..dda17ed 100644 --- a/src/bcvrepl.c +++ b/src/bcvrepl.c @@ -9,8 +9,8 @@ #include #include -#include "bcvrepl.h" #include "baseconv.h" +#include "bcvrepl.h" void bcrepl_shell(const char * prompt) @@ -78,7 +78,7 @@ void bcrepl_compute(const char * buffer) char *should_be_tokinezed = 00, *buffer_clone = (char*) buffer , - toksymb = 0 ; + toksymb = 0, *out = (void *)0 ; uf64_t vtok =0 , value =0 ; @@ -91,22 +91,18 @@ void bcrepl_compute(const char * buffer) value = bcrepl_analyse_braw(buffer_clone); value ? bcv_print(value) : bcv_guess_base(buffer_clone) ; bcrepl_show_helper(buffer_clone) ; - return ; } toksymb = (vtok >> 0x20) & 0xff ; value = (vtok & 0xffffffff); - + if(!toksymb) { bcv_print(value) ; return ; } - - //bcrepl_inline_out_convertion(toksymb) ; - char *out = (void *)0 ; switch( toksymb ) { case 'x' : @@ -174,7 +170,10 @@ uf64_t bcrepl_process(const char * buffer , const char ftokn) scan_limite=3; uf64_t vtok=0; - + //#>d/0x23 + // d base cible + // 0x23 : + // 1> detection de la base while( --scan_limite && __nptr != (token = strtok(buffer_clone, (const char []) { ftokn , 00 } ))) { if(buffer_clone) buffer_clone=00; @@ -187,7 +186,7 @@ uf64_t bcrepl_process(const char * buffer , const char ftokn) free(s) , s=0 ; } else - vtok|=(uf64_t)(strtol(token , __nptr , 0xa)) ; + vtok|= __bcv_guess_base(token , __nptr); } return vtok ; }