private void createActions() {
		computeAction = new DockingAction("Compute Checksum", plugin.getName()) {
			@Override
			public void actionPerformed(ActionContext context) {
				generate();
			}

			@Override
			public boolean isEnabledForContext(ActionContext context) {
				return isVisible();
			}
		};
		computeAction.setHelpLocation(new HelpLocation("ComputeChecksumsPlugin", "compute"));
		computeAction.setEnabled(true);
		computeAction
				.setToolBarData(new ToolBarData(new GIcon("icon.plugin.checksum.compute"), null));
		computeAction.setDescription("Refreshes checksums");

		selectionAction = new ToggleDockingAction("On Selection", plugin.getName()) {
			@Override
			public void actionPerformed(ActionContext context) {
				updateFields();
				generate();
			}

			@Override
			public boolean isEnabledForContext(ActionContext context) {
				return isVisible();
			}
		};
		selectionAction.setHelpLocation(new HelpLocation("ComputeChecksumsPlugin", "On_Selection"));
		selectionAction.setEnabled(plugin.hasSelection());
		selectionAction
				.setToolBarData(new ToolBarData(new GIcon("icon.plugin.checksum.select"), null));
		selectionAction.setDescription("When toggled, generates checksums on " +
			"selection. Otherwise checksums are generated over the entire program");

		showHexAction = new ToggleDockingAction("Show Hex Values", plugin.getName()) {
			@Override
			public void actionPerformed(ActionContext context) {
				updateFields();
			}

			@Override
			public boolean isEnabledForContext(ActionContext context) {
				return isVisible();
			}
		};
		showHexAction.setHelpLocation(new HelpLocation("ComputeChecksumsPlugin", "As_Hex"));
		showHexAction.setEnabled(true);
		showHexAction
				.setToolBarData(new ToolBarData(new GIcon("icon.plugin.checksum.show.hex"), null));
		showHexAction.setDescription("Toggle to show the hex values instead of decimal values.");

		xorAction = new ToggleDockingAction("XOR Checksum Values", plugin.getName()) {
			@Override
			public void actionPerformed(ActionContext context) {
				if (xorAction.isSelected() && carryAction.isSelected()) {
					carryAction.setSelected(false);
				}
				generate();
			}

			@Override
			public boolean isEnabledForContext(ActionContext context) {
				return isVisible();
			}
		};
		xorAction.setHelpLocation(new HelpLocation("ComputeChecksumsPlugin", "xor"));
		xorAction.setEnabled(true);
		xorAction.setToolBarData(new ToolBarData(new GIcon("icon.plugin.checksum.xor"), null));
		xorAction.setDescription("Toggle to recompute values with a xor operation.");

		carryAction = new ToggleDockingAction("Carry Checksum Values", plugin.getName()) {
			@Override
			public void actionPerformed(ActionContext context) {
				if (carryAction.isSelected() && xorAction.isSelected()) {
					xorAction.setSelected(false);
				}
				generate();
			}

			@Override
			public boolean isEnabledForContext(ActionContext context) {
				return isVisible();
			}

		};
		carryAction.setHelpLocation(new HelpLocation("ComputeChecksumsPlugin", "carry"));
		carryAction.setEnabled(true);
		carryAction.setToolBarData(new ToolBarData(new GIcon("icon.plugin.checksum.carry"), null));
		carryAction.setDescription("Toggle to recompute values with a carry operation.");

		onesCompAction = new ToggleDockingAction("Ones Complement", plugin.getName()) {
			@Override
			public void actionPerformed(ActionContext context) {
				if (onesCompAction.isSelected() && twosCompAction.isSelected()) {
					twosCompAction.setSelected(false);
				}
				generate();
			}

			@Override
			public boolean isEnabledForContext(ActionContext context) {
				return isVisible();
			}
		};
		onesCompAction.setHelpLocation(new HelpLocation("ComputeChecksumsPlugin", "ones_comp"));
		onesCompAction.setEnabled(true);
		onesCompAction.setToolBarData(
			new ToolBarData(new GIcon("icon.plugin.checksum.ones.complement"), null));
		onesCompAction.setDescription("Toggle to recompute values with a one's complement.");

		twosCompAction = new ToggleDockingAction("Twos Complement", plugin.getName()) {
			@Override
			public void actionPerformed(ActionContext context) {
				if (onesCompAction.isSelected() && twosCompAction.isSelected()) {
					onesCompAction.setSelected(false);
				}
				generate();
			}

			@Override
			public boolean isEnabledForContext(ActionContext context) {
				return isVisible();
			}
		};
		twosCompAction.setHelpLocation(new HelpLocation("ComputeChecksumsPlugin", "twos_comp"));
		twosCompAction.setEnabled(true);
		twosCompAction.setToolBarData(
			new ToolBarData(new GIcon("icon.plugin.checksum.twos.complement"), null));
		twosCompAction.setDescription("Toggle to recompute values with a two's complement.");

		tool.addLocalAction(this, onesCompAction);
		tool.addLocalAction(this, twosCompAction);
		tool.addLocalAction(this, xorAction);
		tool.addLocalAction(this, carryAction);
		tool.addLocalAction(this, selectionAction);
		tool.addLocalAction(this, showHexAction);
		tool.addLocalAction(this, computeAction);
	}
Creates a new table for the checksums.
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/checksums/ComputeChecksumsProvider.java