uIP 1.0
|
00001 /* 00002 * Copyright (c) 2003, Adam Dunkels. 00003 * Все права зарезервированы. * 00004 * Повторное распространение, использование в исходном и двоичном виде, 00005 * с модификацией или без - разрешается, если выполняются следующие 00006 * условия: 00007 * 1. Распространение исходного кода должно сохранить вышеуказанную пометку 00008 * копирайта, этот список условий и следующую правовую оговорку. 00009 * 2. Распространение исходного кода должно сохранить вышеуказанную пометку 00010 * копирайта, этот список условий и следующую правовую оговорку в 00011 * документации и/или других материалах, которые будут предоставлены 00012 * вместе с распространяемыми материалами. 00013 * 3. Имя автора не может использоваться, чтобы подтвердить или продвинуть 00014 * продукты, написанные с использованием этого программного обеспечения 00015 * без специального на то разрешения. 00016 * 00017 * ЭТО ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ АВТОРОМ ``КАК ЕСТЬ'', БЕЗ 00018 * КАКОЙ-ЛИБО ЛЮБОЙ РАСШИРЕННОЙ ИЛИ ПОДРАЗУМЕВАЕМОЙ ГАРАНТИИ, ВКЛЮЧАЯ, 00019 * НО НЕ ОГРАНИЧИВАЯСЬ ЭТИМ, ГАРАНТИИ ВЫСОКОГО СПРОСА И ПРИГОДНОСТИ 00020 * ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. АВТОР НИ ПРИ КАКИХ УСЛОВИЯХ НЕ ОТВЕТСТВЕНЕН 00021 * ЗА ЛЮБЫЕ УБЫТКИ - ПРЯМЫЕ, КОСВЕННЫЕ, СЛУЧАЙНЫЕ, СПЕЦИАЛЬНЫЕ, ОБРАЗЦОВЫЕ 00022 * ИЛИ ПОСЛЕДОВАТЕЛЬНЫЕ (ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ЭТИМ, ТРЕБОВАНИЯ 00023 * ЗАМЕНЫ ТОВАРА ИЛИ СЕРВИСА; ПОТЕРИ ИСПОЛЬЗОВАНИЯ, ДАННЫХ ИЛИ ВЫГОДЫ; 00024 * ИЛИ ПРЕКРАЩЕНИЕ БИЗНЕСА), ОДНАКО ВЫЗВАННЫЕ ПО ЛЮБОЙ ТЕОРИИ ОТВЕТСТВЕННОСТИ, 00025 * ЛИБО В КОНТРАКТЕ, ПРЯМОЙ ОТВЕТСТВЕННОСТИ, ЛИБО В НАРУШЕНИИ ЗАКОННЫХ ПРАВ 00026 * (ВКЛЮЧАЯ ТАК ИЛИ ИНАЧЕ НЕБРЕЖНОСТЬ), ВОЗНИКАЮЩИЕ ВСЕГДА ИЗ ИСПОЛЬЗОВАНИЯ 00027 * ЭТОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ, ДАЖЕ ЕСЛИ БЫЛО ПРЕДУПРЕЖДЕНИЕ О ВОЗМОЖНОСТИ 00028 * ТАКОГО ПОВРЕЖДЕНИЯ. 00029 * 00030 * Этот файл является частью стека uIP TCP/IP. 00031 * 00032 * $Id: shell.c,v 1.1 2006/06/07 09:43:54 adam Exp $ 00033 * 00034 */ 00035 00036 #include "shell.h" 00037 00038 #include <string.h> 00039 00040 struct ptentry { 00041 char *commandstr; 00042 void (* pfunc)(char *str); 00043 }; 00044 00045 #define SHELL_PROMPT "uIP 1.0> " 00046 00047 /*---------------------------------------------------------------------------*/ 00048 static void 00049 parse(register char *str, struct ptentry *t) 00050 { 00051 struct ptentry *p; 00052 for(p = t; p->commandstr != NULL; ++p) { 00053 if(strncmp(p->commandstr, str, strlen(p->commandstr)) == 0) { 00054 break; 00055 } 00056 } 00057 00058 p->pfunc(str); 00059 } 00060 /*---------------------------------------------------------------------------*/ 00061 static void 00062 inttostr(register char *str, unsigned int i) 00063 { 00064 str[0] = '0' + i / 100; 00065 if(str[0] == '0') { 00066 str[0] = ' '; 00067 } 00068 str[1] = '0' + (i / 10) % 10; 00069 if(str[0] == ' ' && str[1] == '0') { 00070 str[1] = ' '; 00071 } 00072 str[2] = '0' + i % 10; 00073 str[3] = ' '; 00074 str[4] = 0; 00075 } 00076 /*---------------------------------------------------------------------------*/ 00077 static void 00078 help(char *str) 00079 { 00080 shell_output("Available commands:", ""); 00081 shell_output("stats - show network statistics", ""); 00082 shell_output("conn - show TCP connections", ""); 00083 shell_output("help, ? - show help", ""); 00084 shell_output("exit - exit shell", ""); 00085 } 00086 /*---------------------------------------------------------------------------*/ 00087 static void 00088 unknown(char *str) 00089 { 00090 if(strlen(str) > 0) { 00091 shell_output("Unknown command: ", str); 00092 } 00093 } 00094 /*---------------------------------------------------------------------------*/ 00095 static struct ptentry parsetab[] = 00096 {{"stats", help}, 00097 {"conn", help}, 00098 {"help", help}, 00099 {"exit", shell_quit}, 00100 {"?", help}, 00101 00102 /* Default action */ 00103 {NULL, unknown}}; 00104 /*---------------------------------------------------------------------------*/ 00105 void 00106 shell_init(void) 00107 { 00108 } 00109 /*---------------------------------------------------------------------------*/ 00110 void 00111 shell_start(void) 00112 { 00113 shell_output("uIP command shell", ""); 00114 shell_output("Type '?' and return for help", ""); 00115 shell_prompt(SHELL_PROMPT); 00116 } 00117 /*---------------------------------------------------------------------------*/ 00118 void 00119 shell_input(char *cmd) 00120 { 00121 parse(cmd, parsetab); 00122 shell_prompt(SHELL_PROMPT); 00123 } 00124 /*---------------------------------------------------------------------------*/