uIP 1.0
C:/asm/STM32-ethernet/ENC28J60prj/uip-master/apps/telnetd/shell.c
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 /*---------------------------------------------------------------------------*/