Only in tcsh-6.10.00: Makefile.win32
Only in tcsh-6.10.00: config.h
diff -ur tcsh-6.10.00-old/ed.chared.c tcsh-6.10.00/ed.chared.c
--- tcsh-6.10.00-old/ed.chared.c	Sat Nov 11 17:03:34 2000
+++ tcsh-6.10.00/ed.chared.c	Sat Jun 16 16:02:35 2001
@@ -3903,6 +3903,20 @@
     return (CC_ERROR);
 }
 CCRETVAL
+e_undosify_next(c)
+    int c;
+{
+    USE(c);
+    return (CC_ERROR);
+}
+CCRETVAL
+e_undosify_prev(c)
+    int c;
+{
+    USE(c);
+    return (CC_ERROR);
+}
+CCRETVAL
 e_page_up(c)
     int c;
 {
diff -ur tcsh-6.10.00-old/ed.decls.h tcsh-6.10.00/ed.decls.h
--- tcsh-6.10.00-old/ed.decls.h	Sat Jul 15 15:58:50 2000
+++ tcsh-6.10.00/ed.decls.h	Sat Jun 16 16:02:49 2001
@@ -238,6 +238,8 @@
 extern  CCRETVAL	e_paste_from_clipboard	__P((int));
 extern  CCRETVAL	e_dosify_next		__P((int));
 extern  CCRETVAL	e_dosify_prev		__P((int));
+extern  CCRETVAL	e_undosify_next		__P((int));
+extern  CCRETVAL	e_undosify_prev		__P((int));
 extern  CCRETVAL	e_page_up			__P((int));
 extern  CCRETVAL	e_page_down			__P((int));
 
diff -ur tcsh-6.10.00-old/ed.defns.c tcsh-6.10.00/ed.defns.c
--- tcsh-6.10.00-old/ed.defns.c	Sat Nov 11 17:03:34 2000
+++ tcsh-6.10.00/ed.defns.c	Sat Jun 16 16:05:15 2001
@@ -281,8 +281,12 @@
 #define		F_PAGE_UP		117
 	e_page_down,
 #define		F_PAGE_DOWN		118
+        e_undosify_next,
+#define         F_UNDOSIFY_NEXT 119
+        e_undosify_prev,
+#define         F_UNDOSIFY_PREV 120
     0				/* DUMMY VALUE */
-#define		F_NUM_FNS	119
+#define		F_NUM_FNS	121
 
 };
 
@@ -1759,6 +1763,14 @@
     f->name = "e_page_down";
     f->func = F_PAGE_DOWN;
     f->desc = CSAVS(3, 118, "(win32 only)Page visible console window down");
+    f++;
+    f->name = "e_undosify_next";
+    f->func = F_UNDOSIFY_NEXT;
+    f->desc = CSAVS(3, 119, "(win32 only)Convert each '\\' in next word to '/'");
+    f++;
+    f->name = "e_undosify_prev";
+    f->func = F_UNDOSIFY_PREV;
+    f->desc = CSAVS(3, 120, "(win32 only)Convert each '\\' in previous word to '/'");
 
 
     f++;
diff -ur tcsh-6.10.00-old/sh.c tcsh-6.10.00/sh.c
--- tcsh-6.10.00-old/sh.c	Sat Nov 11 17:03:36 2000
+++ tcsh-6.10.00/sh.c	Sat Jun 16 15:48:51 2001
@@ -160,7 +160,7 @@
 };
 
 static	int		  srccat	__P((Char *, Char *));
-static	int		  srcfile	__P((char *, bool, int, Char **));
+        int		  srcfile	__P((char *, bool, int, Char **));
 static	sigret_t	  phup		__P((int));
 static	void		  srcunit	__P((int, bool, int, Char **));
 static	void		  mailchk	__P((void));
@@ -1426,7 +1426,7 @@
 /*
  * Source to a file putting the file descriptor in a safe place (> 2).
  */
-static int
+int
 srcfile(f, onlyown, flag, av)
     char   *f;
     bool    onlyown;
Only in tcsh-6.10.00: tcsh.exe
Only in tcsh-6.10.00/win32: clip.bak
diff -ur tcsh-6.10.00-old/win32/clip.c tcsh-6.10.00/win32/clip.c
--- tcsh-6.10.00-old/win32/clip.c	Tue Nov 14 21:52:56 2000
+++ tcsh-6.10.00/win32/clip.c	Mon Jun 18 11:07:07 2001
@@ -450,30 +450,78 @@
 e_dosify_next(c)
     int c;
 {
-    register Char *cp, *p, *kp;
+    register Char *cp, *p, *kp, *start;
+    register int insideQuotes = 0;
+    register int needsQuotes = 0;
+    register int backslashed = 0;
 
     USE(c);
-    if (Cursor == LastChar)
-	return(CC_ERROR);
-    /* else */
-
-	cp = Cursor;
-	while(  cp < LastChar) {
-		if ( (*cp & CHAR == ' ') && (cp[-1] & CHAR != '\\') )
-			break;
-		cp++;
-	}
-
-    for (p = Cursor, kp = KillBuf; p < cp; p++)	{/* save the text */
-	if ( ( *p & CHAR ) == '/') {
-	    *kp++ = '\\';
-	    *kp++ = '\\';
-	}
-	else
-	    *kp++ = *p;
+
+    start = InputBuf;
+    for ( cp = InputBuf; cp < LastChar; cp++ ) {
+        if ( backslashed ) {
+            backslashed = 0;
+            continue;
+        }
+        if ( (*cp & CHAR) == '\"' ) {
+            insideQuotes = 1-insideQuotes;
+            needsQuotes = 1;
+            continue;
+        }
+        if ( insideQuotes )
+            continue;
+        if ( (*cp & CHAR) == '\\' ) {
+            backslashed = 1;
+            needsQuotes = 1;
+            continue;
+        }
+        if ( (*cp & CHAR) == ' ' ) {
+            if ( cp >= Cursor )
+                break;
+
+            start = cp+1;
+            needsQuotes = 0;
+        }
     }
+    /* catch incorrect number of quotes or backslashes */
+    if ( insideQuotes || backslashed )
+        return(CC_ERROR);
+
+    kp = KillBuf;
+    if ( needsQuotes )
+        *kp++ = '\"';
+
+    for (p = start; p < cp; p++ ) {
+        if ( (*p & CHAR) == '/' ) {
+            *kp++ = '\\';
+            backslashed = 0;
+            continue;
+        }
+        if ( backslashed ) {
+            *kp++ = *p;
+            backslashed = 0;
+            continue;
+        }
+        if ( (*p & CHAR) == '\"' ) {
+            insideQuotes = 1-insideQuotes;
+            continue;
+        }
+        if ( insideQuotes ) {
+            *kp++ = *p;
+            continue;
+        }
+        if ( (*p & CHAR) == '\\' ) {
+            backslashed = 1;
+            continue;
+        }
+        *kp++ = *p;
+    }
+    if ( needsQuotes )
+        *kp++ = '\"';
+
     LastKill = kp;
 
+    Cursor = start;
     c_delafter((int)(cp - Cursor));	/* delete after dot */
     if (Cursor > LastChar)
 	Cursor = LastChar;	/* bounds check */
@@ -484,39 +532,208 @@
 e_dosify_prev(c)
     int c;
 {
-    register Char *cp, *p, *kp;
+    register Char *cp, *p, *kp, *start;
+    register int insideQuotes = 0;
+    register int needsQuotes = 0;
+    register int backslashed = 0;
+
+    USE(c);
+
+    start = InputBuf;
+    for ( cp = InputBuf; cp < LastChar; cp++ ) {
+        if ( backslashed ) {
+            backslashed = 0;
+            continue;
+        }
+        if ( (*cp & CHAR) == '\"' ) {
+            insideQuotes = 1-insideQuotes;
+            needsQuotes = 1;
+            continue;
+        }
+        if ( insideQuotes )
+            continue;
+        if ( (*cp & CHAR) == '\\' ) {
+            backslashed = 1;
+            needsQuotes = 1;
+            continue;
+        }
+        if ( (*cp & CHAR) == ' ' ) {
+            while( (*cp & CHAR) == ' ' )
+                cp++;
+            if ( cp >= (Cursor-1) )
+                break;
+
+            start = cp+1;
+            needsQuotes = 0;
+        }
+    }
+    /* catch incorrect number of quotes or backslashes */
+    if ( insideQuotes || backslashed )
+        return(CC_ERROR);
+
+    /* trim trailing space */
+    while( (cp > InputBuf) && ((cp[-1] & CHAR) == ' ') )
+        cp--;
+
+    kp = KillBuf;
+    if ( needsQuotes )
+        *kp++ = '\"';
+
+    for (p = start; p < cp; p++ ) {
+        if ( (*p & CHAR) == '/' ) {
+            *kp++ = '\\';
+            backslashed = 0;
+            continue;
+        }
+        if ( backslashed ) {
+            *kp++ = *p;
+            backslashed = 0;
+            continue;
+        }
+        if ( (*p & CHAR) == '\"' ) {
+            insideQuotes = 1-insideQuotes;
+            continue;
+        }
+        if ( insideQuotes ) {
+            *kp++ = *p;
+            continue;
+        }
+        if ( (*p & CHAR) == '\\' ) {
+            backslashed = 1;
+            continue;
+        }
+        *kp++ = *p;
+    }
+    if ( needsQuotes )
+        *kp++ = '\"';
+
+    LastKill = kp;
+
+    Cursor = start;
+    c_delafter((int)(cp - Cursor));	/* delete after dot */
+    if (Cursor > LastChar)
+	Cursor = LastChar;	/* bounds check */
+    return (e_yank_kill(c));
+}
+CCRETVAL
+e_undosify_next(c)
+    int c;
+{
+    register Char *cp, *p, *kp, *start;
+    register int insideQuotes = 0;
+    register int needsQuotes = 0;
+
+    USE(c);
+
+    start = InputBuf;
+    for ( cp = InputBuf; cp < LastChar; cp++ ) {
+        if ( (*cp & CHAR) == '\"' ) {
+            insideQuotes = 1-insideQuotes;
+            needsQuotes = 1;
+            continue;
+        }
+        if ( insideQuotes )
+            continue;
+        if ( (*cp & CHAR) == ' ' ) {
+            if ( cp >= Cursor )
+                break;
+
+            start = cp+1;
+            needsQuotes = 0;
+        }
+    }
+    /* catch incorrect number of quotes */
+    if ( insideQuotes )
+        return(CC_ERROR);
+
+    kp = KillBuf;
+    if ( needsQuotes )
+        *kp++ = '\"';
+
+    for (p = start; p < cp; p++ ) {
+        if ( (*p & CHAR) == '\"' )
+            continue;
+        if ( (*p & CHAR) == '\\' ) {
+            if ( (p[1] & CHAR) == '\\' )
+                continue;
+            *kp++ = '/';
+            continue;
+        }
+        *kp++ = *p;
+    }
+    if ( needsQuotes )
+        *kp++ = '\"';
+
+    LastKill = kp;
+
+    Cursor = start;
+    c_delafter((int)(cp - Cursor));	/* delete after dot */
+    if (Cursor > LastChar)
+	Cursor = LastChar;	/* bounds check */
+    return (e_yank_kill(c));
+}
+CCRETVAL
+e_undosify_prev(c)
+    int c;
+{
+    register Char *cp, *p, *kp, *start;
+    register int insideQuotes = 0;
+    register int needsQuotes = 0;
 
     USE(c);
-    if (Cursor == InputBuf)
-	return(CC_ERROR);
-    /* else */
-
-    cp = Cursor-1;
-    /* Skip trailing spaces */
-    while ((cp > InputBuf) && ( (*cp & CHAR) == ' '))
-    	cp--;
-
-    while (cp > InputBuf) {
-	if ( ((*cp & CHAR) == ' ') && ((cp[-1] & CHAR) != '\\') )
-	    break;
-	cp--;
-    }
-
-    for (p = cp, kp = KillBuf; p < Cursor; p++)	{/* save the text */
-	if ( ( *p & CHAR ) == '/') {
-	    *kp++ = '\\';
-	    *kp++ = '\\';
-	}
-	else
-	    *kp++ = *p;
+
+    start = InputBuf;
+    for ( cp = InputBuf; cp < LastChar; cp++ ) {
+        if ( (*cp & CHAR) == '\"' ) {
+            insideQuotes = 1-insideQuotes;
+            needsQuotes = 1;
+            continue;
+        }
+        if ( insideQuotes )
+            continue;
+        if ( (*cp & CHAR) == ' ' ) {
+            while( (*cp & CHAR) == ' ' )
+                cp++;
+            if ( cp >= (Cursor-1) )
+                break;
+
+            start = cp+1;
+            needsQuotes = 0;
+        }
+    }
+    /* catch incorrect number of quotes or backslashes */
+    if ( insideQuotes )
+        return(CC_ERROR);
+
+    /* trim trailing space */
+    while( (cp > InputBuf) && ((cp[-1] & CHAR) == ' ') )
+        cp--;
+
+    kp = KillBuf;
+    if ( needsQuotes )
+        *kp++ = '\"';
+
+    for (p = start; p < cp; p++ ) {
+        if ( (*p & CHAR) == '\"' )
+            continue;
+        if ( (*p & CHAR) == '\\' ) {
+            if ( (p[1] & CHAR) == '\\' )
+                continue;
+            *kp++ = '/';
+            continue;
+        }
+        *kp++ = *p;
     }
+    if ( needsQuotes )
+        *kp++ = '\"';
+
     LastKill = kp;
 
-    c_delbefore((int)(Cursor - cp));	/* delete before dot */
-    Cursor = cp;
-    if (Cursor < InputBuf)
-	Cursor = InputBuf;	/* bounds check */
-    return(e_yank_kill(c));
+    Cursor = start;
+    c_delafter((int)(cp - Cursor));	/* delete after dot */
+    if (Cursor > LastChar)
+	Cursor = LastChar;	/* bounds check */
+    return (e_yank_kill(c));
 }
 extern void ConsolePageUpOrDown(BOOL);
 CCRETVAL
