if ((s = M_ITEM (m, y)) == NULL || *s == M_CTRL) return;
MnuRoll (m, y, &m -> current, &m -> shift,
m -> textheight, m -> nitems,
MnuPoint, MnuDraw, MNU_DY);
if (m -> scrollok) MnuWinBar(m); /* сдвинуть scroll bar */
GetBack(m->savep, m->win); /* вернуть курсор в начало строки селекции,
* откуда он был сбит MnuWinBar-ом */
}
/* Выбор в меню без участия "мыши". */
int MnuUsualSelect (Menu *m, int block) {
int sel, snew, c, done = 0;
m -> key = (-1);
if( ! m->win ) return TOTAL_NOSEL;
if((sel = MnuThis (m)) < 0)
if((sel = MnuFirst (m)) < 0)
return TOTAL_NOSEL; /* в меню нельзя ничего выбрать */
RaiseWin (m->win); /* сделать окно верхним */
MnuPointAt (m, sel); /* проявить */
if(m->showMe) m->showMe(m); /* может быть изменить позицию ? */
for (;;) {
c = WinGetch (m->win);
INP:
if (m -> hitkeys && m -> handler) {
HandlerReply reply;
if (is_in (c, m -> hitkeys)) {
c = (*m -> handler) (m, c, &reply);
/* восстановить scroll bar */
MnuPointAt (m, m -> current);
switch (reply) {
case HANDLER_CONTINUE: continue;
case HANDLER_NEWCHAR: