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

📄 stpnxt.c

📁 项目描述: slsnif is a serial port logging utility. It listens to the specified serial port and logs all
💻 C
字号:
#include <stdio.h>#include <ctype.h>#include "xtdio.h"/* ------------------------------------------------------------------ * Definitions Section: */#define MAXCNT 65535/* ------------------------------------------------------------------ * Source Code: *//* stpnxt: returns a pointer to the next argument in the given string, *	assuming a %d, %s, %f, etc. code was used to interpret the *	present argument. */#ifdef __PROTOTYPE__char *stpnxt(  char *s,			/* source string	*/  char *fmt)		/* format control string (ie. format control code string) */#elsechar *stpnxt(s,fmt)char *s;			/* source string	*/char *fmt;			/* format control string (ie. format control code string) */#endif{char *ss;int   cmax;/* if s is NULL return NULL */if(s == NULL) {	return (char *) NULL;	}/* process control string */for(ss= s; *s && *fmt ; ++fmt, ss= s) {	/* scan code processing */	if(*fmt == '%') {		++fmt;		/* %[-]###.: handle predecessor stuff */		if(*fmt == '-') ++fmt;			if(*fmt && isdigit(*fmt)) {			sscanf(fmt,"%d",&cmax);			while(*fmt && (isdigit(*fmt) || *fmt == '.')) ++fmt;			}		else cmax= MAXCNT;		/* %...l.: remove the 'l' from consideration		 * %...h.: remove the 'h' from consideration		 */		if(*fmt == 'l' || *fmt == 'h') ++fmt;		/* handle the format code character */		switch(*fmt) {		/* %s: string processing */		case 's':			while(*s && isspace(*s)) ++s;			while(*s && !isspace(*s)) ++s;			break;		/* %c: character processing */		case 'c':			if(*s) ++s;			break;		/* %x: hexadecimal processing */		case 'x':			s= stpblk(s);			ss= s;			if(*s == '+' || *s == '-') ++s;			if(s[0] == '0' && s[1] == 'x') s+= 2;			while(*s && (isdigit(*s) || (*s >= 'a' && *s <= 'f') || (*s >= 'A' && *s <= 'F'))) ++s;			break;		/* %o: octal processing */		case 'o':			while(*s && isspace(*s)) ++s;			ss= s;			if(*s == '+' || *s == '-') ++s;			while(*s && *s >= '0' && *s <= '7') ++s;			break;		/* %d, %e, %f, %g, %u: integer and floating point number processing */		case 'd':		case 'e':		case 'f':		case 'g':		case 'u':			while(*s && isspace(*s)) ++s;			ss= s;			if(*s == '-' || *s == '+') ++s;			while(*s && isdigit(*s)) ++s;			if(*fmt == 'd') break;			if(*s == '.') ++s;			while(*s && isdigit(*s)) ++s;			if(*s == 'e') { /* exponent handling */				++s;				if(*s == '-' || *s == '+') ++s;				while(isdigit(*s) && *s) ++s;				}			break;		/* %%: single character processing */		case '%':			while(*s && isspace(*s)) ++s;			if(*s != *fmt) {				return s;				}			break;		/* %b: slight extension, skips over blanks */		case 'b':			while(*s && isspace(*s)) ++s;			break;		/* unknown */		default:			error(XTDIO_WARNING,"unknown stpnxt code <%s%c%s>\n",			  RD_MAGENTA,			  *fmt,			  RD_GREEN);			break;			}		}	/* white space in control string skipping */	else if(*fmt && isspace(*fmt)) continue;	/* non-white space: must match string */	else {		while(*s && isspace(*s)) ++s;		if(*s != *fmt) {			return s;			}		else {	/* s and c match, so continue forth */			++s;			continue;			}		}	if(s <= ss) {		return ss;		}	}	/* c: loop */return s;}/* --------------------------------------------------------------------- */

⌨️ 快捷键说明

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