* @param client
	 */
	public void op_helpedit(final String input, final Client client) {
		final Player player = getPlayer(client); // get Player
		final EditList list = player.getEditList(); // get EditList

		debug("input: " + input);

		String hcmd = "";
		String harg = "";

		if (input.indexOf(".") == 0) // Is it an editor commans?
		{
			if (input.indexOf(" ") != -1) { // Arguments
				hcmd = input.substring(input.indexOf(".") + 1, input.indexOf(" "));
				harg = input.substring(input.indexOf(" ") + 1, input.length());
			}
			else { // No Arguments
				hcmd = input.substring(input.indexOf(".") + 1, input.length());
			}

			debug("HEDIT CMD");
			debug("hcmd: " + hcmd);

			if (hcmd.equals("abort") || hcmd.equals("a")) {
				player.abortEditing();

				send("< List Aborted. >", client);
				send("< Exiting... >", client);

				player.setEditor(Editors.NONE);
				player.setStatus("OOC");
			}
			else if (hcmd.equals("del") || hcmd.equals("d")) {
				if (list != null) {
					final int toDelete = Utils.toInt(harg, -1);
					list.removeLine(toDelete);
					send("< Line " + toDelete + " deleted. >", client);
				}
			}
			else if (hcmd.equals("help") || hcmd.equals("h")) {
				send("<Help Editor Help>", client);
				send(".abort[.a]      - throw out the current help file changes and exit", client);
				send(".del[.d] <#>    - delete the indicated line", client);
				send(".help[.h]       - display this editor's help", client);
				send(".insert[.i] <#> - move input placement to the line specified", client);
				send(".list[.l]       - print out help file w/line numbers", client);
				send(".print[.p]      - print out help file w/o line numbers", client);
				send(".quit[.q]       - save and exit help file", client);
				send(".save[.s]       - save help file", client);
				send(".stat[.st]      - display current status of the help file", client);
				send("< End Help Editor Help >", client);
			}
			else if (hcmd.equals("insert") || hcmd.equals("i")) {
				if (list != null) {
					list.setLineNum(Utils.toInt(harg, 0));
					debug("Line changed to: " + Utils.toInt(harg, 0));
				}
			}
			else if (hcmd.equals("list") || hcmd.equals("l")) {
				if (list != null) {
					int i = 0;
					for (String s : list.getLines()) {
						System.out.println(Utils.padRight(i + ": ", ' ', 5) + s);
						send(Utils.padRight(i + ": ", ' ', 5) + s, client);
						i++;
					}
				}
			}
			else if (hcmd.equals("print") || hcmd.equals("p")) {
				if (list != null) {
					for (String s : list.getLines()) {
						System.out.println(s);
						send(s, client);
					}
				}
			}
			else if (hcmd.equals("quit") || hcmd.equals("q")) {
				// save the help file?
				op_helpedit(".save", client);

				send("< Exiting... >", client);

				player.setEditor(Editors.NONE);
				player.setStatus("OOC");
			}
			else if (hcmd.equals("replace") || hcmd.equals("repl")) {
				// .replace start_line:end_line=line\line\...
				// .replace 5 7 this;is;a
				// .replace line=new text
				if( harg.matches("^(\\d+)( )(\\d+)( )((\\w+)([;]))*(\\w+)$") ) {
					String[] args = harg.split(" ");
					
					int start = Utils.toInt(args[0], -1);
					int end = Utils.toInt(args[1], -1);
					
					String[] data = args[2].split(";");
					
					// TODO doesn't test that the lines fall within the list...
					if( start != -1 && end != -1 && end > start ) {
						int n = 0;
						
						for(int l = start; start < end; l++) {
							if( n < data.length ) {
								list.setLine(l, data[n]);
								n++;
							}
							else break;
						}
					}
				}
				else send("replace: invalid arguments", client);
			}
			else if (hcmd.equals("save") || hcmd.equals("s")) {
				if (list != null) {
					// convert the list to a string array
					this.helpTable.put(list.getName(), list.getLines().toArray(new String[0]));

					send("< Help File Written Out! >", client);
					send("< Help File Saved. >", client);
				}
			}
			else if (hcmd.equals("stat") || hcmd.equals("st")) {
				if (list != null) {
					String header = "< Help File: " + list.getName() + ".txt" + " Line: " + list.getLineNum() + " Lines: " + list.getNumLines() + "  >";
					send(header, client);
				}
			}
		}
		else {
			if (list != null) {
				debug("Line: " + list.getLineNum() + " Input: " + input);

				if (list.getLineNum() < list.getNumLines()) {
					list.setLine(list.getLineNum(), input);
				} 
				else list.addLine(input);

				debug(list.getLineNum() + ": \"" + list.getCurrentLine() + "\"");
			}
		}
	}