sscanf(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 end = format[formatPos + 1] == '\0' ? '\0' : ' ', i; while (string[stringPos] != end) 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; }