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

📄 args.c

📁 最新的LPC214X Monitor驱动程序
💻 C
字号:
////  $Id: args.c 56 2008-10-05 03:27:02Z jcw $//  $Revision: 56 $//  $Author: jcw $//  $Date: 2008-10-04 23:27:02 -0400 (Sat, 04 Oct 2008) $//  $HeadURL: http://tinymicros.com/svn_public/arm/lpc2148_demo/trunk/monitor/args.c $//#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <ctype.h>//// Scheduler includes//#include "FreeRTOS.h"#include "args.h"//////static char *strtrim (char *s){  char *t = s + strlen (s) - 1;  while (t >= s && *t && isspace (*t))    *t-- = '\0';  while (*s && isspace (*s))    s++;  return s;}////  bufferLength includes the space reserved for the \0//int argsGetLine (int fd __attribute__ ((unused)), U8 *buffer, int bufferLength, const char *prompt){  U8 *p;  p = buffer;  *p = '\0';  printf ("%s", prompt);  while (1)  {    U8 c;        fflush (stdout);    if (read (fd, &c, sizeof (c)) == sizeof (c))    {      switch (c)      {        case '\n' :        case '\r' :          printf ("\n");          return strlen ((char *) buffer);        case '\b' :          if (p > buffer)            *--p = '\0';          printf ("\b \b");          break;        case 0x15 : // CTRL-U          while (p != buffer)          {            printf ("\b \b");            --p;          }          *p = '\0';          break;        case 0xfe :        case 0xff :          *buffer++ = c;          *buffer = '\0';          return 1;        default :           if (p < buffer + bufferLength - 1 && c >= ' ' && c < 0x7f)          {             *p++ = c;            *p = '\0';            printf ("%c", c);           }          else            printf ("%c", c);           break;      }    }  }  return 0;}//////typedef enum{  P_EATWHITESPACE = 0,  P_GETCHARFIRST,  P_GETCHAR,  P_QUOTEDGETCHAR}PSTATE;int argsParse (char *cmd, char **argv, int sizeofArgv, int *argc){  int maxArgs = (sizeofArgv / sizeof (argv [0])) - 1;  char *s = strtrim (cmd);  PSTATE pstate = P_EATWHITESPACE;  *argc = 0;  memset (argv, 0, sizeofArgv);  while (*s)  {    switch (pstate)    {      case P_EATWHITESPACE :        {          if (!isspace (*s))            pstate = P_GETCHARFIRST;          else            s++;        }        break;      case P_GETCHARFIRST :        {          *argv++ = s;          if (++*argc == maxArgs)            return 1;          if (*s == '"')            pstate = P_QUOTEDGETCHAR;          else            pstate = P_GETCHAR;          s++;        }        break;      case P_GETCHAR :        {          if (isspace (*s)) {            pstate = P_EATWHITESPACE;            *s = '\0';          }           else if (*s == '"')            pstate = P_QUOTEDGETCHAR;          s++;        }        break;      case P_QUOTEDGETCHAR :        {          if (*s == '"')            pstate = P_GETCHAR;          s++;        }        break;    }  }  return 0;}

⌨️ 快捷键说明

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