changeset 21:8b58e6bb09c1

*** empty log message ***
author pin
date Tue, 14 Nov 2006 03:59:38 +0900
parents e5472194938a
children 988d3c25ff91
files bin/remoteeditor/MyDialog.class bin/remoteeditor/editors/RemoteEditor$1.class bin/remoteeditor/editors/RemoteEditor.class bin/remoteeditor/network/REP.class src/remoteeditor/MyDialog.java src/remoteeditor/editors/RemoteEditor.java src/remoteeditor/network/REP.java src/sample/merge/Merge.java src/sample/merge/MergeSample.java src/sample/merge/Rep_Cmd.java src/sample/merge/Translate.java
diffstat 11 files changed, 202 insertions(+), 182 deletions(-) [+]
line wrap: on
line diff
Binary file bin/remoteeditor/MyDialog.class has changed
Binary file bin/remoteeditor/editors/RemoteEditor$1.class has changed
Binary file bin/remoteeditor/editors/RemoteEditor.class has changed
Binary file bin/remoteeditor/network/REP.class has changed
--- a/src/remoteeditor/MyDialog.java	Tue Oct 31 19:01:04 2006 +0900
+++ b/src/remoteeditor/MyDialog.java	Tue Nov 14 03:59:38 2006 +0900
@@ -13,7 +13,6 @@
 
 	public MyDialog(Shell parentShell) {
 		super(parentShell);
-		// TODO Auto-generated constructor stub
 	}
 	
 	protected Point getInitialSize() {
--- a/src/remoteeditor/editors/RemoteEditor.java	Tue Oct 31 19:01:04 2006 +0900
+++ b/src/remoteeditor/editors/RemoteEditor.java	Tue Nov 14 03:59:38 2006 +0900
@@ -1,7 +1,5 @@
 package remoteeditor.editors;
 
-import java.io.IOException;
-
 import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.IDocument;
 import org.eclipse.jface.text.ITextListener;
@@ -19,12 +17,10 @@
 	
 	private ISourceViewer viewer;
 	private IDocument document;
-	
 	REP rep;
+	int numberOfLinesOld;
 
-	private int textOffset;
-
-	public RemoteEditor() throws Exception {
+	public RemoteEditor() {
 		super();
 		
 		rep = new REP();
@@ -46,9 +42,9 @@
 	public void textChanged(TextEvent event) {
 		String replacedText = event.getReplacedText();
 		String inputText = event.getText();
-		
+				
 		// ページ先頭からの文字数(改行を含む)による座標
-		textOffset = event.getOffset();
+		int textOffset = event.getOffset();
 		
 		System.out.println("replace = " + replacedText);
 		System.out.println("input = " + inputText + " : " + inputText.length());
@@ -56,59 +52,55 @@
 		int line = 0;
 		int offset;
 		int length = 0;
+		int cmd = 0;
+		int numberOfLinesNew = 0;
 		String lineText = null;
 		try {
 			line = document.getNumberOfLines(0, textOffset); // lineno を取得してます。
 			offset = document.getLineOffset(line-1);
 			length = document.getLineLength(line-1);
 			lineText = document.get(offset, length);
+			numberOfLinesNew = document.getNumberOfLines();
 		} catch (BadLocationException e1) {
 			e1.printStackTrace();
 		}
-		if(inputText.contains("\n")){
-			try {
-				rep.insert(line+1, length, "\n"); //insert, delete, replace を 行数で判断
-			} catch (Exception e) {
-				e.printStackTrace();
-			}
-		}else if(inputText.length() != 0){
-			try {
-				rep.replace(line, length, lineText);
-			} catch (IOException e) {
-				e.printStackTrace();
+		if(numberOfLinesNew > numberOfLinesOld){
+			//insert, delete, replace を 行数で判断
+			cmd = REP.REP_INSERT_CMD;
+		}else if(numberOfLinesNew == numberOfLinesOld){
+			cmd = REP.REP_REPLACE_CMD;
+		}else {
+			cmd = REP.REP_DELETE_CMD;
+		}
+		rep.sendCmd(cmd, line, length, lineText);
+		numberOfLinesOld = numberOfLinesNew;
+		System.out.println("numberOfLinesOld : " + numberOfLinesOld + "," + "numberOfLinesNew : " + numberOfLinesNew);
+	}
+	
+	void replaceInsertDelete(int kindOfCmd, int lineNo, int LineLength, String text) throws BadLocationException{
+		final int offset = document.getLineOffset(lineNo);
+		final String changedText = text;
+		final int replaceLength = document.getLineLength(lineNo);
+		
+		viewer.getTextWidget().getDisplay().syncExec(new Runnable() {
+			public void run() {
+				try {
+					document.replace(offset, replaceLength, changedText);
+				} catch (BadLocationException e) {
+					e.printStackTrace();
+				}
 			}
-		}else if(!replacedText.equals("\n")){
-			try {
-				rep.replace(line, length, lineText);
-			} catch (IOException e) {
-				e.printStackTrace();
-			}
-		}else {
-			try {
-				rep.delete(line+1, length, "\n");
-			} catch (IOException e) {
-				e.printStackTrace();
-			}
+		});
+	}
+
+	public void packetReceived(final RSocketEvent evt) {
+		final int lineNo = evt.getLineNo();
+		final int Linelength = evt.getLength();
+		final String text = evt.getText();
+		try {
+			replaceInsertDelete(evt.getCmd(), lineNo, Linelength, text);
+		} catch (BadLocationException e) {
+			e.printStackTrace();
 		}
 	}
-
-	public void packetReceived(RSocketEvent evt) {
-		 	final int offset = evt.getLineNo();
-			final int length = evt.getLength();
-			final String text = evt.getText();
-			System.out.println(offset + " : " + length);
-			if(evt.getCmd() == REP.REP_INSERT_CMD){
-			viewer.getTextWidget().getDisplay().syncExec(new Runnable() {
-				public void run() {
-					try {
-						document.replace(offset, 0, text);
-					} catch (BadLocationException e) {
-						e.printStackTrace();
-					}
-				}
-		    });
-			}
-	}
-
-
 }
--- a/src/remoteeditor/network/REP.java	Tue Oct 31 19:01:04 2006 +0900
+++ b/src/remoteeditor/network/REP.java	Tue Nov 14 03:59:38 2006 +0900
@@ -12,6 +12,7 @@
 import org.eclipse.swt.widgets.Shell;
 
 import sample.merge.Rep_Cmd;
+import sample.merge.Translate;
 
 
 
@@ -40,8 +41,7 @@
 	public static final int REP_QUIT_CMD = 53;
 	public static final int REP_QUIT_ACK_CMD = 54;
 	
-	//ByteBuffer buffer = ByteBuffer.allocateDirect(1024);
-	//ByteBuffer read_buffer = ByteBuffer.allocateDirect(1024);
+    static final int HEADER_SIZE = 24;
 	
 	String string;
 	public RSocketListener socketListener;
@@ -51,7 +51,7 @@
 	List <Rep_Cmd> othersCmdList = new LinkedList<Rep_Cmd>();
 	private String filename;
 	
-	public REP() throws Exception {
+	public REP() {
 		String host = "localhost";
 		int port = 8765;
 		
@@ -70,13 +70,18 @@
 		
 		
 		InetSocketAddress addr = new InetSocketAddress(host, port);
-		sc = SocketChannel.open();
+		try {
+			sc = SocketChannel.open();
+
 		sc.configureBlocking(true);
 		sc.connect(addr);
 		while(!sc.finishConnect()){
 			System.out.println("afro");
 		}
 		join();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
 		
 		dialog = new InputDialog(shell, "repput", "read packet:" + cmd +", "+ sid +", "+ eid +", "+ seqid +", "+ lineno +", "+ textsiz +", "+ string, "hugo", null);
 		if(dialog.open() == Window.OK){
@@ -94,20 +99,20 @@
 		}
 	}
 	
-	public void join() throws IOException{
-		sc.write(pack( REP_JOIN_CMD, sid, eid, seqid, lineno, "afro"));
+	public void join() {
+		rWrite(pack( REP_JOIN_CMD, sid, eid, seqid, lineno, "afro"));
 		unpack();
 		System.out.println("read packet:" + cmd +", "+ sid +", "+ eid +", "+ seqid +", "+ lineno +", "+ textsiz +", "+ string);
 	}
 	
-	public void put() throws Exception {
-		sc.write(pack(REP_PUT_CMD, sid, eid, seqid, lineno, filename));
+	public void put() {
+		rWrite(pack(REP_PUT_CMD, sid, eid, seqid, lineno, filename));
 		unpack();
 		System.out.println("read packet:" + cmd +", "+ sid +", "+ eid +", "+ seqid +", "+ lineno +", "+ textsiz +", "+ string);
 	}
 	
-	public void select() throws Exception {
-		sc.write(pack(REP_SELECT_CMD, sid, eid, seqid, lineno, "afro"));
+	public void select() {
+		rWrite(pack(REP_SELECT_CMD, sid, eid, seqid, lineno, "afro"));
 		unpack();
 		System.out.println("read packet:" + cmd +", "+ sid +", "+ eid +", "+ seqid +", "+ lineno +", "+ textsiz +", "+ string);
 	}
@@ -118,7 +123,6 @@
 		try {
 			sc.write(pack(cmd, sid, eid, seqid, lineno, text));
 		} catch (IOException e1) {
-			// TODO Auto-generated catch block
 			e1.printStackTrace();
 		}
 		try {
@@ -169,16 +173,16 @@
     	buffer.flip();    // limit = current position, position = 0
     	return buffer;
     }
-
-	
-    static final int HEADER_SIZE = 24;
-    //ByteBuffer header = ByteBuffer.allocateDirect(HEADER_SIZE);
     
-	public void unpack() throws IOException{
+	public void unpack() {
 		ByteBuffer header = ByteBuffer.allocateDirect(HEADER_SIZE);
-		long len;
+		long len = 0;
 		header.clear();
-		len = sc.read(header);  // limit = read length
+		try {
+			len = sc.read(header);
+		} catch (IOException e1) {
+			e1.printStackTrace();
+		}  // limit = read length
 		if (len !=HEADER_SIZE) {
 			System.out.println("てす");
 			// this can't happen
@@ -199,7 +203,11 @@
 		ByteBuffer textBuffer = ByteBuffer.allocateDirect(textsiz*2);
 		//buffer.limit(textsiz*2);
 		//buffer.rewind();
-		len = sc.read(textBuffer);  // limit = read length
+		try {
+			len = sc.read(textBuffer);
+		} catch (IOException e1) {
+			e1.printStackTrace();
+		}  // limit = read length
 		if (len !=HEADER_SIZE) {
 			// this can't happen
 		}
@@ -223,18 +231,26 @@
 
 	public void run() {
 		while(sc.isConnected()){
-
-			try {
 				unpack();
-			} catch (IOException e) {
-				e.printStackTrace();
-			}
 			System.out.println("read packet:" + cmd +", "+ sid +", "+ eid +", "+ seqid +", "+ lineno +", "+ textsiz +", "+ string);
-			//socketListener.packetReceived(new RSocketEvent(cmd, sid, eid, seqid, lineno, textsiz, string)); //
+			socketListener.packetReceived(new RSocketEvent(cmd, sid, eid, seqid, lineno, textsiz, string)); //
 		}	
 		
 	}
-
+	public void rRead(ByteBuffer buffer){
+		try {
+			sc.read(buffer);
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+	public void rWrite(ByteBuffer buffer){
+		try {
+			sc.write(buffer);
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
 	public void dispose() {
 		try {
 			sc.close();
@@ -243,4 +259,17 @@
 		}
 	}
 
+	public void sendCmd(int cmd2, int line, int length, String lineText) {
+		cmd = REP_INSERT_CMD;
+		rWrite(pack(cmd2, sid, eid, seqid+1, line, lineText));
+		try {
+			myCmdList.add(new Rep_Cmd(cmd2, sid, eid, seqid, line, length, lineText));
+			System.out.println("myCmdList : " + myCmdList.toString());
+			System.out.println("othersCmdList : " + othersCmdList.toString());
+			new Translate(myCmdList, othersCmdList);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
 }
--- a/src/sample/merge/Merge.java	Tue Oct 31 19:01:04 2006 +0900
+++ b/src/sample/merge/Merge.java	Tue Nov 14 03:59:38 2006 +0900
@@ -19,7 +19,7 @@
 		tokenCmdList.add(new Rep_Cmd(REP.REP_INSERT_CMD, 1, 2, 0, 12, 5, "test3"));
 		tokenCmdList.add(new Rep_Cmd(REP.REP_INSERT_CMD, 1, 2, 0, 15, 5, "test4"));
 		System.out.println("TokenList : " + tokenCmdList.toString());
-		new MergeSample(userCmdList, tokenCmdList);
+		new Translate(userCmdList, tokenCmdList);
 		System.out.println();
 		System.out.println("NewUserList : " + userCmdList.toString());
 		System.out.println("NewTokenList : " + tokenCmdList.toString());
@@ -34,7 +34,7 @@
 		tokenCmdList.add(new Rep_Cmd(REP.REP_INSERT_CMD, 1, 2, 0, 5, 5, "test3"));
 		tokenCmdList.add(new Rep_Cmd(REP.REP_INSERT_CMD, 1, 2, 0, 15, 5, "test4"));
 		System.out.println("TokenList : " + tokenCmdList.toString());
-		new MergeSample(userCmdList, tokenCmdList);
+		new Translate(userCmdList, tokenCmdList);
 		System.out.println();
 		System.out.println("NewUserList : " + userCmdList.toString());
 		System.out.println("NewTokenList : " + tokenCmdList.toString());
@@ -48,7 +48,7 @@
 		System.out.println("UserList : " + userCmdList.toString());
 		tokenCmdList.add(new Rep_Cmd(REP.REP_INSERT_CMD, 1, 2, 0, 10, 5, "test3"));
 		System.out.println("TokenList : " + tokenCmdList.toString());
-		new MergeSample(userCmdList, tokenCmdList);
+		new Translate(userCmdList, tokenCmdList);
 		System.out.println();
 		System.out.println("NewUserList : " + userCmdList.toString());
 		System.out.println("NewTokenList : " + tokenCmdList.toString());
@@ -62,7 +62,7 @@
 		System.out.println("UserList : " + userCmdList.toString());
 		tokenCmdList.add(new Rep_Cmd(REP.REP_INSERT_CMD, 1, 2, 0, 10, 5, "test3"));
 		System.out.println("TokenList : " + tokenCmdList.toString());
-		new MergeSample(userCmdList, tokenCmdList);
+		new Translate(userCmdList, tokenCmdList);
 		System.out.println();
 		System.out.println("NewUserList : " + userCmdList.toString());
 		System.out.println("NewTokenList : " + tokenCmdList.toString());
@@ -76,7 +76,7 @@
 		System.out.println("UserList : " + userCmdList.toString());
 		tokenCmdList.add(new Rep_Cmd(REP.REP_REPLACE_CMD, 1, 2, 0, 10, 5, "test3"));
 		System.out.println("TokenList : " + tokenCmdList.toString());
-		new MergeSample(userCmdList, tokenCmdList);
+		new Translate(userCmdList, tokenCmdList);
 		System.out.println();
 		System.out.println("NewUserList : " + userCmdList.toString());
 		System.out.println("NewTokenList : " + tokenCmdList.toString());
--- a/src/sample/merge/MergeSample.java	Tue Oct 31 19:01:04 2006 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,98 +0,0 @@
-package sample.merge;
-
-import java.util.Iterator;
-import java.util.List;
-
-import remoteeditor.network.REP;
-
-public class MergeSample {
-	List <Rep_Cmd> userList;
-	List <Rep_Cmd> tokenList;
-	private int REP_IGNORE = -1;
-	public MergeSample(List<Rep_Cmd> userList, List<Rep_Cmd> tokenList){
-		this.userList = userList;
-		this.tokenList = tokenList;
-		merge();
-	}
-
-
-	void merge(){
-		Rep_Cmd h_pricmd;
-		Rep_Cmd l_pricmd;
-//		Iterator userListIterator = userList.iterator();
-//		while(userListIterator.hasNext()){
-		for(Rep_Cmd userCmd:userList){
-			//Iterator tokenListIterator = tokenList.iterator();
-			//Rep_Cmd userCmd = (Rep_Cmd)userListIterator.next();
-			if(userCmd.stat == REP_IGNORE) continue;     /* 削除される(予定)のREPコマンドの比較は無視 */
-			//while(tokenListIterator.hasNext()){
-			for(Rep_Cmd tokenCmd:tokenList){
-//				Rep_Cmd tokenCmd =(Rep_Cmd)tokenListIterator.next();
-				if(tokenCmd.stat == REP_IGNORE) continue;     /* 削除される(予定)のREPコマンドの比較は無視 */
-				if(userCmd.stat == REP_IGNORE) break;
-				if(userCmd.lineno < tokenCmd.lineno) {     /* UsersLineNumber < TokensLineNumber */
-					if(userCmd.cmd == REP.REP_INSERT_CMD){
-						tokenCmd.lineno++;
-					}else if(userCmd.cmd == REP.REP_DELETE_CMD){
-						tokenCmd.lineno--;
-					}
-				}else if(userCmd.lineno > tokenCmd.lineno){     /* UsersLineNumber > TokensLineNumber */
-					if(tokenCmd.cmd == REP.REP_INSERT_CMD){
-						userCmd.lineno++;
-					}else if(tokenCmd.cmd == REP.REP_DELETE_CMD){
-						userCmd.lineno--;
-					}
-				}else if(userCmd.lineno == tokenCmd.lineno){     /* UsersLineNumber == TokensLineNumber */
-					/*
-	                 * 行番号が重なるとREPコマンドの競合が起こるので、
-	                 * どちらかが譲らないといけない。
-	                 * uid が小さい方を優先(h_pricmdに)し、
-	                 * uid が大きい方(l_pricmd)を変更する。
-	                 */
-					if(userCmd.eid < tokenCmd.eid){
-						h_pricmd = userCmd;
-						l_pricmd = tokenCmd;
-					}else {
-						h_pricmd = tokenCmd;
-						l_pricmd = userCmd;
-					}
-					if(h_pricmd.cmd == REP.REP_INSERT_CMD){
-						l_pricmd.lineno++;
-					}else if(l_pricmd.cmd == REP.REP_REPLACE_CMD){
-						if(l_pricmd.cmd == REP.REP_INSERT_CMD){
-	                        /* h_pricmd が優先され,l_pricmd は削除(無視に)する */
-							l_pricmd.stat = REP_IGNORE;
-						}else if(l_pricmd.cmd == REP.REP_DELETE_CMD){
-							/*
-	                         * l_pricmd 側ではすでにdeleteされているので、
-	                         * h_pricmd を REP_REPLACE_CMD -> REP_INSERT_CMD へ変更。
-	                         */
-							h_pricmd.cmd = REP.REP_INSERT_CMD;
-							l_pricmd.stat = REP_IGNORE;
-						}
-					}else if(h_pricmd.cmd == REP.REP_DELETE_CMD){
-	                    if (l_pricmd.cmd == REP.REP_INSERT_CMD) {
-	                        h_pricmd.lineno++;
-	                    } else if(l_pricmd.cmd == REP.REP_REPLACE_CMD){
-	                        /*
-	                         * h_pricmd 側ではすでにdeleteされているので、
-	                         * l_pricmd 側を REP_REPLACE_CMD -> REP_INSERT_CMD へ変更。
-	                         */
-	                        l_pricmd.cmd = REP.REP_INSERT_CMD;
-	                        h_pricmd.stat= REP_IGNORE;
-	                    } else {  /* l_pricmd->cmd == REP_DELETE_LINE_CMD */
-	                        /*
-	                         * 相手と削除する行が重なるので、
-	                         * 両方のコマンドを無視にする。
-	                         * 相手先ではすでにこの行は削除されている。
-	                         */
-	                        h_pricmd.stat = REP_IGNORE;
-	                        l_pricmd.stat = REP_IGNORE;
-	                        break;
-	                    }
-					}
-				}
-			}
-		}
-	}
-}
--- a/src/sample/merge/Rep_Cmd.java	Tue Oct 31 19:01:04 2006 +0900
+++ b/src/sample/merge/Rep_Cmd.java	Tue Nov 14 03:59:38 2006 +0900
@@ -27,7 +27,7 @@
 		cmdString[6] = "REP_INSERT_CMD";
 		cmdString[9] = "REP_DELETE_CMD";
 		cmdString[13] = "REP_REPLACE_CMD";
-		String repCmdString = new String(cmdString[cmd] + "," + sid + "," + eid + "," + seq + "," + lineno + "," + textsiz + "," + string);
+		String repCmdString = new String(cmd + "," + sid + "," + eid + "," + seq + "," + lineno + "," + textsiz + "," + string);
 		return repCmdString;
 		
 	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/sample/merge/Translate.java	Tue Nov 14 03:59:38 2006 +0900
@@ -0,0 +1,98 @@
+package sample.merge;
+
+import java.util.List;
+
+import remoteeditor.network.REP;
+
+public class Translate {
+	List <Rep_Cmd> userList;
+	List <Rep_Cmd> tokenList;
+	private int REP_IGNORE = -1;
+	public Translate(List<Rep_Cmd> userList, List<Rep_Cmd> tokenList){
+		this.userList = userList;
+		this.tokenList = tokenList;
+		merge();
+	}
+
+
+	void merge(){
+		Rep_Cmd h_pricmd;
+		Rep_Cmd l_pricmd;
+//		Iterator userListIterator = userList.iterator();
+//		while(userListIterator.hasNext()){
+		for(Rep_Cmd userCmd:userList){
+			//Iterator tokenListIterator = tokenList.iterator();
+			//Rep_Cmd userCmd = (Rep_Cmd)userListIterator.next();
+			if(userCmd.stat == REP_IGNORE) continue;     /* 削除される(予定)のREPコマンドの比較は無視 */
+			//while(tokenListIterator.hasNext()){
+			for(Rep_Cmd tokenCmd:tokenList){
+				if(userCmd.toString().equals(tokenCmd.toString())) tokenList.remove(tokenCmd); 
+//				Rep_Cmd tokenCmd =(Rep_Cmd)tokenListIterator.next();
+				if(tokenCmd.stat == REP_IGNORE) continue;     /* 削除される(予定)のREPコマンドの比較は無視 */
+				if(userCmd.stat == REP_IGNORE) break;
+				if(userCmd.lineno < tokenCmd.lineno) {     /* UsersLineNumber < TokensLineNumber */
+					if(userCmd.cmd == REP.REP_INSERT_CMD){
+						tokenCmd.lineno++;
+					}else if(userCmd.cmd == REP.REP_DELETE_CMD){
+						tokenCmd.lineno--;
+					}
+				}else if(userCmd.lineno > tokenCmd.lineno){     /* UsersLineNumber > TokensLineNumber */
+					if(tokenCmd.cmd == REP.REP_INSERT_CMD){
+						userCmd.lineno++;
+					}else if(tokenCmd.cmd == REP.REP_DELETE_CMD){
+						userCmd.lineno--;
+					}
+				}else if(userCmd.lineno == tokenCmd.lineno){     /* UsersLineNumber == TokensLineNumber */
+					/*
+	                 * 行番号が重なるとREPコマンドの競合が起こるので、
+	                 * どちらかが譲らないといけない。
+	                 * uid が小さい方を優先(h_pricmdに)し、
+	                 * uid が大きい方(l_pricmd)を変更する。
+	                 */
+					if(userCmd.eid < tokenCmd.eid){
+						h_pricmd = userCmd;
+						l_pricmd = tokenCmd;
+					}else {
+						h_pricmd = tokenCmd;
+						l_pricmd = userCmd;
+					}
+					if(h_pricmd.cmd == REP.REP_INSERT_CMD){
+						l_pricmd.lineno++;
+					}else if(l_pricmd.cmd == REP.REP_REPLACE_CMD){
+						if(l_pricmd.cmd == REP.REP_INSERT_CMD){
+	                        /* h_pricmd が優先され,l_pricmd は削除(無視に)する */
+							l_pricmd.stat = REP_IGNORE;
+						}else if(l_pricmd.cmd == REP.REP_DELETE_CMD){
+							/*
+	                         * l_pricmd 側ではすでにdeleteされているので、
+	                         * h_pricmd を REP_REPLACE_CMD -> REP_INSERT_CMD へ変更。
+	                         */
+							h_pricmd.cmd = REP.REP_INSERT_CMD;
+							l_pricmd.stat = REP_IGNORE;
+						}
+					}else if(h_pricmd.cmd == REP.REP_DELETE_CMD){
+	                    if (l_pricmd.cmd == REP.REP_INSERT_CMD) {
+	                        h_pricmd.lineno++;
+	                    } else if(l_pricmd.cmd == REP.REP_REPLACE_CMD){
+	                        /*
+	                         * h_pricmd 側ではすでにdeleteされているので、
+	                         * l_pricmd 側を REP_REPLACE_CMD -> REP_INSERT_CMD へ変更。
+	                         */
+	                        l_pricmd.cmd = REP.REP_INSERT_CMD;
+	                        h_pricmd.stat= REP_IGNORE;
+	                    } else {  /* l_pricmd->cmd == REP_DELETE_LINE_CMD */
+	                        /*
+	                         * 相手と削除する行が重なるので、
+	                         * 両方のコマンドを無視にする。
+	                         * 相手先ではすでにこの行は削除されている。
+	                         */
+	                        h_pricmd.stat = REP_IGNORE;
+	                        l_pricmd.stat = REP_IGNORE;
+	                        break;
+	                    }
+					}
+				}
+			}
+		}
+	}
+}