public static Subrecord readSubrecord(BinaryReader reader, boolean hasBigFields)
				throws IOException {
			int method;
			final var rec = new Subrecord();
			rec.first = reader.readNextByte();
			rec.index = new OmfIndex(1, -1);
			if (rec.isThreadSubrecord()) {
				method = rec.getThreadMethod();
				if (method < 4) {
					rec.index = OmfUtils.readIndex(reader);
				}
				return rec;
			}
			rec.targetDisplacement = new Omf2or4(2, 0);
			rec.targetDatum = new OmfIndex(1, 0);
			rec.hiFixup = reader.readNextByte();
			rec.fixData = reader.readNextByte();
			method = rec.getFrameMethod();
			if (!rec.isFrameThread() && method < 3) { // F=0  (explicit frame method (and datum))
				rec.frameDatum = OmfUtils.readIndex(reader);
			}
			if (!rec.isTargetThread()) { // T=0  (explicit target)
				rec.targetDatum = OmfUtils.readIndex(reader);
			}
			if ((rec.fixData & 0x04) == 0) { // P=0
				rec.targetDisplacement = OmfUtils.readInt2Or4(reader, hasBigFields);
			}
			return rec;
		}
Read the next subrecord from the input reader

@param reader The input file
@param hasBigFields Is this 16 or 32 bit values
@return The read subrecord
@throws IOException if there was an IO-related error
Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/omf/omf/OmfFixupRecord.java