FieldLocation getFieldLocation(ByteBlock block, BigInteger offset, FieldFactory[] factories) {
		for (BlockInfo blockInfo : blockInfoMap.values()) {
			if (blockInfo.block == block) {
				BigInteger byteIndex = blockInfo.blockStart.add(offset);
				BigInteger index = byteIndex.divide(bytesInLine);
				int lineOffset = byteIndex.remainder(bytesInLine).intValue();

				//int fieldOffset = lineOffset / fields.length;
				int nbytesPerField = bytesInLine.intValue() / factories.length;
				int fieldOffset = (lineOffset / nbytesPerField) * nbytesPerField;

				int byteOffset = lineOffset % nbytesPerField;

				int fieldNum = getFieldNum(index, fieldOffset, factories);
				int col = factories[fieldNum].getColumnPosition(block, byteOffset);
				return new FieldLocation(index, fieldNum, 0, col);
			}
		}
		return null;
	}
Returns a field location for the given block, offset.
@param block the ByteBlock containing the byte to get a FieldLocation for
@param offset the byte offset in the block
@param factories that generated values for a line
@return the field location for the given byte location
Ghidra/Features/ByteViewer/src/main/java/ghidra/app/plugin/core/byteviewer/IndexMap.java