public static DataBlock read(BinaryReader reader, boolean hasBigFields) throws IOException {
			DataBlock subblock = new DataBlock();
			subblock.repeatCount = OmfUtils.readInt2Or4(reader, hasBigFields);
			subblock.blockCount = reader.readNextUnsignedShort();
			if (subblock.blockCount == 0) {
				int size = reader.readNextByte() & 0xff;
				subblock.simpleBlock = new byte[size];
				for (int i = 0; i < size; ++i) {
					subblock.simpleBlock[i] = reader.readNextByte();
				}
			}
			else {
				subblock.nestedBlock = new DataBlock[subblock.blockCount];
				for (int i = 0; i < subblock.blockCount; ++i) {
					subblock.nestedBlock[i] = read(reader, hasBigFields);		// Recursive definition
				}
			}
			return subblock;
		}
Contain the definition of one part of a datablock with possible recursion
Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/omf/omf/OmfIteratedData.java