private void markupStructureContents(Address address, FlatProgramAPI programAPI,
			TaskMonitor monitor)
			throws IOException, DuplicateNameException, CodeUnitInsertionException,
			NotFoundException {

		Program currentProgram = programAPI.getCurrentProgram();
		ByteProvider provider =
			new MemoryByteProvider(currentProgram.getMemory(), address);
		BinaryReader reader =
			new BinaryReader(provider, !currentProgram.getLanguage().isBigEndian());

		while (!monitor.isCancelled()) {
			DWordDataType dWordDataType = new DWordDataType();
			switch (reader.peekNextInt()) {
				case FdtConstants.FDT_BEGIN_NODE: {
					FdtNodeHeader nodeHeader = new FdtNodeHeader(reader);
					DataType nodeHeaderDataType = nodeHeader.toDataType();
					programAPI.createData(address, nodeHeaderDataType);
					programAPI.createFragment("FDT_BEGIN_NODE", address,
						nodeHeaderDataType.getLength());
					programAPI.setPlateComment(address,
						"FDT_BEGIN_NODE" + ": " + nodeHeader.getName());
					address = address.add(nodeHeaderDataType.getLength());
					break;
				}
				case FdtConstants.FDT_END_NODE: {
					reader.readNextInt();
					programAPI.createData(address, dWordDataType);
					programAPI.createFragment("FDT_END_NODE", address,
						dWordDataType.getLength());
					programAPI.setPlateComment(address, "FDT_END_NODE");
					address = address.add(4);
					break;
				}
				case FdtConstants.FDT_PROP: {
					FdtProperty property = new FdtProperty(reader);
					DataType propertyDataType = property.toDataType();
					programAPI.createData(address, propertyDataType);
					programAPI.createFragment("FDT_PROP", address,
						propertyDataType.getLength());
					programAPI.setPlateComment(address,
						"FDT_PROP" + ": \n" + getString(property) + " = " +
							property.getDataAsString());
					address = address.add(propertyDataType.getLength());
					break;
				}
				case FdtConstants.FDT_NOP: {
					reader.readNextInt();
					programAPI.createData(address, dWordDataType);
					programAPI.createFragment("FDT_NOP", address,
						dWordDataType.getLength());
					programAPI.setPlateComment(address, "FDT_NOP");
					address = address.add(4);
					break;
				}
				case FdtConstants.FDT_END: {
					reader.readNextInt();
					programAPI.createData(address, dWordDataType);
					programAPI.createFragment("FDT_END", address,
						dWordDataType.getLength());
					programAPI.setPlateComment(address, "FDT_END");
					address = address.add(4);
					return;
				}
			}
		}
	}
Marks up the program containing this FDT.
@param fdtHeaderAddress the address where the FDT starts
@param program the program to markup
@param monitor the TaskMonitor
@param log the MessageLog
@throws Exception if an exception occurs
Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dtb/FdtHeader.java