16c07fd84SMasahiro Yamada // SPDX-License-Identifier: GPL-2.0-only 2*fbaf242cSMasahiro Yamada #include <list.h> 36c07fd84SMasahiro Yamada #include "expr.h" 46c07fd84SMasahiro Yamada #include "mnconf-common.h" 56c07fd84SMasahiro Yamada 66c07fd84SMasahiro Yamada int jump_key_char; 76c07fd84SMasahiro Yamada next_jump_key(int key)86c07fd84SMasahiro Yamadaint next_jump_key(int key) 96c07fd84SMasahiro Yamada { 106c07fd84SMasahiro Yamada if (key < '1' || key > '9') 116c07fd84SMasahiro Yamada return '1'; 126c07fd84SMasahiro Yamada 136c07fd84SMasahiro Yamada key++; 146c07fd84SMasahiro Yamada 156c07fd84SMasahiro Yamada if (key > '9') 166c07fd84SMasahiro Yamada key = '1'; 176c07fd84SMasahiro Yamada 186c07fd84SMasahiro Yamada return key; 196c07fd84SMasahiro Yamada } 206c07fd84SMasahiro Yamada handle_search_keys(int key,size_t start,size_t end,void * _data)216c07fd84SMasahiro Yamadaint handle_search_keys(int key, size_t start, size_t end, void *_data) 226c07fd84SMasahiro Yamada { 236c07fd84SMasahiro Yamada struct search_data *data = _data; 246c07fd84SMasahiro Yamada struct jump_key *pos; 256c07fd84SMasahiro Yamada int index = 0; 266c07fd84SMasahiro Yamada 276c07fd84SMasahiro Yamada if (key < '1' || key > '9') 286c07fd84SMasahiro Yamada return 0; 296c07fd84SMasahiro Yamada 306c07fd84SMasahiro Yamada list_for_each_entry(pos, data->head, entries) { 316c07fd84SMasahiro Yamada index = next_jump_key(index); 326c07fd84SMasahiro Yamada 336c07fd84SMasahiro Yamada if (pos->offset < start) 346c07fd84SMasahiro Yamada continue; 356c07fd84SMasahiro Yamada 366c07fd84SMasahiro Yamada if (pos->offset >= end) 376c07fd84SMasahiro Yamada break; 386c07fd84SMasahiro Yamada 396c07fd84SMasahiro Yamada if (key == index) { 406c07fd84SMasahiro Yamada data->target = pos->target; 416c07fd84SMasahiro Yamada return 1; 426c07fd84SMasahiro Yamada } 436c07fd84SMasahiro Yamada } 446c07fd84SMasahiro Yamada 456c07fd84SMasahiro Yamada return 0; 466c07fd84SMasahiro Yamada } 476c07fd84SMasahiro Yamada get_jump_key_char(void)486c07fd84SMasahiro Yamadaint get_jump_key_char(void) 496c07fd84SMasahiro Yamada { 506c07fd84SMasahiro Yamada jump_key_char = next_jump_key(jump_key_char); 516c07fd84SMasahiro Yamada 526c07fd84SMasahiro Yamada return jump_key_char; 536c07fd84SMasahiro Yamada } 54