xref: /linux/scripts/kconfig/mnconf-common.c (revision a1ff5a7d78a036d6c2178ee5acd6ba4946243800)
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 Yamada int 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 Yamada int 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 Yamada int 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