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

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

?? value.c

?? 在嵌入式移動設備上實現動態網頁
?? C
?? 第 1 頁 / 共 2 頁
字號:
		else return 1;

	case hex:
	case integer:
	case octal:
		if (v1.value.integer < v2.value.integer)
			return -1;
		else if (v1.value.integer == v2.value.integer)
			return 0;
		else return 1;

	case big:
		return bcompare(v1.value.big, v2.value.big);

	default:
		a_assert(0);
		return 0;
	}
}


/******************************************************************************/
/*
 *	If type mismatch, then coerce types to big.
 *	Note: Known bug, casting of negative bigs to floats doesn't work.
 */

static void coerce_types(register value_t* v1, register value_t* v2)
{
#ifdef FLOATING_POINT_SUPPORT
	if (v1->type == floating) {
		v2->type = floating;
		v2->value.floating = (double) v2->value.integer;
		if (v2->type == big)
			v2->value.floating = (double) v2->value.big[BLOW] +
				(double) v2->value.big[BHIGH] * (double) MAXINT;

	} else if (v2->type == floating) {
		v1->type = floating;
		v1->value.floating = (double) v1->value.integer;
		if (v1->type == big)
			v1->value.floating = (double) v1->value.big[BLOW] +
				(double) v1->value.big[BHIGH] * (double) MAXINT;

	} else if (v1->type == big) {
#else
	if (v1->type == big) {
#endif /* FLOATING_POINT_SUPPORT */
		v2->value.big[BLOW] = value_to_integer(v2);
		if (valueNegative(v2))
			v2->value.big[BHIGH] = -1;
		else
			v2->value.big[BHIGH] = 0;
		v2->type = big;

	} else if (v2->type == big) {
		if (valueNegative(v1))
			v1->value.big[BHIGH] = -1;
		else
			v1->value.big[BHIGH] = 0;
		v1->value.big[BLOW] = value_to_integer(v1);
		v1->type = big;


	} else if (v1->type == integer) {
		v2->value.integer = value_to_integer(v2);
		v2->type = integer;

	} else if (v2->type == integer) {
		v1->value.integer = value_to_integer(v1);
		v1->type = integer;

	} else if (v1->type != integer) {
		v2->type = v1->type;

	} else if (v2->type != integer) {
		v1->type = v2->type;

	}
	a_assert(v1->type == v2->type);
}


/******************************************************************************/
/*
 *	Return true if the value is numeric and negative. Otherwise return 0.
 */

int valueNegative(value_t* vp)
{
	switch (vp->type) {
	default:
	case string:
	case bytes:
		return 0;

#ifdef FLOATING_POINT_SUPPORT
	case floating:
		if (vp->value.floating < 0)
			return 1;
		return 0;
#endif

	case flag:
		if ((signed char)vp->value.flag < 0)
			return 1;
		return 0;

	case byteint:
	case percent:
		if ((signed char)vp->value.byteint < 0)
			return 1;
		return 0;

	case shortint:
		if (vp->value.shortint < 0)
			return 1;
		return 0;

	case hex:
	case integer:
	case octal:
		if (vp->value.integer < 0)
			return 1;
		return 0;

	case big:
		if (vp->value.big[BHIGH] < 0)
			return 1;
		return 0;
	}
}

/******************************************************************************/
/*
 *	Return true if the value is numeric and zero. Otherwise return 0.
 */

int valueZero(value_t* vp)
{
	switch (vp->type) {
	default:
	case string:
	case bytes:
		return 0;

#ifdef FLOATING_POINT_SUPPORT
	case floating:
		if (vp->value.floating == 0)
			return 1;
		return 0;
#endif

	case flag:
		if (vp->value.flag == 0)
			return 1;
		return 0;

	case byteint:
	case percent:
		if (vp->value.byteint == 0)
			return 1;
		return 0;

	case shortint:
		if (vp->value.shortint == 0)
			return 1;
		return 0;

	case hex:
	case integer:
	case octal:
		if (vp->value.integer == 0)
			return 1;
		return 0;

	case big:
		if (vp->value.big[BHIGH] == 0 && vp->value.big[BLOW] == 0)
			return 1;
		return 0;
	}
}


/******************************************************************************/
/*
 *	Cast a value to an integer. Cannot be called for floating, non-numerics
 *	or bigs.
 */

static int value_to_integer(value_t* vp)
{
	switch (vp->type) {
	default:
	case string:
	case bytes:
	case big:
#ifdef FLOATING_POINT_SUPPORT
	case floating:
		a_assert(0);
		return -1;
#endif

	case flag:
		return (int) vp->value.flag;

	case byteint:
	case percent:
		return (int) vp->value.byteint;

	case shortint:
		return (int) vp->value.shortint;

	case hex:
	case integer:
	case octal:
		return (int) vp->value.integer;
	}
}


/******************************************************************************/
/*
 *	Convert a value to a text based representation of its value
 */

void valueSprintf(char_t** out, int size, char_t* fmt, value_t vp)
{
	char_t		*src, *dst, *tmp, *dst_start;

	a_assert(out);

	*out = NULL;

	if (! vp.valid) {
		*out = bstrdup(B_L, T("Invalid"));
		return;
	}

	switch (vp.type) {
	case flag:
		if (fmt == NULL || *fmt == '\0') {
			*out = bstrdup(B_L, (vp.value.flag) ? T("true") : T("false"));
		} else {
			fmtAlloc(out, size, fmt, (vp.value.flag) ? T("true") : T("false"));
		}
		break;

#ifdef FLOATING_POINT_SUPPORT
	case floating:
		if (fmt == NULL || *fmt == '\0') {
			fmtAlloc(out, size, T("%f"), vp.value.floating);
		} else {
			fmtAlloc(out, size, fmt, vp.value.floating);
		}
		break;
#endif

	case hex:
		if (fmt == NULL || *fmt == '\0') {
			fmtAlloc(out, size, T("0x%lx"), vp.value.hex);
		} else {
			fmtAlloc(out, size, fmt, vp.value.hex);
		}
		break;

	case big:
		if (*out == NULL) {
			*out = btoa(vp.value.big, NULL, 0);
		} else {
			btoa(vp.value.big, *out, size);
		}
		break;

	case integer:
		if (fmt == NULL || *fmt == '\0') {
			fmtAlloc(out, size, T("%ld"), vp.value.integer);
		} else {
			fmtAlloc(out, size, fmt, vp.value.integer);
		}
		break;

	case octal:
		if (fmt == NULL || *fmt == '\0') {
			fmtAlloc(out, size, T("0%lo"), vp.value.octal);
		} else {
			fmtAlloc(out, size, fmt, vp.value.octal);
		}
		break;

	case percent:
		if (fmt == NULL || *fmt == '\0') {
			fmtAlloc(out, size, T("%d%%"), vp.value.percent);
		} else {
			fmtAlloc(out, size, fmt, vp.value.percent);
		}
		break;

	case byteint:
		if (fmt == NULL || *fmt == '\0') {
			fmtAlloc(out, size, T("%d"), (int) vp.value.byteint);
		} else {
			fmtAlloc(out, size, fmt, (int) vp.value.byteint);
		}
		break;

	case shortint:
		if (fmt == NULL || *fmt == '\0') {
			fmtAlloc(out, size, T("%d"), (int) vp.value.shortint);
		} else {
			fmtAlloc(out, size, fmt, (int) vp.value.shortint);
		}
		break;

	case string:
	case errmsg:
		src = vp.value.string;

		if (src == NULL) {
			*out = bstrdup(B_L, T("NULL"));
		} else if (fmt && *fmt) {
			fmtAlloc(out, size, fmt, src);

		} else {

			*out = balloc(B_L, size);
			dst_start = dst = *out;
			for (; *src != '\0'; src++) {
				if (dst >= &dst_start[VALUE_MAX_STRING - 5])
					break;
				switch (*src) {
				case '\a':	*dst++ = '\\';	*dst++ = 'a';		break;
				case '\b':	*dst++ = '\\';	*dst++ = 'b';		break;
				case '\f':	*dst++ = '\\';	*dst++ = 'f';		break;
				case '\n':	*dst++ = '\\';	*dst++ = 'n';		break;
				case '\r':	*dst++ = '\\';	*dst++ = 'r';		break;
				case '\t':	*dst++ = '\\';	*dst++ = 't';		break;
				case '\v':	*dst++ = '\\';	*dst++ = 'v';		break;
				case '\\':	*dst++ = '\\';	*dst++ = '\\';		break;
				case '"':	*dst++ = '\\';	*dst++ = '\"';		break;
				default:
					if (gisprint(*src)) {
						*dst++ = *src;
					} else {
						fmtAlloc(&tmp, size, T("\\x%02x"),
							(unsigned int) *src);
						gstrcpy(dst, tmp);
						bfreeSafe(B_L, tmp);
						dst += 4;
					}
					break;
				}
			}
			*dst++ = '\0';
		}
		break;

#ifdef UNUSED
	case bytes:
		asrc = vp.value.bytes;

		if (asrc == NULL) {
			*out = bstrdup(B_L, T("NULL"));

		} else if (fmt && *fmt) {
			fmtAlloc(out, size, fmt, asrc);

		} else {

			dst_start = dst;
			for (; *asrc != '\0'; asrc++) {
				if (dst >= &dst_start[VALUE_MAX_STRING - 5])
					break;
				switch (*asrc) {
				case '\a':	*dst++ = '\\';	*dst++ = 'a';		break;
				case '\b':	*dst++ = '\\';	*dst++ = 'b';		break;
				case '\f':	*dst++ = '\\';	*dst++ = 'f';		break;
				case '\n':	*dst++ = '\\';	*dst++ = 'n';		break;
				case '\r':	*dst++ = '\\';	*dst++ = 'r';		break;
				case '\t':	*dst++ = '\\';	*dst++ = 't';		break;
				case '\v':	*dst++ = '\\';	*dst++ = 'v';		break;
				case '\\':	*dst++ = '\\';	*dst++ = '\\';		break;
				case '"':	*dst++ = '\\';	*dst++ = '\"';		break;
				default:
					if (gisprint(*asrc)) {
						*dst++ = *asrc;
					} else {
						fmtAlloc(dst, size,
							T("\\x%02x"), (unsigned int) *asrc);
						dst += 4;
					}
					break;
				}
			}
			*dst++ = '\0';
		}
		break;
#endif

	default:
		a_assert(0);
	}
}

/******************************************************************************/
/*
 *	Print a value to the named file descriptor
 */

void valueFprintf(FILE* fp, char_t* fmt, value_t vp)
{
	char_t	*buf;

	buf = NULL;
	valueSprintf(&buf, VALUE_MAX_STRING, fmt, vp);
	gfputs(buf, fp);
	bfreeSafe(B_L, buf);
	fflush(fp);
}

/******************************************************************************/
/*
 *	Ascii to value conversion
 */

value_t valueAtov(char_t* s, int pref_type)
{
	vtype_t	type;
	value_t			v;
	long			tmp[2], tmp2[2], base[2];
	int				i, len, num;

	a_assert(0 <= pref_type && pref_type < 99);		/* Sanity check */
	a_assert(s);

	v = value_null;
	if (s == NULL) {
		return value_null;
	}

	base[BLOW] = 10;
	base[BHIGH] = 0;
	len = gstrlen(s);

/*
 *	Determine the value type
 */
	type = undefined;
	if (pref_type <= 0) {
		if (gisdigit(*s)) {
			base[BHIGH] = 0;
			if (s[len - 1] == '%') {
				type = percent;
				len --;
				base[BLOW] = 10;
			} else if (*s == '0') {
				if (s[1] == 'x') {
					type = hex;
					s += 2;
					len -= 2;
					base[BLOW] = 16;
				} else if (s[1] == '\0') {
					type = integer;
					base[BLOW] = 10;
				} else {
					type = octal;
					s++;
					len--;
					base[BLOW] = 8;
				}
			} else {
				type = integer;
				base[BLOW] = 10;
			}

		} else {
			if (gstrcmp(s, T("true")) == 0 || gstrcmp(s, T("false")) == 0) {
				type = flag;
			} else if (*s == '\'' && s[len - 1] == '\'') {
				type = string;
				s++;
				len -= 2;
			} else if (*s == '\"' && s[len - 1] == '\"') {
				type = string;
				s++;
				len -= 2;
			} else {
				type = string;
			}
		}
		v.type = type;

	} else
		v.type = pref_type;
	v.valid = 1;

/*
 *	Do the conversion. Always use big arithmetic
 */
	switch (v.type) {
	case hex:
		if (!isdigit(s[0])) {
			if (gtolower(s[0]) >= 'a' || gtolower(s[0]) <= 'f') {
				v.value.big[BLOW] = 10 + gtolower(s[0]) - 'a';
			} else {
				v.value.big[BLOW] = 0;
			}
		} else {
			v.value.big[BLOW] = s[0] - '0';
		}
		v.value.big[BHIGH] = 0;
		for (i = 1; i < len; i++) {
			if (!isdigit(s[i])) {
				if (gtolower(s[i]) < 'a' || gtolower(s[i]) > 'f') {
					break;
				}
				num = 10 + gtolower(s[i]) - 'a';
			} else {
				num = s[i] - '0';
			}
			bmul(tmp, v.value.big, base);
			binit(tmp2, 0, num);
			badd(v.value.big, tmp, tmp2);
		}
		v.value.hex = v.value.big[BLOW];
		break;

	case shortint:
	case byteint:
	case integer:
	case percent:
	case octal:
	case big:
		v.value.big[BHIGH] = 0;
		if (gisdigit(s[0]))
			v.value.big[BLOW] = s[0] - '0';
		else
			v.value.big[BLOW] = 0;
		for (i = 1; i < len && gisdigit(s[i]); i++) {
			bmul(tmp, v.value.big, base);
			binit(tmp2, 0, s[i] - '0');
			badd(v.value.big, tmp, tmp2);
		}
		switch (v.type) {
		case shortint:
			v.value.shortint = (short) v.value.big[BLOW];
			break;
		case byteint:
			v.value.byteint = (char) v.value.big[BLOW];
			break;
		case integer:
			v.value.integer = (int) v.value.big[BLOW];
			break;
		case percent:
			v.value.percent = (char) v.value.big[BLOW];
			break;
		case octal:
			v.value.octal = (int) v.value.big[BLOW];
			break;
		default:
			break;
		}
		break;

#ifdef FLOATING_POINT_SUPPORT
	case floating:
		gsscanf(s, T("%f"), &v.value.floating);
		break;
#endif

	case flag:
		if (*s == 't')
			v.value.flag = 1;
		else v.value.flag = 0;
		break;

	case string:
/*
 *		Note this always ballocs a string
 */
		v = valueString(s, VALUE_ALLOCATE);
		break;

	case bytes:
		v = valueBytes((char*) s, VALUE_ALLOCATE);
		break;

#ifdef UNUSED
	case literal:
		v = value_literal(bstrdup(B_L, s));
		v.value.literal[len] = '\0';
		break;
#endif

	case undefined:
	case symbol:
	default:
		v.valid = 0;
		a_assert(0);
	}
	return v;
}

#endif /* !UEMF */
/******************************************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕av不卡| 欧美性色欧美a在线播放| 欧美不卡123| 久久aⅴ国产欧美74aaa| 久久综合色婷婷| 国产高清精品久久久久| 国产精品麻豆一区二区| 色综合一个色综合| 日本午夜精品视频在线观看| 精品久久久网站| 99在线精品一区二区三区| 一区二区三区四区不卡视频| 欧美一区二区三区四区在线观看| 精品中文字幕一区二区| 欧美国产一区二区在线观看 | 日欧美一区二区| 精品国产乱码久久久久久影片| 国产精品亚洲午夜一区二区三区| 中文字幕在线一区| 91精品久久久久久久99蜜桃| 久久99国产精品麻豆| 久久夜色精品一区| 成人网在线播放| 一区二区三区免费看视频| 欧美日韩综合一区| 免费观看一级特黄欧美大片| 国产亚洲1区2区3区| 韩国三级在线一区| 欧美国产精品一区二区三区| 日本高清不卡视频| 免费美女久久99| 中文字幕第一区二区| 在线观看免费亚洲| 精品在线一区二区三区| 中文字幕第一区二区| 欧美制服丝袜第一页| 美女国产一区二区三区| 欧美激情在线一区二区| 欧美亚洲国产一区二区三区| 麻豆国产精品一区二区三区| 国产精品色呦呦| 欧美伦理视频网站| 国产成人亚洲综合色影视| 亚洲欧美成人一区二区三区| 精品国产乱码久久久久久夜甘婷婷 | 亚洲小少妇裸体bbw| 日韩欧美高清dvd碟片| 播五月开心婷婷综合| 日本系列欧美系列| 亚洲欧洲无码一区二区三区| 欧美剧情片在线观看| 国产一区二区h| 午夜精品久久久久久久蜜桃app| 欧美videossexotv100| 欧美亚洲综合久久| 国产精品一区2区| 丝袜美腿高跟呻吟高潮一区| 一区免费观看视频| 久久精品亚洲麻豆av一区二区 | 久久精品国产精品亚洲精品| 国产精品视频一二三区| 欧美精品一区二区三区视频| 欧美日韩视频专区在线播放| 成人av在线资源网| 日韩电影免费在线观看网站| 亚洲女女做受ⅹxx高潮| 欧美国产禁国产网站cc| 精品久久久影院| 欧美精品aⅴ在线视频| 国产欧美日韩三区| 国内国产精品久久| 五月婷婷色综合| 亚洲色图丝袜美腿| 欧美国产欧美综合| 精品999久久久| 国产精品高潮呻吟| 污片在线观看一区二区| 99精品桃花视频在线观看| 欧美不卡123| 午夜精品影院在线观看| 色欧美乱欧美15图片| 日本一区二区视频在线观看| 久草热8精品视频在线观看| 欧美少妇xxx| 亚洲午夜私人影院| 在线观看日韩毛片| 亚洲美腿欧美偷拍| 一本色道亚洲精品aⅴ| 中文字幕亚洲视频| av一区二区三区四区| 亚洲国产精品成人综合| 久久精品国产在热久久| 欧美一级在线免费| 国产一区二区三区| 国产日韩欧美精品一区| 丰满白嫩尤物一区二区| 国产丝袜美腿一区二区三区| 国产精品一区二区三区四区| 国产无遮挡一区二区三区毛片日本| 精品一区精品二区高清| 精品国产99国产精品| 韩国欧美国产1区| 日本一区二区三区四区在线视频| 国产成人午夜精品影院观看视频| 欧美高清在线一区| 99视频有精品| 亚洲一区在线看| 欧美日韩成人一区| 老司机午夜精品| 国产亚洲一区二区在线观看| 成人综合婷婷国产精品久久蜜臀| 国产日韩一级二级三级| 蜜臀久久99精品久久久久宅男 | 2021国产精品久久精品| 国产一区日韩二区欧美三区| 中文字幕不卡的av| 日本丶国产丶欧美色综合| 亚洲福利一区二区三区| 日韩免费视频一区| 粗大黑人巨茎大战欧美成人| 亚洲免费在线视频| 欧美一区二区在线观看| 国产电影精品久久禁18| 亚洲黄色片在线观看| 日韩欧美国产综合在线一区二区三区| 精彩视频一区二区三区| 亚洲精品视频在线看| 日韩欧美国产小视频| 成人av在线一区二区| 亚洲福利视频一区二区| 欧美疯狂做受xxxx富婆| 国产在线不卡一区| 日韩av一二三| 亚洲人成网站色在线观看| 日韩欧美123| 欧美在线观看一区| 国产成人日日夜夜| 日本午夜精品视频在线观看| ...xxx性欧美| 精品国产制服丝袜高跟| 在线亚洲人成电影网站色www| 久久机这里只有精品| 国产精品国产三级国产专播品爱网| 99精品视频在线免费观看| 精品夜夜嗨av一区二区三区| 一区二区三区精品久久久| 国产婷婷色一区二区三区| 欧美一级片在线看| 欧美日韩午夜在线| 国产精品456露脸| 蜜芽一区二区三区| 亚洲成人精品影院| 久久日韩精品一区二区五区| 欧美这里有精品| 91久久精品午夜一区二区| 国产精品亚洲综合一区在线观看| 日韩av中文字幕一区二区三区| 亚洲一区av在线| 亚洲综合色区另类av| 精品sm在线观看| 在线看一区二区| 欧美性videosxxxxx| 欧洲亚洲精品在线| 91九色最新地址| aaa欧美日韩| 99久久婷婷国产综合精品电影 | 国产原创一区二区| 一级做a爱片久久| 亚洲美女在线国产| 一级中文字幕一区二区| 亚洲影院免费观看| 亚洲国产精品欧美一二99| 亚洲一区二区黄色| 婷婷久久综合九色国产成人 | 日韩美一区二区三区| 欧美三级三级三级爽爽爽| 欧美日韩一区二区欧美激情| 欧美精品1区2区| 3d动漫精品啪啪| 精品不卡在线视频| 欧美极品少妇xxxxⅹ高跟鞋| 中文字幕欧美一区| 亚洲综合免费观看高清在线观看| 亚洲综合激情网| 日韩av在线发布| 日韩激情av在线| 成年人网站91| 色综合激情久久| 911国产精品| 精品播放一区二区| 亚洲欧洲韩国日本视频| 一区二区在线免费| 天堂午夜影视日韩欧美一区二区| 久久精品久久综合| 成人午夜在线免费| 欧美喷潮久久久xxxxx| 久久九九影视网| 中文一区在线播放| 婷婷一区二区三区| 丁香天五香天堂综合|