Implements exclude range.
If range begins with "x", instead show the range selected, show all except the range.
We can see it as an exclude.
"x" in begin of a range, can be used on --files, --lines and --hunks options.

Example :
    cat p1.patch | filterdiff --files x3,5

diff --git a/doc/patchutils.xml b/doc/patchutils.xml
index b07136b..b6fec41 100644
--- a/doc/patchutils.xml
+++ b/doc/patchutils.xml
@@ -770,7 +770,8 @@
 	        from 1, and the range is a comma-separated list of
 	        numbers or <quote>first-last</quote> spans; either the
 	        first or the last in the span may be omitted to
-	        indicate no limit in that direction.</para>
+	        indicate no limit in that direction. If range begins with "x",
+ 	        instead show the range selected, show all except the range.</para>
 	    </listitem>
 	  </varlistentry>

@@ -783,7 +784,8 @@
 	        from 1, and the range is a comma-separated list of
 	        numbers or <quote>first-last</quote> spans; either the
 	        first or the last in the span may be omitted to
-	        indicate no limit in that direction.</para>
+	        indicate no limit in that direction. If range begins with "x",
+ 	        instead show the range selected, show all except the range.</para>
 	    </listitem>
 	  </varlistentry>

@@ -797,7 +799,8 @@
 	        and the range is a comma-separated list of numbers or
 	        <quote>first-last</quote> spans; either the first or
 	        the last in the span may be omitted to indicate no
-	        limit in that direction.</para>
+	        limit in that direction. If range begins with "x",
+ 	        instead show the range selected, show all except the range.</para>
 	    </listitem>
 	  </varlistentry>

@@ -1240,7 +1243,8 @@ patch.file]]></screen></para>
 	        from 1, and the range is a comma-separated list of
 	        numbers or <quote>first-last</quote> spans; either the
 	        first or the last in the span may be omitted to
-	        indicate no limit in that direction.</para>
+	        indicate no limit in that direction. If range begins with "x",
+	        instead show the range selected, show all except the range.</para>
 	    </listitem>
 	  </varlistentry>

@@ -1253,7 +1257,8 @@ patch.file]]></screen></para>
 	        from 1, and the range is a comma-separated list of
 	        numbers or <quote>first-last</quote> spans; either the
 	        first or the last in the span may be omitted to
-	        indicate no limit in that direction.</para>
+	        indicate no limit in that direction. If range begins with "x",
+	        instead show the range selected, show all except the range.</para>
 	    </listitem>
 	  </varlistentry>

@@ -1267,7 +1272,8 @@ patch.file]]></screen></para>
 	        and the range is a comma-separated list of numbers or
 	        <quote>first-last</quote> spans; either the first or
 	        the last in the span may be omitted to indicate no
-	        limit in that direction.</para>
+	        limit in that direction. If range begins with "x",
+	        instead show the range selected, show all except the range.</para>
 	    </listitem>
 	  </varlistentry>

@@ -1965,7 +1971,8 @@ done)]]></screen></para>
 	      from 1, and the range is a comma-separated list of
 	      numbers or <quote>first-last</quote> spans; either the
 	      first or the last in the span may be omitted to indicate
-	      no limit in that direction.</para>
+	      no limit in that direction. If range begins with "x",
+	      instead show the range selected, show all except the range.</para>
 	    </listitem>
 	  </varlistentry>

@@ -1978,7 +1985,8 @@ done)]]></screen></para>
 	        from 1, and the range is a comma-separated list of
 	        numbers or <quote>first-last</quote> spans; either the
 	        first or the last in the span may be omitted to
-	        indicate no limit in that direction.</para>
+	        indicate no limit in that direction. If range begins with "x",
+	        instead show the range selected, show all except the range. </para>
 	    </listitem>
 	  </varlistentry>

@@ -1992,7 +2000,8 @@ done)]]></screen></para>
 	        and the range is a comma-separated list of numbers or
 	        <quote>first-last</quote> spans; either the first or
 	        the last in the span may be omitted to indicate no
-	        limit in that direction.</para>
+	        limit in that direction. If range begins with "x",
+	        instead show the range selected, show all except the range.</para>
 	    </listitem>
 	  </varlistentry>

diff --git a/src/filterdiff.c b/src/filterdiff.c
index f879828..93f539d 100644
--- a/src/filterdiff.c
+++ b/src/filterdiff.c
@@ -68,6 +68,9 @@ static struct range *lines = NULL;
 static struct range *files = NULL;
 static enum line_numbering number_lines = None;
 static int number_files = 0;
+static int files_exclude = 0;
+static int lines_exclude = 0;
+static int hunks_exclude = 0;

 static int unzip = 0;
 static enum {
@@ -193,7 +196,9 @@ file_matches (void)
 			break;
 		}

-	if (files && !f)
+	if (files && !f && !files_exclude)
+		return 0;
+	if (files && f && files_exclude)
 		return 0;

 	return 1;
@@ -258,10 +263,16 @@ hunk_matches (unsigned long orig_offset, unsigned long orig_count,
 			break;
 		}

-	if (hunks && !h)
+	if (hunks && !h && !hunks_exclude)
+		return 0;
+
+	if (hunks && h && hunks_exclude)
+		return 0;
+
+	if (lines && !l && !lines_exclude)
 		return 0;

-	if (lines && !l)
+	if (lines && l && lines_exclude)
 		return 0;

 	return 1;
@@ -1051,10 +1062,10 @@ const char * syntax_str =
 "  -I FILE, --include-from-file=FILE\n"
 "            include only files that match any pattern in FILE\n"
 "  -# H, --hunks=H\n"
-"            include only hunks in range H\n"
-"  --lines=L include only hunks with (original) lines in range L\n"
+"            include only hunks in range H, if range begins with x show all excluding range H\n"
+"  --lines=L include only hunks with (original) lines in range L, if range begins with x show all excluding range L\n"
 "  -F F, --files=F\n"
-"            include only files in range F\n"
+"            include only files in range F, if range begins with x show all excluding range F\n"
 "  --annotate (filterdiff, grepdiff)\n"
 "            annotate each hunk with the filename and hunk number (filterdiff, grepdiff)\n"
 "  --as-numbered-lines=before|after (filterdiff, grepdiff)\n"
@@ -1409,6 +1420,10 @@ int main (int argc, char *argv[])
 		case '#':
 			if (hunks)
 				syntax (1);
+			if (*optarg == 'x') {
+				hunks_exclude = 1;
+				optarg = optarg + 1;
+			}
 			parse_range (&hunks, optarg);
 			break;
 		case 'H':
@@ -1424,11 +1439,19 @@ int main (int argc, char *argv[])
 		case 1000 + ':':
 			if (lines)
 				syntax (1);
+			if (*optarg == 'x') {
+				lines_exclude = 1;
+				optarg = optarg + 1;
+			}
 			parse_range (&lines, optarg);
 			break;
 		case 'F':
 			if (files)
 				syntax (1);
+			if (*optarg == 'x') {
+				files_exclude = 1;
+				optarg = optarg + 1;
+			}
 			parse_range (&files, optarg);
 			break;
 		case 1000 + 'L':