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

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

?? misc.c

?? 開發板bios源碼 開發板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一区二区三区免费野_久草精品视频
欧美激情艳妇裸体舞| 久久午夜羞羞影院免费观看| 国产精品一区二区在线观看不卡| 视频一区视频二区中文字幕| 日韩精品1区2区3区| 五月激情六月综合| 国产网红主播福利一区二区| 一区二区三区国产| 亚洲天堂精品在线观看| 亚洲欧洲av在线| 亚洲欧美激情一区二区| 日韩美女视频19| 一区二区三区成人| 日本在线不卡一区| 久草在线在线精品观看| 国产麻豆成人精品| 白白色 亚洲乱淫| 日本韩国视频一区二区| 欧美三级电影一区| 欧美大黄免费观看| 国产精品久久精品日日| 亚洲免费观看高清在线观看| 天天影视网天天综合色在线播放 | 亚洲图片欧美视频| 午夜精品福利一区二区三区蜜桃| 男人操女人的视频在线观看欧美| 国产一区二区三区在线观看免费 | 国产精品久久久久久久久果冻传媒 | 欧美日韩激情在线| 精品国产欧美一区二区| 日本一区二区三区久久久久久久久不| 综合网在线视频| 日本美女一区二区| bt7086福利一区国产| 欧美日韩的一区二区| 国产欧美综合色| 午夜视频在线观看一区| 福利一区福利二区| 欧美日韩你懂得| 欧美国产一区二区| 日本在线观看不卡视频| 色婷婷亚洲一区二区三区| 欧美不卡一区二区三区| 一区二区三区中文字幕| 国产在线观看一区二区| 91国产成人在线| 2023国产精华国产精品| 亚洲成人免费视| 99re热视频这里只精品| 久久亚洲捆绑美女| 日韩av网站免费在线| 色偷偷久久一区二区三区| 久久夜色精品国产噜噜av | 蜜桃精品视频在线| 一本到三区不卡视频| 久久理论电影网| 免费看日韩a级影片| 日本丰满少妇一区二区三区| 国产精品蜜臀av| 韩国欧美一区二区| 日韩一区二区电影在线| 亚洲一卡二卡三卡四卡无卡久久| 成人永久免费视频| 国产视频一区二区三区在线观看| 日本欧洲一区二区| 91精品国产色综合久久不卡电影| 一区二区三区四区视频精品免费 | 狠狠色狠狠色合久久伊人| 欧美高清视频在线高清观看mv色露露十八| 欧美韩日一区二区三区| 国产麻豆精品在线| 26uuu久久综合| 精品中文av资源站在线观看| 欧美精品第1页| 亚洲国产另类av| 欧美日韩不卡视频| 日本成人在线不卡视频| 欧美精选一区二区| 日韩av中文字幕一区二区| 欧美日韩国产一区二区三区地区| 亚洲一区二区不卡免费| 91精品欧美一区二区三区综合在| 丝袜脚交一区二区| 日韩精品一区二区三区视频在线观看| 日韩av二区在线播放| 精品国产网站在线观看| 不卡av在线网| 亚洲免费观看高清完整版在线观看| 色综合久久综合中文综合网| 亚洲免费在线电影| 欧美精品777| 精品一区二区三区欧美| 国产欧美日韩另类视频免费观看| 成人国产一区二区三区精品| 一区二区三区不卡视频在线观看 | 日韩一区二区三免费高清| 日本亚洲天堂网| 久久综合久久久久88| 成人黄动漫网站免费app| 亚洲一区二区高清| 精品99一区二区| 91亚洲国产成人精品一区二三| 亚洲丝袜美腿综合| 欧美一区二区三区性视频| 国产麻豆精品一区二区| 亚洲综合在线电影| 欧美精品一区二区三区视频| 成人avav影音| 美洲天堂一区二卡三卡四卡视频 | 99精品黄色片免费大全| 视频一区国产视频| 久久久精品2019中文字幕之3| 91影院在线免费观看| 蜜桃免费网站一区二区三区| 中文字幕免费在线观看视频一区| 欧美三级电影网| 成人性色生活片| 免费在线欧美视频| 亚洲一区二区美女| 欧美国产成人在线| 日韩欧美的一区| 91久久精品一区二区三| 国产精品77777| 日本成人在线看| 亚洲一二三级电影| 国产精品网站导航| 精品久久国产97色综合| 欧美视频一区二区三区四区 | 国产伦精品一区二区三区免费| 成人免费一区二区三区视频| 欧美mv日韩mv亚洲| 欧美久久一区二区| 色综合欧美在线| 91在线精品一区二区三区| 国产一区二区三区久久久 | 国产成人福利片| 日日嗨av一区二区三区四区| 亚洲欧美日韩在线不卡| 国产欧美精品一区二区色综合 | 成人免费观看av| 国产一区二区在线免费观看| 亚洲777理论| 亚洲成人综合网站| 夜夜揉揉日日人人青青一国产精品 | 国产日韩欧美制服另类| 久久一区二区三区四区| 久久女同性恋中文字幕| 久久精品夜夜夜夜久久| 精品国产一区二区三区av性色 | 国产成人午夜高潮毛片| 韩国av一区二区三区| 国内精品免费**视频| 久久99久久99精品免视看婷婷 | 国产成人精品免费视频网站| 精品一区二区三区在线播放视频| 亚洲网友自拍偷拍| 亚洲va欧美va人人爽| 日韩精品一级二级| 三级精品在线观看| 久久av老司机精品网站导航| 久久99精品国产麻豆不卡| 免费在线观看一区| 国产精品综合久久| 成人激情文学综合网| 99久久久精品| 在线观看亚洲精品视频| 91精品国产综合久久精品图片| 欧美一区二区免费视频| 久久免费美女视频| 欧美韩国日本一区| 亚洲综合色区另类av| 日韩制服丝袜先锋影音| 国产一区二区在线看| 不卡av电影在线播放| 欧洲另类一二三四区| 制服丝袜av成人在线看| 国产亚洲一区字幕| 亚洲欧美一区二区不卡| 日产精品久久久久久久性色| 久久99精品久久久久久动态图| 激情五月婷婷综合网| 99re这里只有精品6| 欧美日韩精品二区第二页| 久久综合色鬼综合色| 亚洲区小说区图片区qvod| 三级在线观看一区二区 | 亚洲美女精品一区| 日韩一区精品字幕| 国产精品888| 欧美日韩日日骚| 亚洲国产成人午夜在线一区| 亚洲综合视频网| 成人国产精品免费网站| 在线综合视频播放| 日韩美女视频一区二区 | 亚洲成精国产精品女| 狠狠色狠狠色综合系列| 欧美午夜精品久久久久久孕妇 | 在线视频欧美精品| 精品999在线播放|