private boolean showNonMatchingArchitecturesWarning(List<Program> validList,
			List<Program> invalidList) {

		StringBuilder buffy = new StringBuilder();
		buffy.append("<html><BR>");
		buffy.append(
			"Found open programs with architectures differing from the current program.<BR><BR><BR>");
		buffy.append("These programs <B>will</B> be analyzed: <BR><BR>");

		buffy.append("<TABLE BORDER=\"0\" CELLPADDING=\"5\">");

		appendTableHeader(buffy);

		String specialFontOpen = "<B><font color=\"" + Palette.GREEN.toHexString() + "\">";
		String specialFontClose = "</font></B>";

		for (Program program : validList) {
			boolean isCurrentProgram = program == prototypeProgram;
			if (!isCurrentProgram) { // mark only the current program with special font
				specialFontOpen = "";
				specialFontClose = "";
			}

			buffy.append("<TR>");
			buffy.append("<TD>");
			buffy.append(specialFontOpen);
			buffy.append(HTMLUtilities.escapeHTML(program.getName()));
			buffy.append(specialFontClose);
			buffy.append("</TD>");
			buffy.append("<TD>");
			buffy.append(specialFontOpen);
			buffy.append(program.getLanguageID());
			buffy.append(specialFontClose);
			buffy.append("</TD>");
			buffy.append("<TD>");
			buffy.append(specialFontOpen);
			buffy.append(program.getCompilerSpec().getCompilerSpecID());
			buffy.append(specialFontClose);
			buffy.append("</TD>");
			buffy.append("</TR>");
		}

		buffy.append("<TR>");
		buffy.append("<TD COLSPAN=\"3\">");
		buffy.append("<BR><BR>These programs will <B>not</B> be analyzed: <BR><BR>");
		buffy.append("</TD>");
		buffy.append("</TR>");

		appendTableHeader(buffy);

		for (Program program : invalidList) {
			buffy.append("<TR>");
			buffy.append("<TD>");
			buffy.append(HTMLUtilities.escapeHTML(program.getName()));
			buffy.append("</TD>");
			buffy.append("<TD>");
			buffy.append(program.getLanguageID());
			buffy.append("</TD>");
			buffy.append("<TD>");
			buffy.append(program.getCompilerSpec().getCompilerSpecID());
			buffy.append("</TD>");
			buffy.append("</TR>");
		}

		buffy.append("</TABLE>");

		return Swing.runNow(() -> {
			ScrollingOptionDialog dialog = new ScrollingOptionDialog(buffy.toString());
			return dialog.shouldContinue();
		});
	}
Verifies that all programs to be analyzed have similar architectures (if
not, they can't be analyzed in a single batch, as their analyzer options
do not match). 
<p>
If any architectures do not match, the user will be notified via
a popup dialog.

@return the list of programs that can be analyzed, or null if the operation
was cancelled by the user
@throws CancelledException if the user cancelled the operation
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/analysis/AnalyzeAllOpenProgramsTask.java