int getFieldOffset(BigInteger lineIndex, int fieldNum, FieldFactory[] factories) {
		int firstActiveFactoryIndex = getFirstActiveFactoryIndex(lineIndex, factories);
		if (firstActiveFactoryIndex < 0) {
			return 0;
		}
		int lastActiveFactoryIndex = getLastActiveFactoryIndex(lineIndex, factories);
		int factoryIndex = firstActiveFactoryIndex + fieldNum;
		if (factoryIndex <= lastActiveFactoryIndex) {
			return factories[factoryIndex].getFieldOffset();
		}
		return factories[lastActiveFactoryIndex].getFieldOffset();
	}
Gets the field offset (byte offset from the beginning of the line) for the given index
and fieldNum.
@param lineIndex the line index to get the field offset. This only matters because some indexes
don't use all the fields and have blanks in some of the factory field locations. Fieldnum
starts counting from the first visible field.
@param fieldNum the index of the field to get an offset for. This is complicated by the
fact that fieldNum is 0 for the first visible field.
@param factories the list of factories that generate byte fields per line. The factories
are identical except for which offset it uses to get its bytes for display.
@return the byte offset from the byte that would be shown at the beginning of the line
Ghidra/Features/ByteViewer/src/main/java/ghidra/app/plugin/core/byteviewer/IndexMap.java