@@ -30,7 +30,7 @@ struct key_map_s {
3030 int key ; // key definition
3131};
3232
33- key_map_s * keymap = 0 ;
33+ key_map_s * keymap = 0 ;
3434
3535/**
3636 * Prepare task_t exec.keymap for keymap handling at program init
@@ -42,7 +42,7 @@ void keymap_init() {
4242/**
4343 * Handler for keymap_free()
4444 */
45- void keymap_delete (key_map_s * km ) {
45+ void keymap_delete (key_map_s * km ) {
4646 if (km ) {
4747 keymap_delete (km -> next );
4848 free (km );
@@ -61,13 +61,13 @@ void keymap_free() {
6161 * DEFINEKEY command handler to add a keymap
6262 */
6363void keymap_add (uint32_t key , bcip_t ip ) {
64- key_map_s * km = (key_map_s * ) malloc (sizeof (key_map_s ));
64+ key_map_s * km = (key_map_s * ) malloc (sizeof (key_map_s ));
6565 km -> next = 0 ;
6666 km -> ip = ip ;
6767 km -> key = key ;
6868
6969 // add the new mapping onto the linked list
70- key_map_s * head = keymap ;
70+ key_map_s * head = keymap ;
7171 if (!head ) {
7272 keymap = km ;
7373 } else {
@@ -78,12 +78,44 @@ void keymap_add(uint32_t key, bcip_t ip) {
7878 }
7979}
8080
81+ /**
82+ * DEFINEKEY key, 0
83+ */
84+ void keymap_remove (uint32_t key , int level ) {
85+ key_map_s * head = keymap ;
86+ key_map_s * prev = head ;
87+ int size = 0 ;
88+
89+ while (head ) {
90+ if (head -> key == key ) {
91+ key_map_s * current = head ;
92+ prev -> next = head -> next ;
93+ head = head -> next ;
94+ free (current );
95+ if (current == prev ) {
96+ prev = head ;
97+ }
98+ if (current == keymap ) {
99+ keymap = head ;
100+ }
101+ } else {
102+ prev = head ;
103+ head = head -> next ;
104+ size ++ ;
105+ }
106+ }
107+ if (!size ) {
108+ keymap = 0 ;
109+ }
110+ }
111+
112+
81113/**
82114 * invokes the handler for the given key
83115 */
84116int keymap_invoke (uint32_t key ) {
85117 int result = 0 ;
86- key_map_s * head = keymap ;
118+ key_map_s * head = keymap ;
87119 while (head ) {
88120 if (head -> key == key ) {
89121 bcip_t ip = prog_ip ; // store current ip
@@ -175,7 +207,7 @@ void timer_free(timer_s *timer) {
175207}
176208
177209void timer_add (var_num_t interval , bcip_t ip ) {
178- timer_s * timer = (timer_s * ) malloc (sizeof (timer_s ));
210+ timer_s * timer = (timer_s * ) malloc (sizeof (timer_s ));
179211 timer -> next = NULL ;
180212 timer -> ip = ip ;
181213 timer -> interval = interval ;
@@ -195,7 +227,7 @@ void timer_add(var_num_t interval, bcip_t ip) {
195227}
196228
197229void timer_run (uint32_t now ) {
198- timer_s * timer = prog_timer ;
230+ timer_s * timer = prog_timer ;
199231 while (timer ) {
200232 if (timer -> value == 0 ) {
201233 // start timer
0 commit comments