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

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

?? printf.c

?? Ports_for_CF5213.zip 接口程序;接口程序;
?? C
字號:
/*
 * File:		printk.c
 * Purpose:		The standard C library routine printf(), but without
 *				all the baggage.
 */

#include "common.h"
#include <stdarg.h>

/********************************************************************/

typedef struct
{
	int	dest;
	void (*func)(char);
	char *loc;
} PRINTK_INFO;

int 
printk (PRINTK_INFO *, const char *, va_list);

/********************************************************************/

#define DEST_CONSOLE	(1)
#define DEST_STRING		(2)

#define FLAGS_MINUS		(0x01)
#define FLAGS_PLUS		(0x02)
#define FLAGS_SPACE		(0x04)
#define FLAGS_ZERO		(0x08)
#define FLAGS_POUND		(0x10)

#define IS_FLAG_MINUS(a)	(a & FLAGS_MINUS)
#define IS_FLAG_PLUS(a)		(a & FLAGS_PLUS)
#define IS_FLAG_SPACE(a)	(a & FLAGS_SPACE)
#define IS_FLAG_ZERO(a)		(a & FLAGS_ZERO)
#define IS_FLAG_POUND(a)	(a & FLAGS_POUND)

#define LENMOD_h		(0x01)
#define LENMOD_l		(0x02)
#define LENMOD_L		(0x04)

#define IS_LENMOD_h(a)	(a & LENMOD_h)
#define IS_LENMOD_l(a)	(a & LENMOD_l)
#define IS_LENMOD_L(a)	(a & LENMOD_L)

#define FMT_d	(0x0001)
#define FMT_o	(0x0002)
#define FMT_x	(0x0004)
#define FMT_X	(0x0008)
#define FMT_u	(0x0010)
#define FMT_c	(0x0020)
#define FMT_s	(0x0040)
#define FMT_p	(0x0080)
#define FMT_n	(0x0100)

#define IS_FMT_d(a)		(a & FMT_d)
#define IS_FMT_o(a)		(a & FMT_o)
#define IS_FMT_x(a)		(a & FMT_x)
#define IS_FMT_X(a)		(a & FMT_X)
#define IS_FMT_u(a)		(a & FMT_u)
#define IS_FMT_c(a)		(a & FMT_c)
#define IS_FMT_s(a)		(a & FMT_s)
#define IS_FMT_p(a)		(a & FMT_p)
#define IS_FMT_n(a)		(a & FMT_n)

/********************************************************************/
static void
printk_putc (int c, int *count, PRINTK_INFO *info)
{
	switch (info->dest)
	{
		case DEST_CONSOLE:
			info->func((char)c);
			break;
		case DEST_STRING:
			*(info->loc) = (unsigned char)c;
			++(info->loc);
			break;
		default:
			break;
	}
	*count += 1;
}

/********************************************************************/
static int
printk_mknumstr (char *numstr, void *nump, int neg, int radix)
{
	int a,b,c;
	unsigned int ua,ub,uc;

	int nlen;
	char *nstrp;

	nlen = 0;
	nstrp = numstr;
	*nstrp++ = '\0';

	if (neg)
	{
		a = *(int *)nump;
		if (a == 0)
		{
			*nstrp = '0';
			++nlen;
			goto done;
		}
		while (a != 0)
		{
			b = (int)a / (int)radix;
			c = (int)a - ((int)b * (int)radix);
			if (c < 0)
			{
				c = ~c + 1 + '0';
			}
			else
			{
				c = c + '0';
			}
			a = b;
			*nstrp++ = (char)c;
			++nlen;
		}
	}
	else
	{
		ua = *(unsigned int *)nump;
		if (ua == 0)
		{
			*nstrp = '0';
			++nlen;
			goto done;
		}
		while (ua != 0)
		{
			ub = (unsigned int)ua / (unsigned int)radix;
			uc = (unsigned int)ua - ((unsigned int)ub * (unsigned int)radix);
			if (uc < 10)
			{
				uc = uc + '0';
			}
			else
			{
				uc = uc - 10 + 'A';
			}
			ua = ub;
			*nstrp++ = (char)uc;
			++nlen;
		}
	}
	done:
	return nlen;
}

/********************************************************************/
static void
printk_pad_zero (int curlen, int field_width, int *count, PRINTK_INFO *info)
{
	int i;

	for (i = curlen; i < field_width; i++)
	{
		printk_putc('0',count, info);
	}
}

/********************************************************************/
static void
printk_pad_space (int curlen, int field_width, int *count, PRINTK_INFO *info)
{
	int i;

	for (i = curlen; i < field_width; i++)
	{
		printk_putc(' ',count, info);
	}
}

/********************************************************************/
int
printk (PRINTK_INFO *info, const char *fmt, va_list ap)
{
	/* va_list ap; */
	char *p;
	int c;

	char vstr[33];
	char *vstrp;
	int vlen;

	int done;
	int count = 0;

	int	flags_used;
	int	field_width;
#if 0
	int	precision_used;
	int	precision_width;
	int	length_modifier;
#endif

	int	ival;
	int schar, dschar;
	int *ivalp;
	char *sval;
	int cval;
	unsigned int uval;

	/*
	 * Start parsing apart the format string and display appropriate
	 * formats and data.
	 */
	for (p = (char *)fmt; (c = *p) != 0; p++)
	{
		/*
		 * All formats begin with a '%' marker.  Special chars like
		 * '\n' or '\t' are normally converted to the appropriate
		 * character by the __compiler__.  Thus, no need for this
		 * routine to account for the '\' character.
		 */
		if (c != '%')
		{
			/*
			 * This needs to be replaced with something like
			 * 'out_char()' or call an OS routine.
			 */
#ifndef UNIX_DEBUG
			if (c != '\n')
			{
				printk_putc(c, &count, info);
			}
			else
			{
				printk_putc(0x0D /* CR */, &count, info);
				printk_putc(0x0A /* LF */, &count, info);
			}
#else
			printk_putc(c, &count, info);
#endif

			/*
			 * By using 'continue', the next iteration of the loop
			 * is used, skipping the code that follows.
			 */
			continue;
		}

		/*
		 * First check for specification modifier flags.
		 */
		flags_used = 0;
		done = FALSE;
		while (!done)
		{
			switch (/* c = */ *++p)
			{
				case '-':
					flags_used |= FLAGS_MINUS;
					break;
				case '+':
					flags_used |= FLAGS_PLUS;
					break;
				case ' ':
					flags_used |= FLAGS_SPACE;
					break;
				case '0':
					flags_used |= FLAGS_ZERO;
					break;
				case '#':
					flags_used |= FLAGS_POUND;
					break;
				default:
					/* we've gone one char too far */
					--p;
					done = TRUE;
					break;
			}
		}

		/*
		 * Next check for minimum field width.
		 */
		field_width = 0;
		done = FALSE;
		while (!done)
		{
			switch (c = *++p)
			{
				case '0':
				case '1':
				case '2':
				case '3':
				case '4':
				case '5':
				case '6':
				case '7':
				case '8':
				case '9':
					field_width = (field_width * 10) + (c - '0');
					break;
				default:
					/* we've gone one char too far */
					--p;
					done = TRUE;
					break;
			}
		}

		/*
		 * Next check for the width and precision field separator.
		 */
		if (/* (c = *++p) */ *++p == '.')
		{
			/* precision_used = TRUE; */

			/*
			 * Must get precision field width, if present.
			 */
			/* precision_width = 0; */
			done = FALSE;
			while (!done)
			{
				switch (/* c = uncomment if used below */ *++p)
				{
					case '0':
					case '1':
					case '2':
					case '3':
					case '4':
					case '5':
					case '6':
					case '7':
					case '8':
					case '9':
#if 0
						precision_width = (precision_width * 10) +
							(c - '0');
#endif
						break;
					default:
						/* we've gone one char too far */
						--p;
						done = TRUE;
						break;
				}
			}
		}
		else
		{
			/* we've gone one char too far */
			--p;
#if 0
			precision_used = FALSE;
			precision_width = 0;
#endif
		}

		/*
		 * Check for the length modifier.
		 */
		/* length_modifier = 0; */
		switch (/* c = */ *++p)
		{
			case 'h':
				/* length_modifier |= LENMOD_h; */
				break;
			case 'l':
				/* length_modifier |= LENMOD_l; */
				break;
			case 'L':
				/* length_modifier |= LENMOD_L; */
				break;
			default:
				/* we've gone one char too far */
				--p;
				break;
		}

		/*
		 * Now we're ready to examine the format.
		 */
		switch (c = *++p)
		{
			case 'd':
			case 'i':
				ival = (int)va_arg(ap, int);
				vlen = printk_mknumstr(vstr,&ival,TRUE,10);
				vstrp = &vstr[vlen];

				if (ival < 0)
				{
					schar = '-';
					++vlen;
				}
				else
				{
					if (IS_FLAG_PLUS(flags_used))
					{
						schar = '+';
						++vlen;
					}
					else
					{
						if (IS_FLAG_SPACE(flags_used))
						{
							schar = ' ';
							++vlen;
						}
						else
						{
							schar = 0;
						}
					}
				}
				dschar = FALSE;
			
				/*
				 * do the ZERO pad.
				 */
				if (IS_FLAG_ZERO(flags_used))
				{
					if (schar)
						printk_putc(schar, &count, info);
					dschar = TRUE;
			
					printk_pad_zero (vlen, field_width, &count, info);
					vlen = field_width;
				}
				else
				{
					if (!IS_FLAG_MINUS(flags_used))
					{
						printk_pad_space (vlen, field_width, &count, info);
			
						if (schar)
							printk_putc(schar, &count, info);
						dschar = TRUE;
					}
				}
			
				/* the string was built in reverse order, now display in */
				/* correct order */
				if (!dschar && schar)
				{
					printk_putc(schar, &count, info);
				}
				goto cont_xd;

			case 'x':
			case 'X':
				uval = (unsigned int)va_arg(ap, unsigned int);
				vlen = printk_mknumstr(vstr,&uval,FALSE,16);
				vstrp = &vstr[vlen];

				dschar = FALSE;
				if (IS_FLAG_ZERO(flags_used))
				{
					if (IS_FLAG_POUND(flags_used))
					{
						printk_putc('0', &count, info);
						printk_putc('x', &count, info);
						/*vlen += 2;*/
						dschar = TRUE;
					}
					printk_pad_zero (vlen, field_width, &count, info);
					vlen = field_width;
				}
				else
				{
					if (!IS_FLAG_MINUS(flags_used))
					{
						if (IS_FLAG_POUND(flags_used))
						{
							vlen += 2;
						}
						printk_pad_space (vlen, field_width, &count, info);
						if (IS_FLAG_POUND(flags_used))
						{
							printk_putc('0', &count, info);
							printk_putc('x', &count, info);
							dschar = TRUE;
						}
					}
				}

				if ((IS_FLAG_POUND(flags_used)) && !dschar)
				{
					printk_putc('0', &count, info);
					printk_putc('x', &count, info);
					vlen += 2;
				}
				goto cont_xd;

			case 'o':
				uval = (unsigned int)va_arg(ap, unsigned int);
				vlen = printk_mknumstr(vstr,&uval,FALSE,8);
				goto cont_u;
			case 'b':
				uval = (unsigned int)va_arg(ap, unsigned int);
				vlen = printk_mknumstr(vstr,&uval,FALSE,2);
				goto cont_u;
			case 'p':
				uval = (unsigned int)va_arg(ap, void *);
				vlen = printk_mknumstr(vstr,&uval,FALSE,16);
				goto cont_u;
			case 'u':
				uval = (unsigned int)va_arg(ap, unsigned int);
				vlen = printk_mknumstr(vstr,&uval,FALSE,10);

				cont_u:
					vstrp = &vstr[vlen];

					if (IS_FLAG_ZERO(flags_used))
					{
						printk_pad_zero (vlen, field_width, &count, info);
						vlen = field_width;
					}
					else
					{
						if (!IS_FLAG_MINUS(flags_used))
						{
							printk_pad_space (vlen, field_width, &count, info);
						}
					}

				cont_xd:
					while (*vstrp)
						printk_putc(*vstrp--, &count, info);

					if (IS_FLAG_MINUS(flags_used))
					{
						printk_pad_space (vlen, field_width, &count, info);
					}
				break;

			case 'c':
				cval = (char)va_arg(ap, unsigned int);
				printk_putc(cval,&count, info);
				break;
			case 's':
				sval = (char *)va_arg(ap, char *);
				if (sval)
				{
					vlen = strlen(sval);
					if (!IS_FLAG_MINUS(flags_used))
					{
						printk_pad_space (vlen, field_width, &count, info);
					}
					while (*sval)
						printk_putc(*sval++,&count, info);
					if (IS_FLAG_MINUS(flags_used))
					{
						printk_pad_space (vlen, field_width, &count, info);
					}
				}
				break;
			case 'n':
				ivalp = (int *)va_arg(ap, int *);
				*ivalp = count;
				break;
			default:
				printk_putc(c,&count, info);
				break;
		}
	}
	return count;
}

/********************************************************************/
int
printf (const char *fmt, ...)
{
	va_list ap;
	int rvalue;
	PRINTK_INFO info;


	info.dest = DEST_CONSOLE;
	info.func = &out_char;
	/*
	 * Initialize the pointer to the variable length argument list.
	 */
	va_start(ap, fmt);
	rvalue = printk(&info, fmt, ap);
	/*
	 * Cleanup the variable length argument list.
	 */
	va_end(ap);
	return rvalue;
}

/********************************************************************/
int
sprintf (char *s, const char *fmt, ...)
{
	va_list ap;
	int rvalue = 0;
	PRINTK_INFO info;

	/*
	 * Initialize the pointer to the variable length argument list.
	 */
	if (s != 0)
	{
		info.dest = DEST_STRING;
		info.loc = s;
		va_start(ap, fmt);
		rvalue = printk(&info, fmt, ap);
		*info.loc = '\0';
		va_end(ap);
	}
	return rvalue;
}

/********************************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久久久久| 91小视频免费观看| 国产精品女主播在线观看| av不卡免费电影| 亚洲 欧美综合在线网络| 精品va天堂亚洲国产| 97久久久精品综合88久久| 老司机午夜精品| 亚洲免费观看高清在线观看| 精品sm捆绑视频| 欧美日韩精品欧美日韩精品一| 国产99久久久精品| 蜜桃一区二区三区在线| 亚洲欧美日韩小说| 国产精品私人自拍| 久久夜色精品一区| 日韩欧美在线影院| 色视频成人在线观看免| 成人三级伦理片| 国产麻豆精品视频| 久久成人精品无人区| 视频一区国产视频| 一区二区三区四区精品在线视频| 国产精品亲子乱子伦xxxx裸| 2024国产精品| 26uuuu精品一区二区| 91精品国产欧美日韩| 精品污污网站免费看| 色8久久精品久久久久久蜜| 成人av资源在线| 成人亚洲一区二区一| 国产美女av一区二区三区| 美女免费视频一区| 日本女人一区二区三区| 五月激情综合婷婷| 亚洲一区二区三区四区五区黄| 亚洲私人黄色宅男| 久久精品男人的天堂| 精品久久久久香蕉网| 日韩精品一区二区在线观看| 3atv在线一区二区三区| 欧美精品1区2区3区| 欧美喷水一区二区| 欧美猛男超大videosgay| 欧美图片一区二区三区| 欧美色图免费看| 欧美在线免费观看亚洲| 欧美午夜精品一区二区蜜桃 | 日本中文字幕一区二区有限公司| 亚洲欧美色综合| 亚洲人吸女人奶水| 一区2区3区在线看| 亚洲成a人v欧美综合天堂| 亚洲国产一区二区三区青草影视| 午夜精品久久久久久久99水蜜桃 | 欧美日韩国产一区二区三区地区| 欧美伊人精品成人久久综合97| 欧美午夜一区二区三区免费大片| 欧美在线视频日韩| 日韩一区二区视频| 欧美精品一区二区精品网| 久久婷婷久久一区二区三区| 久久久精品国产99久久精品芒果| 久久嫩草精品久久久精品| 久久久亚洲精品一区二区三区| 久久精品在这里| 国产精品超碰97尤物18| 一区二区三区中文字幕精品精品| 亚洲午夜精品在线| 免费在线观看精品| 国产大片一区二区| 日本乱人伦aⅴ精品| 91精品在线免费观看| 国产欧美精品一区二区色综合朱莉| 国产精品色哟哟网站| 亚洲午夜av在线| 国产乱人伦精品一区二区在线观看| 成人精品鲁一区一区二区| 色婷婷狠狠综合| 日韩一级片在线播放| 国产女人水真多18毛片18精品视频| 亚洲私人影院在线观看| 日本怡春院一区二区| 国产大陆精品国产| 欧美亚洲国产一区二区三区| 精品国产亚洲在线| 亚洲精品国产第一综合99久久| 奇米影视一区二区三区| 成人美女视频在线看| 欧美婷婷六月丁香综合色| 久久久久亚洲蜜桃| 亚洲高清视频的网址| 激情文学综合丁香| 在线视频你懂得一区二区三区| 精品剧情在线观看| 亚洲国产日韩精品| 岛国一区二区三区| 日韩欧美美女一区二区三区| 亚洲视频在线观看一区| 精品一区二区三区在线视频| 91免费版pro下载短视频| 欧美大片一区二区| 一区二区三区加勒比av| 国产成人免费av在线| 欧美日本国产一区| 一区二区三区四区高清精品免费观看 | 国产成人免费视频一区| 欧美视频你懂的| 国产精品免费丝袜| 久久精品国产澳门| 91福利在线免费观看| 国产亚洲1区2区3区| 日韩精品久久理论片| 在线中文字幕不卡| 欧美高清在线一区| 国产在线播精品第三| 6080亚洲精品一区二区| 亚洲欧美偷拍卡通变态| 成人爱爱电影网址| 欧美极品xxx| 精品亚洲porn| 欧美一区二区三区人| 亚洲国产精品久久一线不卡| 91麻豆国产精品久久| 国产精品久久久久一区二区三区 | 日韩午夜av电影| 亚洲电影欧美电影有声小说| 99久久国产综合精品色伊| 久久天堂av综合合色蜜桃网| 久久se这里有精品| 欧美一级片免费看| 日韩中文字幕麻豆| 3atv在线一区二区三区| 午夜欧美大尺度福利影院在线看| 在线精品视频一区二区三四 | 久久激五月天综合精品| 6080国产精品一区二区| 亚洲一区二区三区在线| 日本韩国视频一区二区| 亚洲摸摸操操av| 色综合久久久久| 亚洲精品国产精品乱码不99| 欧美伊人精品成人久久综合97 | 国产亲近乱来精品视频| 高清成人免费视频| 国产精品高潮久久久久无| 99re这里都是精品| 亚洲欧美色一区| 欧美日韩大陆一区二区| 午夜一区二区三区在线观看| 欧美日韩精品一区二区天天拍小说| 亚洲午夜精品17c| 欧美一区二区三区人| 狠狠狠色丁香婷婷综合激情| 久久久久国产成人精品亚洲午夜| 国产精品白丝jk黑袜喷水| 国产欧美日韩另类视频免费观看| 99久久er热在这里只有精品66| 亚洲欧美日韩精品久久久久| 91福利视频网站| 天天av天天翘天天综合网色鬼国产 | 日韩国产欧美三级| 欧美岛国在线观看| 成人aaaa免费全部观看| 亚洲精品写真福利| 这里只有精品免费| 国产大陆a不卡| 亚洲欧美日韩在线| 91麻豆精品91久久久久同性| 国产精品系列在线播放| 亚洲女人的天堂| 日韩精品一区二区三区中文不卡 | 久久理论电影网| 91美女在线视频| 性感美女极品91精品| 亚洲精品一区二区三区精华液| 丁香婷婷综合五月| 亚洲国产毛片aaaaa无费看| 精品国精品国产尤物美女| av亚洲精华国产精华精| 日韩av一级电影| 国产午夜精品一区二区三区四区| 色哟哟欧美精品| 奇米色777欧美一区二区| 国产精品久久一级| 制服丝袜亚洲网站| 91亚洲国产成人精品一区二区三 | av电影在线观看一区| 日韩成人dvd| 中文字幕一区二区三区乱码在线| 91麻豆精品91久久久久久清纯| 成人av动漫网站| 久久国产免费看| 亚洲国产美国国产综合一区二区| 国产日韩三级在线| 欧美一区二区网站| 91传媒视频在线播放| 2024国产精品| 国产一区二区精品久久| 亚洲一区二区在线观看视频|