亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? misc.c

?? 在嵌入式移動(dòng)設(shè)備上實(shí)現(xiàn)動(dòng)態(tài)網(wǎng)頁(yè)
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/*
 * misc.c -- Miscellaneous routines.
 *
 * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved.
 *
 * See the file "license.txt" for usage and redistribution license requirements
 *
 * $Id: misc.c,v 1.6 2003/09/29 19:50:24 bporter Exp $
 */

/********************************* Includes ***********************************/

#ifdef UEMF
	#include	"uemf.h"
#else
	#include	"basic/basicInternal.h"
#endif

/*
 * 16 Sep 03 -- added option to use memcpy() instead of strncpy() in the
 * ascToUni and uniToAsc functions. 
 */
#define kUseMemcopy


/********************************* Defines ************************************/
/*
 *	Sprintf buffer structure. Make the increment 64 so that
 *	a balloc can use a 64 byte block.
 */

#define STR_REALLOC		0x1				/* Reallocate the buffer as required */
#define STR_INC			64				/* Growth increment */

typedef struct {
	char_t	*s;							/* Pointer to buffer */
	int		size;						/* Current buffer size */
	int		max;						/* Maximum buffer size */
	int		count;						/* Buffer count */
	int		flags;						/* Allocation flags */
} strbuf_t;

/*
 *	Sprintf formatting flags
 */
enum flag {
	flag_none = 0,
	flag_minus = 1,
	flag_plus = 2,
	flag_space = 4,
	flag_hash = 8,
	flag_zero = 16,
	flag_short = 32,
	flag_long = 64
};

/************************** Forward Declarations ******************************/

static int 	dsnprintf(char_t **s, int size, char_t *fmt, va_list arg,
				int msize);
static int	strnlen(char_t *s, unsigned int n);
static void	put_char(strbuf_t *buf, char_t c);
static void	put_string(strbuf_t *buf, char_t *s, int len,
				int width, int prec, enum flag f);
static void	put_ulong(strbuf_t *buf, unsigned long int value, int base,
				int upper, char_t *prefix, int width, int prec, enum flag f);

/************************************ Code ************************************/
/*
 *	"basename" returns a pointer to the last component of a pathname
 *  LINUX, LynxOS and Mac OS X have their own basename function
 */

#if (!defined (LINUX) && !defined (LYNX) && !defined (MACOSX))
char_t *basename(char_t *name)
{
	char_t	*cp;

#if (defined (NW) || defined (WIN))
	if (((cp = gstrrchr(name, '\\')) == NULL) &&
			((cp = gstrrchr(name, '/')) == NULL)) {
		return name;
#else
	if ((cp = gstrrchr(name, '/')) == NULL) {
		return name;
#endif
	} else if (*(cp + 1) == '\0' && cp == name) {
		return name;
	} else if (*(cp + 1) == '\0' && cp != name) {
		return T("");
	} else {
		return ++cp;
	}
}
#endif /* ! LINUX & ! LYNX & ! MACOSX */

/******************************************************************************/
/*
 *	Returns a pointer to the directory component of a pathname. bufsize is
 *	the size of the buffer in BYTES!
 */

char_t *dirname(char_t *buf, char_t *name, int bufsize)
{
	char_t *cp;
	int		len;

	a_assert(name);
	a_assert(buf);
	a_assert(bufsize > 0);

#if (defined (WIN) || defined (NW))
	if ((cp = gstrrchr(name, '/')) == NULL && 
		(cp = gstrrchr(name, '\\')) == NULL)
#else
	if ((cp = gstrrchr(name, '/')) == NULL)
#endif
	{
		gstrcpy(buf, T("."));
		return buf;
	}

	if ((*(cp + 1) == '\0' && cp == name)) {
		gstrncpy(buf, T("."), TSZ(bufsize));
		gstrcpy(buf, T("."));
		return buf;
	}

	len = cp - name;

	if (len < bufsize) {
		gstrncpy(buf, name, len);
		buf[len] = '\0';
	} else {
		gstrncpy(buf, name, TSZ(bufsize));
		buf[bufsize - 1] = '\0';
	}

	return buf;
}


/******************************************************************************/
/*
 *	sprintf and vsprintf are bad, ok. You can easily clobber memory. Use
 *	fmtAlloc and fmtValloc instead! These functions do _not_ support floating
 *	point, like %e, %f, %g...
 */

int fmtAlloc(char_t **s, int n, char_t *fmt, ...)
{
	va_list	ap;
	int		result;

	a_assert(s);
	a_assert(fmt);

	*s = NULL;
	va_start(ap, fmt);
	result = dsnprintf(s, n, fmt, ap, 0);
	va_end(ap);
	return result;
}

/******************************************************************************/
/*
 *	Support a static buffer version for small buffers only!
 */

int fmtStatic(char_t *s, int n, char_t *fmt, ...)
{
	va_list	ap;
	int		result;

	a_assert(s);
	a_assert(fmt);
	a_assert(n <= 256);

	if (n <= 0) {
		return -1;
	}
	va_start(ap, fmt);
	result = dsnprintf(&s, n, fmt, ap, 0);
	va_end(ap);
	return result;
}

/******************************************************************************/
/*
 *	This function appends the formatted string to the supplied string,
 *	reallocing if required.
 */

int fmtRealloc(char_t **s, int n, int msize, char_t *fmt, ...)
{
	va_list	ap;
	int		result;

	a_assert(s);
	a_assert(fmt);

	if (msize == -1) {
		*s = NULL;
	}
	va_start(ap, fmt);
	result = dsnprintf(s, n, fmt, ap, msize);
	va_end(ap);
	return result;
}

/******************************************************************************/
/*
 *	A vsprintf replacement.
 */

int fmtValloc(char_t **s, int n, char_t *fmt, va_list arg)
{
	a_assert(s);
	a_assert(fmt);

	*s = NULL;
	return dsnprintf(s, n, fmt, arg, 0);
}

/******************************************************************************/
/*
 *	Dynamic sprintf implementation. Supports dynamic buffer allocation.
 *	This function can be called multiple times to grow an existing allocated
 *	buffer. In this case, msize is set to the size of the previously allocated
 *	buffer. The buffer will be realloced, as required. If msize is set, we
 *	return the size of the allocated buffer for use with the next call. For
 *	the first call, msize can be set to -1.
 */

static int dsnprintf(char_t **s, int size, char_t *fmt, va_list arg, int msize)
{
	strbuf_t	buf;
	char_t		c;

	a_assert(s);
	a_assert(fmt);

	memset(&buf, 0, sizeof(buf));
	buf.s = *s;

	if (*s == NULL || msize != 0) {
		buf.max = size;
		buf.flags |= STR_REALLOC;
		if (msize != 0) {
			buf.size = max(msize, 0);
		}
		if (*s != NULL && msize != 0) {
			buf.count = gstrlen(*s);
		}
	} else {
		buf.size = size;
	}

	while ((c = *fmt++) != '\0') {
		if (c != '%' || (c = *fmt++) == '%') {
			put_char(&buf, c);
		} else {
			enum flag f = flag_none;
			int width = 0;
			int prec = -1;
			for ( ; c != '\0'; c = *fmt++) {
				if (c == '-') { 
					f |= flag_minus; 
				} else if (c == '+') { 
					f |= flag_plus; 
				} else if (c == ' ') { 
					f |= flag_space; 
				} else if (c == '#') { 
					f |= flag_hash; 
				} else if (c == '0') { 
					f |= flag_zero; 
				} else {
					break;
				}
			}
			if (c == '*') {
				width = va_arg(arg, int);
				if (width < 0) {
					f |= flag_minus;
					width = -width;
				}
				c = *fmt++;
			} else {
				for ( ; gisdigit((int)c); c = *fmt++) {
					width = width * 10 + (c - '0');
				}
			}
			if (c == '.') {
				f &= ~flag_zero;
				c = *fmt++;
				if (c == '*') {
					prec = va_arg(arg, int);
					c = *fmt++;
				} else {
					for (prec = 0; gisdigit((int)c); c = *fmt++) {
						prec = prec * 10 + (c - '0');
					}
				}
			}
			if (c == 'h' || c == 'l') {
				f |= (c == 'h' ? flag_short : flag_long);
				c = *fmt++;
			}
			if (c == 'd' || c == 'i') {
				long int value;
				if (f & flag_short) {
					value = (short int) va_arg(arg, int);
				} else if (f & flag_long) {
					value = va_arg(arg, long int);
				} else {
					value = va_arg(arg, int);
				}
				if (value >= 0) {
					if (f & flag_plus) {
						put_ulong(&buf, value, 10, 0, T("+"), width, prec, f);
					} else if (f & flag_space) {
						put_ulong(&buf, value, 10, 0, T(" "), width, prec, f);
					} else {
						put_ulong(&buf, value, 10, 0, NULL, width, prec, f);
					}
				} else {
					put_ulong(&buf, -value, 10, 0, T("-"), width, prec, f);
				}
			} else if (c == 'o' || c == 'u' || c == 'x' || c == 'X') {
				unsigned long int value;
				if (f & flag_short) {
					value = (unsigned short int) va_arg(arg, unsigned int);
				} else if (f & flag_long) {
					value = va_arg(arg, unsigned long int);
				} else {
					value = va_arg(arg, unsigned int);
				}
				if (c == 'o') {
					if (f & flag_hash && value != 0) {
						put_ulong(&buf, value, 8, 0, T("0"), width, prec, f);
					} else {
						put_ulong(&buf, value, 8, 0, NULL, width, prec, f);
					}
				} else if (c == 'u') {
					put_ulong(&buf, value, 10, 0, NULL, width, prec, f);
				} else {

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品视频观看| 91精品久久久久久久久99蜜臂| 精品99一区二区三区| 久久精品国产精品亚洲精品| 日韩免费性生活视频播放| 日韩一区欧美二区| 精品国产1区2区3区| 国产成人亚洲精品青草天美| 中文无字幕一区二区三区| av成人免费在线观看| 亚洲蜜臀av乱码久久精品蜜桃| 欧洲一区在线电影| 免费看欧美女人艹b| 精品国产一区久久| 国产aⅴ精品一区二区三区色成熟| 欧美国产日本视频| 欧美特级限制片免费在线观看| 香蕉加勒比综合久久| 日韩欧美久久一区| 国产成人免费网站| 一区二区三区在线视频播放| 欧美妇女性影城| 国产露脸91国语对白| 亚洲乱码日产精品bd| 777久久久精品| 国产91丝袜在线播放0| 一区二区三区免费观看| 精品少妇一区二区三区在线视频| 国产精选一区二区三区| 亚洲精品国产无天堂网2021 | 成人午夜av在线| 亚洲精品国产一区二区三区四区在线| 7777精品伊人久久久大香线蕉超级流畅 | 国产欧美精品一区| 在线免费不卡视频| 久久国产婷婷国产香蕉| 亚洲精品久久嫩草网站秘色| 精品播放一区二区| 欧美亚洲国产怡红院影院| 久久不见久久见免费视频7| 亚洲婷婷综合色高清在线| 91精品国产91热久久久做人人 | av电影在线观看一区| 蜜桃av一区二区三区电影| 日韩毛片一二三区| 久久综合九色综合欧美就去吻| 91蝌蚪porny九色| 久久99精品网久久| 亚洲成人黄色影院| 18成人在线观看| 久久久国产精华| 欧美一区二区视频在线观看2020| jiyouzz国产精品久久| 黄色成人免费在线| 午夜精品一区二区三区免费视频| 国产精品国产自产拍高清av | 精品国产乱码久久久久久图片 | 日韩精品电影一区亚洲| 国产精品国产三级国产普通话蜜臀| 91精品国产全国免费观看| 欧日韩精品视频| 91网站在线播放| 粉嫩蜜臀av国产精品网站| 极品少妇一区二区| 美女视频黄久久| 中文字幕一区二区三区在线播放| 日韩你懂的在线播放| 欧美一区二区在线视频| 欧美吞精做爰啪啪高潮| 91成人在线精品| 成人午夜看片网址| 国产不卡一区视频| 国产乱一区二区| 激情欧美一区二区| 国产精品一区二区视频| 久久99精品久久久久久国产越南| 人人爽香蕉精品| 日韩电影免费在线观看网站| 天天色天天爱天天射综合| 天天色 色综合| 蜜臀av一区二区| 麻豆高清免费国产一区| 久久激五月天综合精品| 日韩精品色哟哟| 麻豆精品视频在线观看免费| 蜜臀国产一区二区三区在线播放| 日本不卡在线视频| 麻豆成人久久精品二区三区小说| 久久精品国产成人一区二区三区| 国产主播一区二区| 成人午夜视频网站| 一本到高清视频免费精品| 色婷婷综合久久久中文字幕| 欧美亚洲愉拍一区二区| 欧美日韩aaaaaa| 欧美大片在线观看一区| 国产日韩欧美精品在线| 国产精品灌醉下药二区| 亚洲已满18点击进入久久| 污片在线观看一区二区| 国内精品免费**视频| 成人性色生活片免费看爆迷你毛片| 91丨porny丨国产| 精品视频1区2区3区| 精品精品国产高清一毛片一天堂| 国产午夜一区二区三区| 亚洲美女视频一区| 日本系列欧美系列| 国产精品一卡二| 一本大道久久a久久综合婷婷| 欧美日韩一区二区三区视频| 精品久久久久久最新网址| 国产精品蜜臀av| 亚洲成人自拍一区| 国产福利91精品一区| 在线视频一区二区三区| 精品国产一区二区三区忘忧草 | 亚洲激情自拍偷拍| 日本欧美久久久久免费播放网| 国产成人精品免费一区二区| 97se亚洲国产综合自在线观| 91精品国产综合久久久蜜臀图片| 国产日韩精品一区| 午夜精品久久久久久久久久| 国产一区美女在线| 欧洲一区二区三区在线| 久久精品日产第一区二区三区高清版| 亚洲精品中文在线影院| 国产又黄又大久久| 欧美特级限制片免费在线观看| 久久视频一区二区| 亚洲成人一区在线| 国产成人亚洲综合a∨猫咪| 911精品产国品一二三产区| 国产精品久久久久永久免费观看 | 韩国v欧美v日本v亚洲v| 91在线视频免费观看| 精品久久国产字幕高潮| 亚洲一区二区高清| 在线成人免费观看| 中文乱码免费一区二区| 精一区二区三区| 欧美日韩你懂得| 亚洲欧美国产三级| 国产精品亚洲一区二区三区妖精| 欧美卡1卡2卡| 亚洲黄色小视频| 波多野结衣中文一区| 精品国产精品网麻豆系列| 丝袜亚洲另类欧美| 色嗨嗨av一区二区三区| 国产精品久久久久久久蜜臀 | 99久久久精品| 国产日产欧美一区二区三区 | 成人小视频免费观看| 精品久久国产97色综合| 狂野欧美性猛交blacked| 欧美日韩一卡二卡三卡| 亚洲精品免费看| 色视频欧美一区二区三区| 国产精品私房写真福利视频| 国产九色精品成人porny| 久久色视频免费观看| 久久99精品久久久久久动态图 | 国产美女一区二区| 日韩欧美精品在线| 日本不卡视频在线| 91精品中文字幕一区二区三区| 亚洲成人av一区二区| 欧美性大战久久| 视频一区中文字幕| 欧美日韩中文字幕一区二区| 亚洲国产一二三| 久久婷婷色综合| 国产不卡视频在线播放| 欧美极品另类videosde| 成人免费高清在线| 中文字幕一区日韩精品欧美| 91色.com| 午夜欧美在线一二页| 在线不卡一区二区| 美女看a上一区| 2023国产精品自拍| 成人黄页在线观看| 亚洲视频在线观看三级| 91福利视频久久久久| 午夜精品在线看| 26uuu精品一区二区三区四区在线| 国产一区二区免费看| 国产精品无码永久免费888| 91亚洲精品一区二区乱码| 亚洲国产综合色| 精品区一区二区| 成人18精品视频| 亚洲国产精品视频| 欧美精品一区二区三区在线| 成人午夜电影网站| 午夜av区久久| 国产视频一区二区在线| 91国产精品成人|