diff --git a/src/uifc/uifc32.c b/src/uifc/uifc32.c index 0ea326efe7d58083f9a694681680ee532f3786d6..7d8964f0ae2846dbb9e2b3869ecddff1d7e2285d 100644 --- a/src/uifc/uifc32.c +++ b/src/uifc/uifc32.c @@ -1169,33 +1169,33 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar if(!(api->mode&UIFC_NOCTRL)) gotkey=CIO_KEY_HOME; break; - case CTRL_E: - if(!(api->mode&UIFC_NOCTRL)) - gotkey=CIO_KEY_END; - break; - case CTRL_U: + case CTRL_C: if(!(api->mode&UIFC_NOCTRL)) - gotkey=CIO_KEY_PPAGE; + gotkey=CIO_KEY_F(5); /* copy */ break; case CTRL_D: if(!(api->mode&UIFC_NOCTRL)) gotkey=CIO_KEY_NPAGE; break; - case CTRL_Z: + case CTRL_E: if(!(api->mode&UIFC_NOCTRL)) - gotkey=CIO_KEY_F(1); /* help */ + gotkey=CIO_KEY_END; break; - case CTRL_C: + case CTRL_U: if(!(api->mode&UIFC_NOCTRL)) - gotkey=CIO_KEY_F(5); /* copy */ + gotkey=CIO_KEY_PPAGE; + break; + case CTRL_V: + if(!(api->mode&UIFC_NOCTRL)) + gotkey=CIO_KEY_F(6); /* paste */ break; case CTRL_X: if(!(api->mode&UIFC_NOCTRL)) gotkey=CIO_KEY_SHIFT_DC; /* cut */ break; - case CTRL_V: + case CTRL_Z: if(!(api->mode&UIFC_NOCTRL)) - gotkey=CIO_KEY_F(6); /* paste */ + gotkey=CIO_KEY_F(1); /* help */ break; case CIO_KEY_ABORTED: gotkey=ESC; @@ -1711,6 +1711,81 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar FREE_AND_NULL(sav[api->savnum].buf); } return(-1); + case CTRL_F: /* find */ + if(/*!(api->mode&UIFC_NOCTRL)*/1) { // No no, *this* control key is fine! + if (api->input(WIN_MID|WIN_SAV, 0, 0, "Find", search, sizeof(search), 0) > 0) { + for (j = (*cur) + 1; j != *cur; j++, j = option[j] == NULL ? 0 : j) { /* a = search count */ + if (strcasestr(option[j], search) != NULL) { + // Copy/pasted from search above. + if(y+(j-(*cur))+2>height+top) { + (*cur)=j; + gotoxy(s_left+left+lbrdrwidth,s_top+top+tbrdrwidth); + textattr(lclr|(bclr<<4)); + putch(api->chars->up_arrow); /* put the up arrow */ + if((*cur)==opts-1) { + gotoxy(s_left+left+lbrdrwidth,s_top+top+height-bbrdrwidth-1); + putch(' '); /* delete the down arrow */ + } + for(i=((*cur)+vbrdrsize+1)-height,j=0;i<(*cur)+1;i++,j++) + uprintf(s_left+left+lbrdrwidth+2,s_top+top+tbrdrwidth+j + ,i==(*cur) ? lbclr + : lclr|(bclr<<4) + ,"%-*.*s",width-hbrdrsize-2,width-hbrdrsize-2,option[i]); + y=top+height-bbrdrwidth-1; + if(bar) + (*bar)=optheight-vbrdrsize-1; + break; + } + if(y-((*cur)-j)<top+tbrdrwidth) { + (*cur)=j; + gotoxy(s_left+left+lbrdrwidth,s_top+top+tbrdrwidth); + textattr(lclr|(bclr<<4)); + if(!(*cur)) + putch(' '); /* Delete the up arrow */ + gotoxy(s_left+left+lbrdrwidth,s_top+top+height-bbrdrwidth-1); + putch(api->chars->down_arrow); /* put the down arrow */ + uprintf(s_left+left+lbrdrwidth+2,s_top+top+tbrdrwidth + ,lbclr + ,"%-*.*s",width-hbrdrsize-2,width-hbrdrsize-2,option[(*cur)]); + for(i=1;i<height-vbrdrsize;i++) /* re-display options */ + uprintf(s_left+left+lbrdrwidth+2,s_top+top+tbrdrwidth+i + ,lclr|(bclr<<4) + ,"%-*.*s",width-hbrdrsize-2,width-hbrdrsize-2 + ,option[(*cur)+i]); + y=top+tbrdrwidth; + if(bar) + (*bar)=0; + break; + } + vmem_gettext(s_left+lbrdrwidth+2+left,s_top+y + ,s_left+left+width-rbrdrwidth-1,s_top+y,line); + for(i=0; i<width; i++) + set_vmem_attr(&line[i], lclr|(bclr<<4)); + vmem_puttext(s_left+lbrdrwidth+2+left,s_top+y + ,s_left+left+width-rbrdrwidth-1,s_top+y,line); + if((*cur)>j) + y-=(*cur)-j; + else + y+=j-(*cur); + if(bar) { + if((*cur)>j) + (*bar)-=(*cur)-j; + else + (*bar)+=j-(*cur); + } + (*cur)=j; + vmem_gettext(s_left+lbrdrwidth+2+left,s_top+y + ,s_left+left+width-rbrdrwidth-1,s_top+y,line); + for(i=0; i < width; i++) + set_vmem_attr(&line[i], lbclr); + vmem_puttext(s_left+lbrdrwidth+2+left,s_top+y + ,s_left+left+width-rbrdrwidth-1,s_top+y,line); + break; + } + } + } + } + break; default: if(mode&WIN_EXTKEYS) return(-2-gotkey);