@Override
	public void launch(GhidraApplicationLayout layout, String[] args) {
		ApplicationConfiguration appConfig = new DockingApplicationConfiguration();
		Application.initializeApplication(layout, appConfig);
		// Perform Class searching so we load data type classes that may have moved or
		// changed name. This is needed to map a data type's old path name to the new one.
		performClassSearching(appConfig.getTaskMonitor());

		fixupGUI();

		UniversalIdGenerator.initialize();
		final JFrame frame = new JFrame("Transform Data Type Archive");
		frame.setLayout(new GridBagLayout());
		final DataTypeArchiveTransformerPanel filePanel = new DataTypeArchiveTransformerPanel();
		final JPanel statusPanel = new JPanel(new BorderLayout());
		final JButton transformButton = new JButton("Transform");
		final JButton exitButton = new JButton("Exit");

		final RunManager runManager = new RunManager();
		JComponent monitorComponent = runManager.getMonitorComponent();
		runManager.showCancelButton(true);

		// Add the file panel.
		GridBagConstraints gbc = new GridBagConstraints();
		gbc.insets = new Insets(2, 2, 2, 2);
		gbc.gridx = 0;
		gbc.gridy = 0;
		gbc.gridwidth = 2;
		filePanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
		frame.add(filePanel, gbc);

		// Add the taskMonitor to the status area.
		Dimension monitorSize = monitorComponent.getPreferredSize();
		monitorSize.width = filePanel.getPreferredSize().width;
		monitorComponent.setPreferredSize(monitorSize);
		monitorComponent.setVisible(true);
		statusPanel.add(monitorComponent, BorderLayout.EAST);
		// Add the status message to the status area.
		JLabel statusLabel = new GDLabel("    ");
		statusPanel.add(statusLabel, BorderLayout.CENTER);
		Dimension preferredSize = statusLabel.getPreferredSize();
		preferredSize.height = monitorComponent.getPreferredSize().height;
		statusLabel.setPreferredSize(preferredSize);
		statusLabel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
		statusLabel.setHorizontalAlignment(SwingConstants.CENTER);
		// Add the status area.
		gbc.gridx = 0;
		gbc.gridy = 2;
		gbc.gridwidth = 2;
		gbc.fill = GridBagConstraints.HORIZONTAL;
		frame.add(statusPanel, gbc);
		gbc.fill = GridBagConstraints.NONE;

		// Add the buttons.
		gbc.gridx = 0;
		gbc.gridy = 1;
		gbc.gridwidth = 1;
		gbc.weightx = 1;
		transformButton.addActionListener(e -> {

			MonitoredRunnable r = monitor -> {
				try {
					transformButton.setEnabled(false);
					exitButton.setEnabled(false);
					String inProgressMessage = "";
					statusLabel.setText(inProgressMessage);
					statusLabel.setToolTipText(inProgressMessage);
					filePanel.transform(monitor);
					File destinationFile = filePanel.getDestinationFile();
					statusLabel.setForeground(Messages.NORMAL);
					String message = "Transformation successfully created " +
						destinationFile.getAbsolutePath() + ".";
					statusLabel.setText(message);
					statusLabel.setToolTipText(message);
				}
				catch (CancelledException cancelExc) {
					String cancelMessage = "User canceled transformation.";
					statusLabel.setText(cancelMessage);
					statusLabel.setToolTipText(cancelMessage);
				}
				catch (Exception exc) {
					statusLabel.setForeground(Messages.ERROR);
					statusLabel.setText(exc.getMessage());
					statusLabel.setToolTipText(exc.getMessage());
					exc.printStackTrace();
				}
				finally {
					transformButton.setEnabled(true);
					exitButton.setEnabled(true);
				}
			};
			runManager.runNow(r, "", 250);
		});
		frame.add(transformButton, gbc);

		gbc.gridx = 1;
		gbc.gridy = 1;
		gbc.gridwidth = 1;
		gbc.weightx = 1;
		exitButton.addActionListener(e -> {
			frame.setVisible(false);
			System.exit(0);
		});
		frame.add(exitButton, gbc);

		frame.addWindowListener(new WindowAdapter() {

			@Override
			public void windowClosing(WindowEvent e) {
				super.windowClosing(e);
				System.exit(0);
			}

		});

		frame.pack();
		monitorComponent.setVisible(false);
		frame.setVisible(true);
	}
Checks to see if the indicated name is an anonymous name with the indicated prefix
followed by a number.
@param name the anonymous data type name to check.
@param prefix the prefix string ("_struct_", "_union_", "enum_").
@return true if the name is an anonymous data type name with the expected prefix.
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/data/DataTypeArchiveTransformer.java