public Object [] processStringWithEscapes(String in, JavNag javNag, Calendar rightNow, Problem problem, boolean haveNotifiedProblems, boolean recurse)
	{
		final Totals totals = javNag.calculateStatistics();
		log.add("" + totals.getNHosts() + " hosts, " + totals.getNServices() + " services");
		boolean loadingCmd = false, atTerminator = false, hadSplitter = false;
		String cmd = "", output = "";
		boolean flash = false;

		if (in == null)
			return new Object [] { "", false };

		for(int index=0; index<in.length(); index++) {
			if (loadingCmd) {
				char currentChar = in.charAt(index);

				if (atTerminator) {
					if (currentChar == '@') {
						System.out.println("CMD: " + cmd);
						Object [] result = processStringEscapes(javNag, totals, rightNow, problem, haveNotifiedProblems, cmd, recurse);
						output += (String)result[0];
						flash |= (Boolean)result[1];

						cmd = "";
						atTerminator = loadingCmd = false;
						hadSplitter = false;
					}
					else {
						cmd += in.charAt(index);
					}
				}
				else if ((currentChar >= 'A' && currentChar <= 'Z') || (currentChar >= 'a' && currentChar <= 'z') ||
					currentChar == '^' || ((currentChar == '/' || currentChar == '_' || currentChar == '.' || currentChar != '\\') && hadSplitter == true))
				{
					cmd += in.charAt(index);
				}
				else if (currentChar == '^') {
					cmd += in.charAt(index);
					hadSplitter = true;
				}
				else {
					Object [] result = processStringEscapes(javNag, totals, rightNow, problem, haveNotifiedProblems, cmd, recurse);
					output += (String)result[0];
					flash |= (Boolean)result[1];

					cmd = "";
					loadingCmd = false;
					hadSplitter = false;

					if (currentChar == '%')
						loadingCmd = true;
					else if (currentChar == '@') {
						loadingCmd = true;
						atTerminator = true;
					}
					else
						output += in.charAt(index);
				}
			}
			else {
				if (in.charAt(index) == '%')
					loadingCmd = true;
				else if (in.charAt(index) == '@') {
					loadingCmd = true;
					atTerminator = true;
				}
				else
					output += in.charAt(index);
			}
		}

		if (cmd.equals("") == false) {
			Object [] result = processStringEscapes(javNag, totals, rightNow, problem, haveNotifiedProblems, cmd, recurse);
			output += (String)result[0];
			flash |= (Boolean)result[1];
		}

		return new Object [] { output, flash };
	}