public String askString(String title, String message, String defaultValue)
			throws CancelledException {

		String key = join(title, message);
		String existingValue = loadAskValue(defaultValue, this::stringIdentity, key);
		if (isRunningHeadless()) {
			return existingValue;
		}

		String choice = doAsk(String.class, title, message, existingValue, lastValue -> {
			AskDialog<String> dialog = new AskDialog<>(title, message, AskDialog.STRING, lastValue);

			if (dialog.isCanceled()) {
				throw new CancelledException();
			}

			return dialog.getValueAsString();
		});

		return choice;
	}
Returns a String, using the String input parameters for guidance. The actual behavior of the
method depends on your environment, which can be GUI or headless.
<p>
Regardless of environment -- if script arguments have been set, this method will use the
next argument in the array and advance the array index so the next call to an ask method
will get the next argument.  If there are no script arguments and a .properties file
sharing the same base name as the Ghidra Script exists (i.e., Script1.properties for
Script1.java), then this method will then look there for the String value to return.
The method will look in the .properties file by searching for a property name that is a
space-separated concatenation of the input String parameters (title + " " + message).
If that property name exists and its value represents a valid String value, then the
.properties value will be used in the following way:
<ol>
		<li>In the GUI environment, this method displays a popup dialog that prompts the user
			for a String value. The pre-populated value for the String input field will be the
			last-used String (if the dialog has been run before). If that does not exist, the
			pre-populated value is the .properties value. If that does	not exist or is invalid,
			then the 'defaultValue' parameter is used (as long as it is not	null or the empty
			String).</li>
		<li>In the headless environment, this method returns a String value representing the
			.properties value (if it exists). Otherwise, if the 'defaultValue' parameter is
			not null or an empty String, it is returned. In all other cases, an exception
			is thrown.</li>
</ol>


@param title the title of the dialog (in GUI mode) or the first part of the variable name
			(in headless mode or when using .properties file)
@param message the message to display next to the input field (in GUI mode) or the second
			part of the variable name (in headless mode or when using .properties file)
@param defaultValue the optional default value
@return the user-specified String value
@throws CancelledException if the user hit the 'cancel' button in GUI mode
@throws IllegalArgumentException if in headless mode, there was a missing or invalid String
			specified in the .properties file
Ghidra/Features/Base/src/main/java/ghidra/app/script/GhidraScript.java