private int handleOutputConversionForParameters(String formatString, int i,
			FormatParsingData data, Map<Integer, FormatArgument> formatArgumentMap) {
		char c = formatString.charAt(i);
		if (c == '*') {
			int fieldWidthIdx = locateParameterIndex(formatString, i);
			if (fieldWidthIdx == 0) {
				return i;
			}
			i += Integer.toString(fieldWidthIdx).length() + 1;
			// i should be at $
			formatArgumentMap.put(fieldWidthIdx, new FormatArgument(null, "d"));
		}
		else {
			i = skipIntegers(formatString, i);
			if (i == -1) {
				return i;
			}
		}
		data.setFieldWidthComplete(true);
		return i;

	}
Handles format Strings with parameters. In this parser, we define a format
String parameter to be an integer n provided in the form: "%n$" or "*n$", where n is
the index of the referred argument. If a placeholder uses a format
argument parameter, all other placeholders must also have a parameter. Also,
all gaps between format argument indices are not supported. For instance, if
the first and third arguments are used, there must also be a parameter for a
second argument. Any parameter pattern beginning with % or * and ending with
$ must have integer in between. Failing to adhere by the format string
parameter requirements returns null.

@param formatString format String
@return List of FormatArgument


        TODO: What if multiple conversion specs refer to the same placeholder
        with different types? Ex: "%1$*1$x" (uses unsigned int and int)
        Currently just overwrites previous type
Ghidra/Features/DecompilerDependent/src/main/java/ghidra/app/plugin/core/string/variadic/FormatStringParser.java