improve the command line auto-complete feature.
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@2106 bbd45198-f89e-11dd-88c7-29a3b14d5316
This commit is contained in:
parent
04a79d24cf
commit
30a2731d43
|
@ -25,6 +25,7 @@
|
|||
* list and sysvar list
|
||||
* 2009-05-30 Bernard add list_device
|
||||
* 2010-04-21 yi.qiu add list_module
|
||||
* 2012-04-29 goprife improve the command line auto-complete feature.
|
||||
*/
|
||||
|
||||
#include <rtthread.h>
|
||||
|
@ -162,13 +163,14 @@ static long _list_event(struct rt_list_node *list)
|
|||
e = (struct rt_event*)(rt_list_entry(node, struct rt_object, list));
|
||||
if( !rt_list_isempty(&e->parent.suspend_thread) )
|
||||
{
|
||||
rt_kprintf("%-8s 0x%08x %03d:", e->parent.parent.name, e->set, rt_list_len(&e->parent.suspend_thread));
|
||||
rt_kprintf("%-8.*s 0x%08x %03d:", RT_NAME_MAX, e->parent.parent.name,
|
||||
e->set, rt_list_len(&e->parent.suspend_thread));
|
||||
show_wait_queue(&(e->parent.suspend_thread));
|
||||
rt_kprintf("\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
rt_kprintf("%-8s 0x%08x 0\n", e->parent.parent.name, e->set);
|
||||
rt_kprintf("%-8.*s 0x%08x 0\n", RT_NAME_MAX, e->parent.parent.name, e->set);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -220,13 +222,15 @@ static long _list_mailbox(struct rt_list_node *list)
|
|||
m = (struct rt_mailbox*)(rt_list_entry(node, struct rt_object, list));
|
||||
if( !rt_list_isempty(&m->parent.suspend_thread) )
|
||||
{
|
||||
rt_kprintf("%-8s %04d %04d %d:", m->parent.parent.name, m->entry, m->size, rt_list_len(&m->parent.suspend_thread));
|
||||
rt_kprintf("%-8.*s %04d %04d %d:", RT_NAME_MAX, m->parent.parent.name,
|
||||
m->entry, m->size, rt_list_len(&m->parent.suspend_thread));
|
||||
show_wait_queue(&(m->parent.suspend_thread));
|
||||
rt_kprintf("\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
rt_kprintf("%-8s %04d %04d %d\n", m->parent.parent.name, m->entry, m->size, rt_list_len(&m->parent.suspend_thread));
|
||||
rt_kprintf("%-8.*s %04d %04d %d\n", RT_NAME_MAX, m->parent.parent.name,
|
||||
m->entry, m->size, rt_list_len(&m->parent.suspend_thread));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -253,13 +257,15 @@ static long _list_msgqueue(struct rt_list_node *list)
|
|||
m = (struct rt_messagequeue*)(rt_list_entry(node, struct rt_object, list));
|
||||
if( !rt_list_isempty(&m->parent.suspend_thread) )
|
||||
{
|
||||
rt_kprintf("%-8s %04d %d:", m->parent.parent.name, m->entry, rt_list_len(&m->parent.suspend_thread));
|
||||
rt_kprintf("%-8.*s %04d %d:", RT_NAME_MAX, m->parent.parent.name,
|
||||
m->entry, rt_list_len(&m->parent.suspend_thread));
|
||||
show_wait_queue(&(m->parent.suspend_thread));
|
||||
rt_kprintf("\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
rt_kprintf("%-8s %04d %d\n", m->parent.parent.name, m->entry, rt_list_len(&m->parent.suspend_thread));
|
||||
rt_kprintf("%-8.*s %04d %d\n", RT_NAME_MAX, m->parent.parent.name,
|
||||
m->entry, rt_list_len(&m->parent.suspend_thread));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -286,7 +292,7 @@ static long _list_mempool(struct rt_list_node *list)
|
|||
mp = (struct rt_mempool*)rt_list_entry(node, struct rt_object, list);
|
||||
if (mp->suspend_thread_count > 0)
|
||||
{
|
||||
rt_kprintf("%-8s %04d %04d %04d %d:", mp->parent.name,
|
||||
rt_kprintf("%-8.*s %04d %04d %04d %d:", RT_NAME_MAX, mp->parent.name,
|
||||
mp->block_size, mp->block_total_count, mp->block_free_count,
|
||||
mp->suspend_thread_count);
|
||||
show_wait_queue(&(mp->suspend_thread));
|
||||
|
@ -294,7 +300,7 @@ static long _list_mempool(struct rt_list_node *list)
|
|||
}
|
||||
else
|
||||
{
|
||||
rt_kprintf("%-8s %04d %04d %04d %d\n", mp->parent.name,
|
||||
rt_kprintf("%-8.*s %04d %04d %04d %d\n", RT_NAME_MAX, mp->parent.name,
|
||||
mp->block_size, mp->block_total_count, mp->block_free_count,
|
||||
mp->suspend_thread_count);
|
||||
}
|
||||
|
@ -320,7 +326,7 @@ static long _list_timer(struct rt_list_node *list)
|
|||
for (node = list->next; node != list; node = node->next)
|
||||
{
|
||||
timer = (struct rt_timer*)(rt_list_entry(node, struct rt_object, list));
|
||||
rt_kprintf("%-8s 0x%08x 0x%08x ", timer->parent.name, timer->init_tick, timer->timeout_tick);
|
||||
rt_kprintf("%-8.*s 0x%08x 0x%08x ", RT_NAME_MAX, timer->parent.name, timer->init_tick, timer->timeout_tick);
|
||||
if (timer->parent.flag & RT_TIMER_FLAG_ACTIVATED) rt_kprintf("activated\n");
|
||||
else rt_kprintf("deactivated\n");
|
||||
}
|
||||
|
@ -365,8 +371,9 @@ static long _list_device(struct rt_list_node *list)
|
|||
for (node = list->next; node != list; node = node->next)
|
||||
{
|
||||
device = (struct rt_device*)(rt_list_entry(node, struct rt_object, list));
|
||||
rt_kprintf("%-8s %-8s \n", device->parent.name,
|
||||
(device->type <= RT_Device_Class_Unknown)?device_type_str[device->type]:device_type_str[RT_Device_Class_Unknown]);
|
||||
rt_kprintf("%-8.*s %-8s \n", RT_NAME_MAX, device->parent.name,
|
||||
(device->type <= RT_Device_Class_Unknown)?
|
||||
device_type_str[device->type]:device_type_str[RT_Device_Class_Unknown]);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -425,7 +432,7 @@ int list_mod_detail(const char* name)
|
|||
rt_kprintf("main thread pri status sp stack size max used left tick error\n");
|
||||
rt_kprintf("------------- ---- ------- ---------- ---------- ---------- ---------- ---\n");
|
||||
thread = module->module_thread;
|
||||
rt_kprintf("%-8s 0x%02x", thread->name, thread->current_priority);
|
||||
rt_kprintf("%-8.*s 0x%02x", RT_NAME_MAX, thread->name, thread->current_priority);
|
||||
|
||||
if (thread->stat == RT_THREAD_READY) rt_kprintf(" ready ");
|
||||
else if (thread->stat == RT_THREAD_SUSPEND) rt_kprintf(" suspend");
|
||||
|
@ -562,17 +569,32 @@ static int str_is_prefix(const char* prefix, const char* str)
|
|||
return -1;
|
||||
}
|
||||
|
||||
static int str_common(const char * str1, const char * str2)
|
||||
{
|
||||
const char * str = str1;
|
||||
|
||||
while( *str !=0 && *str2 !=0 && (*str == *str2))
|
||||
{
|
||||
str ++;
|
||||
str2 ++;
|
||||
}
|
||||
|
||||
return (str - str1);
|
||||
}
|
||||
|
||||
void list_prefix(char* prefix)
|
||||
{
|
||||
struct finsh_syscall_item* syscall_item;
|
||||
struct finsh_sysvar_item* sysvar_item;
|
||||
rt_uint16_t func_cnt, var_cnt;
|
||||
int length, min_length;
|
||||
const char* name_ptr;
|
||||
|
||||
func_cnt = 0;
|
||||
var_cnt = 0;
|
||||
name_ptr = RT_NULL;
|
||||
|
||||
/* checks in system function call */
|
||||
{
|
||||
struct finsh_syscall* index;
|
||||
for (index = _syscall_table_begin; index < _syscall_table_end; index ++)
|
||||
|
@ -580,12 +602,28 @@ void list_prefix(char* prefix)
|
|||
if (str_is_prefix(prefix, index->name) == 0)
|
||||
{
|
||||
if (func_cnt == 0)
|
||||
{
|
||||
rt_kprintf("--function:\n");
|
||||
|
||||
func_cnt ++;
|
||||
if (*prefix != 0)
|
||||
{
|
||||
/* set name_ptr */
|
||||
name_ptr = index->name;
|
||||
|
||||
/* set initial length */
|
||||
min_length = strlen(name_ptr);
|
||||
}
|
||||
}
|
||||
|
||||
func_cnt ++;
|
||||
|
||||
if (*prefix != 0)
|
||||
{
|
||||
length = str_common(name_ptr, index->name);
|
||||
if (length < min_length)
|
||||
min_length = length;
|
||||
}
|
||||
|
||||
#ifdef FINSH_USING_DESCRIPTION
|
||||
rt_kprintf("%-16s -- %s\n", index->name, index->desc);
|
||||
#else
|
||||
|
@ -595,23 +633,40 @@ void list_prefix(char* prefix)
|
|||
}
|
||||
}
|
||||
|
||||
/* list syscall list */
|
||||
/* checks in dynamic system function call */
|
||||
syscall_item = global_syscall_list;
|
||||
while (syscall_item != NULL)
|
||||
{
|
||||
if (str_is_prefix(prefix, syscall_item->syscall.name) == 0)
|
||||
{
|
||||
if (func_cnt == 0)
|
||||
{
|
||||
rt_kprintf("--function:\n");
|
||||
func_cnt ++;
|
||||
if (*prefix != 0 && name_ptr == NULL)
|
||||
{
|
||||
/* set name_ptr */
|
||||
name_ptr = syscall_item->syscall.name;
|
||||
|
||||
/* set initial length */
|
||||
min_length = strlen(name_ptr);
|
||||
}
|
||||
}
|
||||
|
||||
func_cnt ++;
|
||||
|
||||
if (*prefix != 0)
|
||||
{
|
||||
length = str_common(name_ptr, syscall_item->syscall.name);
|
||||
if (length < min_length)
|
||||
min_length = length;
|
||||
}
|
||||
|
||||
rt_kprintf("[l] %s\n", syscall_item->syscall.name);
|
||||
}
|
||||
syscall_item = syscall_item->next;
|
||||
}
|
||||
|
||||
/* checks in system variable */
|
||||
{
|
||||
struct finsh_sysvar* index;
|
||||
for (index = _sysvar_table_begin; index < _sysvar_table_end; index ++)
|
||||
|
@ -619,12 +674,29 @@ void list_prefix(char* prefix)
|
|||
if (str_is_prefix(prefix, index->name) == 0)
|
||||
{
|
||||
if (var_cnt == 0)
|
||||
{
|
||||
rt_kprintf("--variable:\n");
|
||||
|
||||
var_cnt ++;
|
||||
/* set name ptr */
|
||||
if (*prefix != 0 && name_ptr == NULL)
|
||||
{
|
||||
/* set name_ptr */
|
||||
name_ptr = index->name;
|
||||
|
||||
/* set initial length */
|
||||
min_length = strlen(name_ptr);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
var_cnt ++;
|
||||
|
||||
if (*prefix != 0)
|
||||
{
|
||||
length = str_common(name_ptr, index->name);
|
||||
if (length < min_length)
|
||||
min_length = length;
|
||||
}
|
||||
|
||||
#ifdef FINSH_USING_DESCRIPTION
|
||||
rt_kprintf("%-16s -- %s\n", index->name, index->desc);
|
||||
#else
|
||||
|
@ -634,27 +706,43 @@ void list_prefix(char* prefix)
|
|||
}
|
||||
}
|
||||
|
||||
/* checks in dynamic system variable */
|
||||
sysvar_item = global_sysvar_list;
|
||||
while (sysvar_item != NULL)
|
||||
{
|
||||
if (str_is_prefix(prefix, sysvar_item->sysvar.name) == 0)
|
||||
{
|
||||
if (var_cnt == 0)
|
||||
{
|
||||
rt_kprintf("--variable:\n");
|
||||
|
||||
var_cnt ++;
|
||||
/* set name ptr */
|
||||
if (*prefix != 0 && name_ptr == NULL)
|
||||
{
|
||||
/* set name_ptr */
|
||||
name_ptr = sysvar_item->sysvar.name;
|
||||
|
||||
rt_kprintf("[l] %s\n", sysvar_item->sysvar.name);
|
||||
/* set initial length */
|
||||
min_length = strlen(name_ptr);
|
||||
}
|
||||
}
|
||||
|
||||
var_cnt ++;
|
||||
|
||||
if (*prefix != 0)
|
||||
{
|
||||
length = str_common(name_ptr, sysvar_item->sysvar.name);
|
||||
if (length < min_length)
|
||||
min_length = length;
|
||||
}
|
||||
|
||||
rt_kprintf("[v] %s\n", sysvar_item->sysvar.name);
|
||||
}
|
||||
sysvar_item = sysvar_item->next;
|
||||
}
|
||||
|
||||
/* only one matched */
|
||||
if ((func_cnt + var_cnt) == 1)
|
||||
if (name_ptr != NULL)
|
||||
{
|
||||
rt_strncpy(prefix, name_ptr, strlen(name_ptr));
|
||||
rt_strncpy(prefix, name_ptr, min_length);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue