Code:
char *pos_int[] = {
"123",
"+145",
"0xA",
"0b1",
NULL };
char *neg_int[] = {
"-123",
"-0xA",
"-0b1", // This is the last value printed
NULL };
char *pos_fpn[] = {
"0",
"1",
"1.0",
"0.1",
"1.1",
"1e+10",
"1.0e+10",
"0.1e+10",
"1.1e+10",
"1e-10",
"1.0e-10",
"0.1e-10",
"1.1e-10",
"0xA",
"0xA.0",
"0x0.A",
"0xA.A",
"0xAp+10",
"0xA.0p+10",
"0x0.Ap+10",
"0xA.Ap+10",
"0xAp-10",
"0xA.0p-10",
"0x0.Ap-10",
"0xA.Ap-10",
"0b1",
"0b1.0",
"0b0.1",
"0b1.1",
"0b1e+10",
"0b1.0e+10",
"0b0.1e+10",
"0b1.1e+10",
"0b1e-10",
"0b1.0e-10",
"0b0.1e-10",
"0b1.1e-10",
NULL };
char *neg_fpn[] = {
"-0.0",
"-1",
"-1.0",
"-0.1",
"-1.1",
"-1e+10",
"-1.0e+10",
"-0.1e+10",
"-1.1e+10",
"-1e-10",
"-1.0e-10",
"-0.1e-10",
"-1.1e-10",
"-0xA",
"-0xA.0",
"-0x0.A",
"-0xA.A",
"-0xAp+10",
"-0xA.0p+10",
"-0x0.Ap+10",
"-0xA.Ap+10",
"-0xAp-10",
"-0xA.0p-10",
"-0x0.Ap-10",
"-0xA.Ap-10",
"-0b1",
"-0b1.0",
"-0b0.1",
"-0b1.1",
"-0b1e+10",
"-0b1.0e+10",
"-0b0.1e+10",
"-0b1.1e+10",
"-0b1e-10",
"-0b1.0e-10",
"-0b0.1e-10",
"-0b1.1e-10",
NULL };
int print_value( alu_t *alu, bool print_anyways )
{
int ret = 0, i;
alu_src_t _src = {NULL};
alu_dst_t _dst = {NULL};
alu_base_t base = {0};
alu_lit_t lit = {0};
alu_block_t __src = {0}, __dst = {0};
char *src;
size_t size;
long nextpos;
base.digsep = '\'';
base.base = 10;
ret = alu_get_reg_nodes( alu, base.regv, ALU_BASE_COUNT, 0 );
if ( ret != 0 )
{
alu_error( ret );
return ret;
}
ret = alu_get_reg_nodes( alu, lit.regv, ALU_LIT_COUNT, 0 );
if ( ret != 0 )
{
alu_rem_reg_nodes( alu, base.regv, ALU_BASE_COUNT );
alu_error( ret );
return ret;
}
_src.src = &__src;
_src.next = (alu_func_rdChar32_t)func_rdChar32;
_src.nextpos = &nextpos;
_dst.dst = &__dst;
_dst.next = (alu_func_wrChar32_t)func_wrChar32;
_dst.flip = (alu_func_flipstr_t)func_flipstr;
for ( i = 0; pos_int[i]; ++i )
{
src = pos_int[i];
size = strlen(src);
switch ( src[1] )
{
case 'x': case 'X': base.base = 16; break;
case 'b': case 'B': base.base = 2; break;
default: base.base = 10;
}
nextpos = 0;
__src.block = src;
__src.bytes.used = strlen(src);
__src.bytes.last = __src.bytes.used;
__src.bytes.upto = size ? size : __src.bytes.used + 1;
ret = alu_block_expand( &__dst, __src.bytes.upto * 2 );
if ( ret != 0 )
return ret;
ret = reg_print_value( alu, _src, _dst, base, lit, print_anyways );
if ( ret != 0 )
{
alu_error( ret );
goto fail;
}
ret = uint_print_value( alu, _src, _dst, base, lit, print_anyways );
if ( ret != 0 )
{
alu_error( ret );
goto fail;
}
ret = int_print_value( alu, _src, _dst, base, lit, print_anyways );
if ( ret != 0 )
{
alu_error( ret );
goto fail;
}
}
for ( i = 0; neg_int[i]; ++i )
{
src = neg_int[i];
size = strlen(src);
switch ( src[1] )
{
case 'x': case 'X': base.base = 16; break;
case 'b': case 'B': base.base = 2; break;
default: base.base = 10;
}
nextpos = 0;
__src.block = src;
__src.bytes.used = strlen(src);
__src.bytes.last = __src.bytes.used;
__src.bytes.upto = size ? size : __src.bytes.used + 1;
ret = alu_block_expand( &__dst, __src.bytes.upto * 2 );
if ( ret != 0 )
{
alu_error( ret );
goto fail;
}
ret = int_print_value( alu, _src, _dst, base, lit, print_anyways );
if ( ret != 0 )
{
alu_error( ret );
goto fail;
}
}
fail:
alu_block_release( &__dst );
return ret;
}
Sorry Hodor, still further no ideas on your failed linkage issue, if what I suggested and did don't fix it then you'll just have to try what ever you think of, at the most you'll only be editing the *.mak files so that should at least reduce the annoyance if you care enough to try. Let me know how it goes if you do try and even if you don't at least let me know if it's a lost cause trying to get you to compile it again.