xref: /nrf52832-nimble/rt-thread/components/net/uip/apps/telnetd/uip_shell.c (revision 104654410c56c573564690304ae786df310c91fc)
1*10465441SEvalZero  /*
2*10465441SEvalZero  * Copyright (c) 2003, Adam Dunkels.
3*10465441SEvalZero  * All rights reserved.
4*10465441SEvalZero  *
5*10465441SEvalZero  * Redistribution and use in source and binary forms, with or without
6*10465441SEvalZero  * modification, are permitted provided that the following conditions
7*10465441SEvalZero  * are met:
8*10465441SEvalZero  * 1. Redistributions of source code must retain the above copyright
9*10465441SEvalZero  *    notice, this list of conditions and the following disclaimer.
10*10465441SEvalZero  * 2. Redistributions in binary form must reproduce the above copyright
11*10465441SEvalZero  *    notice, this list of conditions and the following disclaimer in the
12*10465441SEvalZero  *    documentation and/or other materials provided with the distribution.
13*10465441SEvalZero  * 3. The name of the author may not be used to endorse or promote
14*10465441SEvalZero  *    products derived from this software without specific prior
15*10465441SEvalZero  *    written permission.
16*10465441SEvalZero  *
17*10465441SEvalZero  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
18*10465441SEvalZero  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19*10465441SEvalZero  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20*10465441SEvalZero  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
21*10465441SEvalZero  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22*10465441SEvalZero  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
23*10465441SEvalZero  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24*10465441SEvalZero  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25*10465441SEvalZero  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
26*10465441SEvalZero  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27*10465441SEvalZero  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28*10465441SEvalZero  *
29*10465441SEvalZero  * This file is part of the uIP TCP/IP stack.
30*10465441SEvalZero  *
31*10465441SEvalZero  * $Id: shell.c,v 1.1 2006/06/07 09:43:54 adam Exp $
32*10465441SEvalZero  *
33*10465441SEvalZero  */
34*10465441SEvalZero 
35*10465441SEvalZero #include "uip_shell.h"
36*10465441SEvalZero 
37*10465441SEvalZero #include <string.h>
38*10465441SEvalZero 
39*10465441SEvalZero struct ptentry {
40*10465441SEvalZero   char *commandstr;
41*10465441SEvalZero   void (* pfunc)(char *str);
42*10465441SEvalZero };
43*10465441SEvalZero 
44*10465441SEvalZero #define SHELL_PROMPT "uIP 1.0> "
45*10465441SEvalZero 
46*10465441SEvalZero /*---------------------------------------------------------------------------*/
47*10465441SEvalZero static void
parse(register char * str,struct ptentry * t)48*10465441SEvalZero parse(register char *str, struct ptentry *t)
49*10465441SEvalZero {
50*10465441SEvalZero   struct ptentry *p;
51*10465441SEvalZero   for(p = t; p->commandstr != NULL; ++p) {
52*10465441SEvalZero     if(strncmp(p->commandstr, str, strlen(p->commandstr)) == 0) {
53*10465441SEvalZero       break;
54*10465441SEvalZero     }
55*10465441SEvalZero   }
56*10465441SEvalZero 
57*10465441SEvalZero   p->pfunc(str);
58*10465441SEvalZero }
59*10465441SEvalZero /*---------------------------------------------------------------------------*/
60*10465441SEvalZero static void
inttostr(register char * str,unsigned int i)61*10465441SEvalZero inttostr(register char *str, unsigned int i)
62*10465441SEvalZero {
63*10465441SEvalZero   str[0] = '0' + i / 100;
64*10465441SEvalZero   if(str[0] == '0') {
65*10465441SEvalZero     str[0] = ' ';
66*10465441SEvalZero   }
67*10465441SEvalZero   str[1] = '0' + (i / 10) % 10;
68*10465441SEvalZero   if(str[0] == ' ' && str[1] == '0') {
69*10465441SEvalZero     str[1] = ' ';
70*10465441SEvalZero   }
71*10465441SEvalZero   str[2] = '0' + i % 10;
72*10465441SEvalZero   str[3] = ' ';
73*10465441SEvalZero   str[4] = 0;
74*10465441SEvalZero }
75*10465441SEvalZero /*---------------------------------------------------------------------------*/
76*10465441SEvalZero static void
help(char * str)77*10465441SEvalZero help(char *str)
78*10465441SEvalZero {
79*10465441SEvalZero   shell_output("Available commands:", "");
80*10465441SEvalZero   shell_output("stats   - show network statistics", "");
81*10465441SEvalZero   shell_output("conn    - show TCP connections", "");
82*10465441SEvalZero   shell_output("help, ? - show help", "");
83*10465441SEvalZero   shell_output("exit    - exit shell", "");
84*10465441SEvalZero }
85*10465441SEvalZero /*---------------------------------------------------------------------------*/
86*10465441SEvalZero static void
unknown(char * str)87*10465441SEvalZero unknown(char *str)
88*10465441SEvalZero {
89*10465441SEvalZero   if(strlen(str) > 0) {
90*10465441SEvalZero     shell_output("Unknown command: ", str);
91*10465441SEvalZero   }
92*10465441SEvalZero }
93*10465441SEvalZero /*---------------------------------------------------------------------------*/
94*10465441SEvalZero static struct ptentry parsetab[] =
95*10465441SEvalZero   {{"stats", help},
96*10465441SEvalZero    {"conn", help},
97*10465441SEvalZero    {"help", help},
98*10465441SEvalZero    {"exit", shell_quit},
99*10465441SEvalZero    {"?", help},
100*10465441SEvalZero 
101*10465441SEvalZero    /* Default action */
102*10465441SEvalZero    {NULL, unknown}};
103*10465441SEvalZero /*---------------------------------------------------------------------------*/
104*10465441SEvalZero void
shell_init(void)105*10465441SEvalZero shell_init(void)
106*10465441SEvalZero {
107*10465441SEvalZero }
108*10465441SEvalZero /*---------------------------------------------------------------------------*/
109*10465441SEvalZero void
shell_start(void)110*10465441SEvalZero shell_start(void)
111*10465441SEvalZero {
112*10465441SEvalZero   shell_output("uIP command shell", "");
113*10465441SEvalZero   shell_output("Type '?' and return for help", "");
114*10465441SEvalZero   shell_prompt(SHELL_PROMPT);
115*10465441SEvalZero }
116*10465441SEvalZero /*---------------------------------------------------------------------------*/
117*10465441SEvalZero void
shell_input(char * cmd)118*10465441SEvalZero shell_input(char *cmd)
119*10465441SEvalZero {
120*10465441SEvalZero   parse(cmd, parsetab);
121*10465441SEvalZero   shell_prompt(SHELL_PROMPT);
122*10465441SEvalZero }
123*10465441SEvalZero /*---------------------------------------------------------------------------*/
124