All pastes #739937 Raw Edit

Miscellany

public text v1 · immutable
·published 2007-10-17 16:05 UTC
rendered paste body
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
					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;
}