|  | // SPDX-License-Identifier: GPL-2.0-only | 
|  | #include <list.h> | 
|  | #include "expr.h" | 
|  | #include "mnconf-common.h" | 
|  |  | 
|  | int jump_key_char; | 
|  |  | 
|  | int next_jump_key(int key) | 
|  | { | 
|  | if (key < '1' || key > '9') | 
|  | return '1'; | 
|  |  | 
|  | key++; | 
|  |  | 
|  | if (key > '9') | 
|  | key = '1'; | 
|  |  | 
|  | return key; | 
|  | } | 
|  |  | 
|  | int handle_search_keys(int key, size_t start, size_t end, void *_data) | 
|  | { | 
|  | struct search_data *data = _data; | 
|  | struct jump_key *pos; | 
|  | int index = 0; | 
|  |  | 
|  | if (key < '1' || key > '9') | 
|  | return 0; | 
|  |  | 
|  | list_for_each_entry(pos, data->head, entries) { | 
|  | index = next_jump_key(index); | 
|  |  | 
|  | if (pos->offset < start) | 
|  | continue; | 
|  |  | 
|  | if (pos->offset >= end) | 
|  | break; | 
|  |  | 
|  | if (key == index) { | 
|  | data->target = pos->target; | 
|  | return 1; | 
|  | } | 
|  | } | 
|  |  | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | int get_jump_key_char(void) | 
|  | { | 
|  | jump_key_char = next_jump_key(jump_key_char); | 
|  |  | 
|  | return jump_key_char; | 
|  | } |