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

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

?? printk.c

?? MCF5272的板極初始化程序
?? C
字號:
/*
 * File:		printk.c
 * Purpose:		The  standard C library routine printf(), but without
 *				all the baggage.
 *
 * Notes:
 *
 * Author:		Eric DeVolder
 * Date:
 *
 * Modifications:
 *
 */

#include "src/include/dbug.h"
#include "src/uif/uif.h"
#include <stdarg.h>

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

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

#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 (char c, int *count, PRINTK_INFO *info)
{
	switch (info->dest)
	{
		case DEST_CONSOLE:
			info->func(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;
	char 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;
	char schar, dschar;
	int *ivalp;
	char *sval;
	char 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
			 * 'board_putchar()' 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
printD (const char *fmt, ...)
{
	va_list ap;
	int rvalue;
	PRINTK_INFO info;

	info.dest = DEST_CONSOLE;
	info.func = &board_putchar;
	/*
	 * 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
sprintD (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一区二区三区免费野_久草精品视频
美女视频黄a大片欧美| aaa国产一区| 粉嫩嫩av羞羞动漫久久久| 欧美性做爰猛烈叫床潮| 久久综合五月天婷婷伊人| 亚洲黄色av一区| 国产老肥熟一区二区三区| 欧美剧在线免费观看网站 | 色综合久久久久| 99久久久国产精品| 一本一本久久a久久精品综合麻豆| 欧美最新大片在线看| 欧美xxxxxxxxx| 日韩国产一区二| 欧美性大战久久| 亚洲人吸女人奶水| 成人理论电影网| 久久一日本道色综合| 日本不卡视频在线| 欧美另类变人与禽xxxxx| 亚洲免费观看高清完整| 成人性生交大片免费| 久久一区二区三区四区| 看电视剧不卡顿的网站| 欧美精品免费视频| 亚洲国产美女搞黄色| 色香蕉成人二区免费| 717成人午夜免费福利电影| 欧美性xxxxx极品少妇| 91精品国产色综合久久久蜜香臀| 日韩欧美一级在线播放| 色综合久久天天综合网| 欧美videos大乳护士334| 日韩av中文字幕一区二区三区| 欧美三级视频在线| 午夜久久电影网| 欧美日韩第一区日日骚| 天天综合色天天综合| 欧美狂野另类xxxxoooo| 蜜臀av性久久久久蜜臀aⅴ| 91精品国产欧美一区二区| 欧美96一区二区免费视频| 91精品国产综合久久婷婷香蕉| 丝袜亚洲另类欧美| 欧美精品久久一区| 精品一区二区三区视频| 欧美xfplay| 成人永久免费视频| 一区二区三区国产豹纹内裤在线| 欧美综合亚洲图片综合区| 亚洲成人高清在线| 日韩欧美国产午夜精品| 国产酒店精品激情| 国产精品国产馆在线真实露脸| 99久久精品久久久久久清纯| 亚洲线精品一区二区三区八戒| 欧美老女人第四色| 国产传媒欧美日韩成人| 亚洲精品免费在线播放| 日韩一区二区三区四区| 国产凹凸在线观看一区二区| 亚洲天堂中文字幕| 亚洲欧美综合色| 欧美日韩在线亚洲一区蜜芽| 麻豆成人综合网| 久久久久久久久岛国免费| 国产精品午夜久久| 美国十次综合导航| 欧美丝袜丝nylons| 亚洲欧洲国产日本综合| 激情五月播播久久久精品| 欧美日韩免费不卡视频一区二区三区| 国产午夜三级一区二区三| 日韩av二区在线播放| 色狠狠综合天天综合综合| 亚洲国产精品高清| 国产自产高清不卡| 337p亚洲精品色噜噜| 亚洲精品国产视频| 波多野结衣一区二区三区| 欧美sm美女调教| 天堂久久久久va久久久久| 色婷婷综合视频在线观看| 亚洲精品伦理在线| 久久美女艺术照精彩视频福利播放| 色综合久久久久综合体桃花网| 蜜乳av一区二区三区| 亚洲免费看黄网站| 中文字幕免费一区| 欧美日韩高清一区二区三区| 国产精品一区二区x88av| 欧美白人最猛性xxxxx69交| 日本怡春院一区二区| 欧美丰满一区二区免费视频| 亚洲国产中文字幕| 欧美丝袜自拍制服另类| 亚洲综合一二三区| 在线观看亚洲成人| 亚洲精品高清在线观看| 97se亚洲国产综合自在线不卡 | 亚洲欧美激情视频在线观看一区二区三区| 国产在线麻豆精品观看| 欧美xxxxxxxx| 国内精品国产成人| 久久久91精品国产一区二区三区| 久久精品999| 2017欧美狠狠色| 黄页网站大全一区二区| 欧美精品一区男女天堂| 国产精品一区二区三区99| www国产成人| 丁香婷婷深情五月亚洲| 国产精品美女一区二区在线观看| 成人久久18免费网站麻豆| 国产精品国产a| 色狠狠一区二区| 亚洲国产婷婷综合在线精品| 欧美日韩国产小视频在线观看| 石原莉奈在线亚洲三区| 日韩精品一区二区三区视频| 韩国欧美国产一区| 久久久精品综合| 99精品国产一区二区三区不卡| 亚洲欧美一区二区三区国产精品| 在线观看三级视频欧美| 日本欧美肥老太交大片| 欧美成人精精品一区二区频| 国产成人免费视频精品含羞草妖精| 中文字幕巨乱亚洲| 色噜噜久久综合| 免费精品视频最新在线| 26uuu色噜噜精品一区二区| 国产大陆精品国产| 亚洲综合在线视频| 欧美一级夜夜爽| 粉嫩av一区二区三区粉嫩| 亚洲精品国产无套在线观| 91精品国产综合久久精品图片| 精久久久久久久久久久| 国产精品理论在线观看| 欧美一a一片一级一片| 麻豆精品在线观看| 国产精品理论在线观看| 欧美日韩成人综合在线一区二区| 久久成人免费网站| 国产精品久久久久久久久免费樱桃 | 国产欧美一二三区| 国产suv精品一区二区三区| 一个色在线综合| 欧美一区二区福利在线| av在线播放不卡| 日本成人在线不卡视频| 国产精品国产三级国产三级人妇 | 中文字幕高清不卡| 欧美精品v国产精品v日韩精品| 国产米奇在线777精品观看| 一区二区三区鲁丝不卡| 2020国产精品久久精品美国| 91麻豆精品秘密| 经典三级视频一区| 一区二区在线看| 久久蜜桃一区二区| 欧美日本韩国一区| 99久久99久久久精品齐齐| 久久国产精品色| 亚洲一区二区成人在线观看| 欧美激情一区二区三区四区| 欧美久久久久中文字幕| 97超碰欧美中文字幕| 国产专区综合网| 亚洲bdsm女犯bdsm网站| 1000精品久久久久久久久| 精品sm捆绑视频| 欧美酷刑日本凌虐凌虐| 欧美一区二区视频在线观看| 综合分类小说区另类春色亚洲小说欧美 | 国产精品久久久久久久第一福利| 色老头久久综合| 国产高清不卡一区| 男女男精品视频| 亚洲一二三专区| 国产精品每日更新| 26uuu精品一区二区三区四区在线| 91黄色激情网站| 成人aa视频在线观看| 国模冰冰炮一区二区| 日本不卡的三区四区五区| 欧美日韩亚洲综合在线| 一区二区三区四区在线| 91小视频免费观看| 国产精品网站在线播放| 国产精品亚洲人在线观看| 日韩免费性生活视频播放| 亚洲成av人片一区二区三区| 日本久久精品电影| 一区二区三区丝袜| 欧美性猛片xxxx免费看久爱| 一区二区三区美女| 欧美日韩中文一区| 亚洲国产精品精华液网站|