diff --git a/src/uifc/uifc32.c b/src/uifc/uifc32.c index 2e75521114200aa2c46deaada96c8e9bfb33dd9c..7e63b28b53fd173d916cfdc3de1624c987e55f64 100644 --- a/src/uifc/uifc32.c +++ b/src/uifc/uifc32.c @@ -787,37 +787,58 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar ,s_left+left+width-2,s_top+y,line); } break; -#if 0 - case KEY_PPAGE; /* PgUp */ - case KEY_NPAGE; /* PgDn */ - if(!opts || (*cur)==(opts-1)) + case KEY_PPAGE: /* PgUp */ + if(!opts) break; - (*cur)+=(height-4); - if((*cur)>(opts-1)) - (*cur)=(opts-1); - - gettext(s_left+3+left,s_top+y - ,s_left+left+width-2,s_top+y,line); - for(i=1;i<width*2;i+=2) - line[i]=lclr|(bclr<<4); - puttext(s_left+3+left,s_top+y - ,s_left+left+width-2,s_top+y,line); - - for(i=(opts+4)-height,j=0;i<opts;i++,j++) + *cur -= (height-5); + if(*cur<0) + *cur = 0; + if(bar) + *bar=0; + y=s_top+top; + gotoxy(s_left+left+1,s_top+top+3); + textattr(lclr|(bclr<<4)); + if(*cur && opts>height-3) /* Scroll mode */ + putch(30); /* put the up arrow */ + else + putch(' '); /* delete the up arrow */ + gotoxy(s_left+left+1,s_top+top+height-2); + if(opts > height-3 && *cur + height - 4 < opts) + putch(31); /* put the down arrow */ + else + putch(' '); /* delete the down arrow */ + for(i=*cur,j=0;i<=*cur-5+height;i++,j++) uprintf(s_left+left+3,s_top+top+3+j - ,i==(*cur) lbclr : lclr|(bclr<<4) + ,i==*cur ? lbclr + : lclr|(bclr<<4) ,"%-*.*s",width-4,width-4,option[i]); - y=top+height-2; + break; + case KEY_NPAGE: /* PgDn */ + if(!opts) + break; + *cur += (height-5); + if(*cur>opts-1) + *cur = opts-1; if(bar) - (*bar)=height-5; - gettext(s_left+3+left,s_top+y - ,s_left+left+width-2,s_top+y,line); - for(i=1;i<148;i+=2) - line[i]=lbclr; - puttext(s_left+3+left,s_top+y - ,s_left+left+width-2,s_top+y,line); + *bar = height-5; + y=height-5+s_top+top; + gotoxy(s_left+left+1,s_top+top+3); + textattr(lclr|(bclr<<4)); + if(*cur>height-5) /* Scroll mode */ + putch(30); /* put the up arrow */ + else + putch(' '); /* delete the up arrow */ + gotoxy(s_left+left+1,s_top+top+height-2); + if(*cur < opts-1) + putch(31); /* put the down arrow */ + else + putch(' '); /* delete the down arrow */ + for(i=*cur+5-height,j=0;i<=*cur;i++,j++) + uprintf(s_left+left+3,s_top+top+3+j + ,i==*cur ? lbclr + : lclr|(bclr<<4) + ,"%-*.*s",width-4,width-4,option[i]); break; -#endif case KEY_END: /* end */ if(!opts) break; @@ -889,7 +910,7 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar if(bar) { /* gotoxy(1,1); cprintf("bar=%08lX ",bar); */ (*bar)=0; - } + } } else { (*cur)++; @@ -897,7 +918,7 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar if(bar && (*bar)<height-5) { /* gotoxy(1,1); cprintf("bar=%08lX ",bar); */ (*bar)++; - } + } } if(y==top+height-1) { /* scroll */ if(*cur==opts-1) {