--- 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);