Okay, def was the problem function, wasn't returning the count of characters read, also I think there were some bugs in it so I re-worked it, doesn't seem to input the width though which is a problem:
Code:
PAW_API pawd pawva_option_dig( PAWVA_CONFIG *data, pawhhs args, va_list *va )
{
pawd dot = data->opt & PAWVA_O_PERIOD;
pawd pad0 = (*args == '0') ? '0' : 0;
pawd *ptr = &(data->min.len);
pawd skip = (pad0 && dot);
pawd len = skip;
pawsu str = {""};
for ( ; args[len] >= '0' && args[len] <= '9'; ++len )
str.str[len-skip] = args[len];
if ( dot )
ptr = &(data->max);
else if ( pad0 )
data->min.txt = '0';
*ptr = paws2u( &str, 10, PAW_BASE10_REM );
(void)va;
return len;
}
Edit: I suppose the other potential cause of the width failing to get through is these 2 which the joining functions pass off to after doing the bare minimum:
Code:
PAW_API pawd pawva_putf_calc_ins( PAWVA_CONFIG *data, pawd need )
{
/* Align in center */
if ( data->mov == 0 )
data->insert = data->append = (need / 2) + !!(need % 2);
/* Align on the left */
else if ( data->mov < 0 )
{
data->insert = 0;
data->append = need;
}
/* Align on the right */
else
{
data->insert = need;
data->append = 0;
}
return need;
}
PAW_API pawd pawva_putf_aligntxt
( PAWVA_CONFIG *data, pawSTR Str, pawd was, pawd did )
{
pawd need = data->min.len - did;
if ( need > 0 )
{
pawhhc *txt = PawTopOfString(Str);
pawhhc *ins = txt + was, *mid, *add;
pawd i = 0;
pawva_putf_calc_ins( data, need );
mid = ins + data->insert;
add = mid + did;
if ( data->insert > 0 )
{
paw_mov( mid, ins, data->insert * sizeof(pawhhc) );
for ( i = 0; i < data->insert; ++i )
ins[i] = data->min.txt;
}
for ( i = 0; i < data->append; ++i )
add[i] = data->min.txt;
did += data->insert + data->append;
}
pawSizeStringc( Str, was + did );
return did;
}