--- xterm-113/button.c	Wed Jul 21 06:14:02 1999
+++ xterm/button.c	Thu Aug 19 18:13:24 1999
@@ -2007,3 +2007,69 @@
 	ev_time = event->xbutton.time;
     DoSecureKeyboard (ev_time);
 }
+
+
+static char *lastsearchstr = NULL;
+static int lastsearchrow = -1;
+void SearchScrollback(const char *str)
+{
+#define ALL_BUF_CHARS(screen, row) BUF_CHARS(screen->allbuf, row)
+
+    register TScreen *screen = &term->screen;
+    int len, last, row, dir;
+
+    switch (*str) {
+	case '0': /* fill buffer */
+	    free(lastsearchstr);
+	    lastsearchstr = strdup(str+1);
+	    return;
+	case '1': /* reset pos */
+	    lastsearchrow = -1;
+	    return;
+	case '2': /* search up */
+	    dir = -1;
+	    if (lastsearchrow == -1)
+		lastsearchrow = screen->savelines + screen->max_row;
+	    last = screen->savelines - screen->savedlines;
+	    break;
+	case '3': /* search down */
+	    dir = 1;
+	    if (lastsearchrow == -1)
+		lastsearchrow = screen->savelines - screen->savedlines;
+	    last = screen->savelines + screen->max_row;
+	    break;
+	default:
+	    return;
+    }
+
+    if (lastsearchstr == NULL)
+	return;
+
+    str = lastsearchstr;
+    row = lastsearchrow + dir;
+    len = strlen(str);
+
+    while (row != last) {
+	Char *p, *end, *chars = ALL_BUF_CHARS(screen, row);
+
+	end = chars + screen->max_col - len;
+	p = chars;
+
+	while (p < end) {
+	    if (*p == str[0]) {
+		if (strncmp(p, str, len) == 0) {
+		    WindowScroll(screen, row - screen->savelines);
+		    lastsearchrow = row;
+		    row = -1;
+		    break;
+		}
+	    }
+	    p++;
+	}
+	if (row < 0)
+	    break;
+	row += dir;
+    }
+    if (row >= 0)
+	VisualBell();
+}
--- xterm-113/misc.c	Sun Aug 15 21:27:21 1999
+++ xterm/misc.c	Thu Aug 19 14:38:11 1999
@@ -1124,6 +1124,9 @@
 		ChangeAnsiColorRequest(term, buf, final);
 		break;
 #endif
+	case 5:
+		SearchScrollback(buf);
+		break;
 	case 10:	case 11:	case 12:
 	case 13:	case 14:	case 15:
 	case 16:	case 17:
--- xterm-113/xterm.h	Sat Jul 24 08:28:13 1999
+++ xterm/xterm.h	Thu Aug 19 14:38:48 1999
@@ -369,6 +369,7 @@
 extern void TrackMouse (int func, int startrow, int startcol, int firstrow, int lastrow);
 extern void TrackText (int frow, int fcol, int trow, int tcol);
 extern void ViButton                  PROTO_XT_ACTIONS_ARGS;
+extern void SearchScrollback (const char *buf);
 
 /* charproc.c */
 extern int VTInit (void);

