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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? misc.c

?? 開發(fā)板bios源碼 開發(fā)板bios源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
 * 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.4 2002/06/11 04:29:26 mstone Exp $
 */

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

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

/********************************* 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') {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精一区二区三区| 蜜桃av一区二区三区| 成人av在线影院| 中文字幕不卡的av| 91免费视频网| 性久久久久久久| 日韩久久久精品| 国产一区二区三区视频在线播放| 国产天堂亚洲国产碰碰| 国产91丝袜在线18| 亚洲免费av高清| 精品1区2区3区| 麻豆精品在线播放| 国产亚洲欧洲997久久综合| 成人动漫视频在线| 一级特黄大欧美久久久| 6080日韩午夜伦伦午夜伦| 国模无码大尺度一区二区三区| 久久综合丝袜日本网| 91亚洲国产成人精品一区二区三 | 99久久精品久久久久久清纯| 国产视频视频一区| 色呦呦网站一区| 日韩精品三区四区| 国产偷国产偷精品高清尤物| 色妞www精品视频| 午夜一区二区三区视频| 精品国产免费人成电影在线观看四季| 成人免费毛片a| 日韩二区三区四区| 国产精品日产欧美久久久久| 欧美喷潮久久久xxxxx| 国产九色精品成人porny| 亚洲精品你懂的| 精品精品国产高清a毛片牛牛| 99精品在线免费| 免费观看30秒视频久久| 中文字幕人成不卡一区| 欧美一区二区免费观在线| 不卡在线视频中文字幕| 日韩av电影天堂| 综合网在线视频| 欧美一区二区美女| 91官网在线观看| 国产成人精品免费看| 欧美aaaaa成人免费观看视频| 中文字幕日韩一区| 精品成人在线观看| 欧美日韩国产乱码电影| 国产成人精品www牛牛影视| 日韩—二三区免费观看av| 亚洲欧美另类在线| 国产亚洲欧美日韩日本| 欧美一区二区三区喷汁尤物| 色天使色偷偷av一区二区| 国产91精品入口| 狠狠色丁香九九婷婷综合五月| 亚洲自拍偷拍av| 亚洲视频一区二区在线| 国产亚洲欧洲997久久综合| 日韩欧美在线不卡| 欧美日韩久久久久久| 色综合天天综合网天天看片| 91免费版在线| 国产精品18久久久久久久久 | 久久99精品国产.久久久久久| 亚洲国产欧美日韩另类综合| 亚洲人快播电影网| 亚洲国产精品ⅴa在线观看| 精品国产百合女同互慰| 欧美一区二区三区视频在线 | 国产在线精品视频| 秋霞午夜鲁丝一区二区老狼| 婷婷国产在线综合| 亚洲mv在线观看| 亚洲成人久久影院| 亚洲国产日韩在线一区模特| 亚洲综合色婷婷| 国产高清无密码一区二区三区| 国产真实乱子伦精品视频| 久久99精品久久久久久国产越南| 麻豆成人综合网| 毛片基地黄久久久久久天堂| 美女精品自拍一二三四| 精品综合久久久久久8888| 韩日av一区二区| 国产福利电影一区二区三区| 豆国产96在线|亚洲| www.欧美日韩| 一本到高清视频免费精品| 日本精品视频一区二区| 欧美性videosxxxxx| 欧美日韩国产电影| 日韩欧美亚洲国产另类| 久久蜜桃av一区精品变态类天堂| 国产欧美中文在线| 亚洲天堂2014| 亚洲线精品一区二区三区| 亚洲18女电影在线观看| 美腿丝袜亚洲综合| 国产麻豆精品在线观看| 成人免费毛片app| 91福利国产成人精品照片| 欧美日韩国产片| 久久人人97超碰com| 国产精品盗摄一区二区三区| 亚洲一区av在线| 久久99精品国产| 97精品久久久久中文字幕| 911精品国产一区二区在线| 欧美不卡123| 国产精品福利在线播放| 午夜精品福利一区二区蜜股av | 欧美国产综合色视频| 伊人夜夜躁av伊人久久| 蜜桃一区二区三区在线| 盗摄精品av一区二区三区| 欧美三级电影在线看| 日韩精品一区在线| 亚洲色图视频网| 麻豆精品新av中文字幕| 91丝袜美腿高跟国产极品老师 | 经典三级一区二区| 91在线看国产| 日韩欧美亚洲国产精品字幕久久久 | 久久se精品一区二区| 99re亚洲国产精品| 日韩丝袜情趣美女图片| 亚洲免费色视频| 韩国三级在线一区| 欧美三级日韩在线| 国产婷婷色一区二区三区在线| 亚洲成人你懂的| 国产91精品久久久久久久网曝门| 欧美日韩卡一卡二| 亚洲欧美一区二区三区极速播放| 欧美在线观看一区| 久久免费视频色| 日韩高清国产一区在线| jiyouzz国产精品久久| 精品国产污污免费网站入口| 一区二区理论电影在线观看| 国产福利一区二区三区在线视频| 67194成人在线观看| 一区二区三区欧美激情| 风间由美一区二区av101| 7777精品久久久大香线蕉| 亚洲欧美一区二区三区久本道91 | 天堂久久久久va久久久久| av在线不卡观看免费观看| 久久人人爽人人爽| 日本不卡高清视频| 欧美性色综合网| 亚洲视频每日更新| 99国产精品久久久久久久久久| 久久久亚洲精品石原莉奈| 久久精品99久久久| 91精品综合久久久久久| 夜色激情一区二区| 91香蕉视频在线| 中文字幕亚洲欧美在线不卡| 成人天堂资源www在线| 国产网站一区二区| 丁香桃色午夜亚洲一区二区三区| 亚洲精品在线三区| 麻豆成人综合网| 日韩免费观看2025年上映的电影| 天堂一区二区在线| 在线电影欧美成精品| 首页国产丝袜综合| 91麻豆精品91久久久久久清纯 | 久久99久久99小草精品免视看| 欧美一区二区三区免费| 琪琪一区二区三区| 91精品蜜臀在线一区尤物| 免费一区二区视频| 日韩欧美在线不卡| 国产精一区二区三区| 国产日韩欧美a| 成人黄色小视频| 中文字幕亚洲一区二区av在线 | 国产精品夜夜嗨| 国产精品日韩成人| 91丨九色丨国产丨porny| 亚洲精品ww久久久久久p站| 欧美色综合天天久久综合精品| 亚洲美女屁股眼交3| 欧美三级视频在线观看| 日韩中文字幕一区二区三区| 精品女同一区二区| 成人18视频日本| 一区二区三区四区在线免费观看| 欧美日韩一区二区三区不卡| 捆绑调教一区二区三区| 久久久久久久久久久99999| 成人app下载| 亚洲mv大片欧洲mv大片精品| 精品日韩在线一区| 成人激情动漫在线观看| 亚洲成人午夜电影|