xref: /linux/scripts/kconfig/mnconf-common.c (revision 06f609b3119876b42f19fdb690b10896d3c648e6)
1 // SPDX-License-Identifier: GPL-2.0-only
2 #include "expr.h"
3 #include "list.h"
4 #include "mnconf-common.h"
5 
6 int jump_key_char;
7 
8 int next_jump_key(int key)
9 {
10 	if (key < '1' || key > '9')
11 		return '1';
12 
13 	key++;
14 
15 	if (key > '9')
16 		key = '1';
17 
18 	return key;
19 }
20 
21 int handle_search_keys(int key, size_t start, size_t end, void *_data)
22 {
23 	struct search_data *data = _data;
24 	struct jump_key *pos;
25 	int index = 0;
26 
27 	if (key < '1' || key > '9')
28 		return 0;
29 
30 	list_for_each_entry(pos, data->head, entries) {
31 		index = next_jump_key(index);
32 
33 		if (pos->offset < start)
34 			continue;
35 
36 		if (pos->offset >= end)
37 			break;
38 
39 		if (key == index) {
40 			data->target = pos->target;
41 			return 1;
42 		}
43 	}
44 
45 	return 0;
46 }
47 
48 int get_jump_key_char(void)
49 {
50 	jump_key_char = next_jump_key(jump_key_char);
51 
52 	return jump_key_char;
53 }
54