public synchronized void registerProgram(DecompileCallback cback, String pspecxml,
			String cspecxml, String tspecxml, String coretypesxml, Program program)
			throws IOException, DecompileException {
		callback = cback;
		programSource = program.getName();

		// Decompiler process may callback during the registerProgram operation
		// so provide query/reponse decoding/encoding
		paramDecoder = new PackedDecode(program.getAddressFactory());
		resultEncoder = new PatchPackedEncode();

		StringIngest response = new StringIngest();	// Don't use stringDecoder

		setup();
		try {
			write(command_start);
			writeString("registerProgram");
			writeString(pspecxml);
			writeString(cspecxml);
			writeString(tspecxml);
			writeString(coretypesxml);
			write(command_end);
			readResponse(response);
		}
		catch (IOException e) {
			statusGood = false;
			throw e;
		}
		archId = Integer.parseInt(response.toString());
	}
Initialize decompiler for a particular platform
@param cback = callback object for decompiler
@param pspecxml = string containing .pspec xml
@param cspecxml = string containing .cspec xml
@param tspecxml = XML string containing translator spec
@param coretypesxml = XML description of core data-types
@param program is the program being registered
@throws IOException for problems with the pipe to the decompiler process
@throws DecompileException for problems executing the command
Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/DecompileProcess.java