rendered paste bodysscanf(string[], format[], {Float,_}:...)
{
new
formatPos,
stringPos,
paramPos = 2,
paramCount = numargs();
while (paramPos < paramCount && string[stringPos])
{
switch (format[formatPos])
{
case '\0': break;
case 'i', 'd': setarg(paramPos, 0, strval(string[stringPos]));
case 'c': setarg(paramPos, 0, string[stringPos]);
case 'f': setarg(paramPos, 0, _:floatstr(string[stringPos]));
case 's':
{
new
i;
if(format[formatPos + 1] != '\0')
while (string[stringPos] != ' ' && string[stringPos] != '\0') setarg(paramPos, i++, string[stringPos++]);
else
while (string[stringPos] != '\0') setarg(paramPos, i++, string[stringPos++]);
setarg(paramPos, i, '\0');
}
default: goto skip;
}
while (string[stringPos] && string[stringPos] != ' ') stringPos++;
while (string[stringPos] == ' ') stringPos++;
paramPos++;
skip:
formatPos++;
}
return format[formatPos] ? 0 : 1;
}