⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shell-gui.c

📁 一个小的RTOS具有UIP网络功能
💻 C
字号:
/* * Copyright (c) 2003, Adam Dunkels. * All rights reserved.  * * Redistribution and use in source and binary forms, with or without  * modification, are permitted provided that the following conditions  * are met:  * 1. Redistributions of source code must retain the above copyright  *    notice, this list of conditions and the following disclaimer.  * 2. Redistributions in binary form must reproduce the above copyright  *    notice, this list of conditions and the following disclaimer in the  *    documentation and/or other materials provided with the distribution.  * 3. All advertising materials mentioning features or use of this software *    must display the following acknowledgement: *      This product includes software developed by Adam Dunkels. * 4. The name of the author may not be used to endorse or promote *    products derived from this software without specific prior *    written permission.   * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.   * * This file is part of the Contiki desktop OS. * * $Id: shell-gui.c,v 1.4 2003/09/01 22:22:36 adamdunkels Exp $ * */#include "program-handler.h"#include "loader.h"#include "uip.h"#include "uip_main.h"#include "uip_arp.h"#include "resolv.h"#include "shell.h"#include "uip-signal.h"#include <string.h>#define XSIZE 36#define YSIZE 12static struct ctk_window window;static char log[XSIZE * YSIZE];static struct ctk_label loglabel =  {CTK_LABEL(0, 0, XSIZE, YSIZE, log)};static char command[XSIZE + 1];static struct ctk_textentry commandentry =  {CTK_TEXTENTRY(0, YSIZE, XSIZE - 2, 1, command, XSIZE)};static DISPATCHER_SIGHANDLER(sighandler, s, data);static struct dispatcher_proc p =  {DISPATCHER_PROC("Command shell", shell_idle, sighandler,		   NULL)};static ek_id_t id;/*-----------------------------------------------------------------------------------*/voidshell_quit(char *str){  ctk_window_close(&window);  dispatcher_exit(&p);  id = EK_ID_NONE;  LOADER_UNLOAD();}/*-----------------------------------------------------------------------------------*/voidshell_output(char *str1, char *str2){  static unsigned char i, len;    for(i = 1; i < YSIZE; ++i) {    memcpy(&log[(i - 1) * XSIZE], &log[i * XSIZE], XSIZE);  }  memset(&log[(YSIZE - 1) * XSIZE], 0, XSIZE);  len = strlen(str1);  strncpy(&log[(YSIZE - 1) * XSIZE], str1, XSIZE);  if(len < XSIZE) {    strncpy(&log[(YSIZE - 1) * XSIZE] + len, str2, XSIZE - len);  }  CTK_WIDGET_REDRAW(&loglabel);}/*-----------------------------------------------------------------------------------*/LOADER_INIT_FUNC(config_init, arg){  arg_free(arg);    if(id == EK_ID_NONE) {    id = dispatcher_start(&p);    dispatcher_listen(ctk_signal_window_close);    dispatcher_listen(ctk_signal_widget_activate);        ctk_window_new(&window, XSIZE, YSIZE+1, "Command shell");    CTK_WIDGET_ADD(&window, &loglabel);    CTK_WIDGET_ADD(&window, &commandentry);    CTK_WIDGET_FOCUS(&window, &commandentry);    memset(log, ' ', sizeof(log));    shell_output("Contiki command shell", "");    shell_output("Type '?' for help", "");  }  ctk_window_open(&window);}/*-----------------------------------------------------------------------------------*/staticDISPATCHER_SIGHANDLER(sighandler, s, data){  DISPATCHER_SIGHANDLER_ARGS(s, data);  if(s == ctk_signal_widget_activate &&     data == (ek_data_t)&commandentry) {    shell_input(command);    CTK_TEXTENTRY_CLEAR(&commandentry);    CTK_WIDGET_FOCUS(&window, &commandentry);    CTK_WIDGET_REDRAW(&commandentry);  } else if(s == ctk_signal_window_close ||	    s == dispatcher_signal_quit) {    shell_quit(NULL);  }}/*-----------------------------------------------------------------------------------*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -