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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? printf.c

?? DSP56F807的CAN通訊程序,可用于多子板互連、也可作為開發(fā)的原型程序
?? C
字號(hào):
/* Author: Daniel Malik (daniel.malik@motorola.com) */

/* Revision history:
1.0		First code released (15/02/2001)
1.1		Bug in fractional support: fmtpars.justification_options == zero_fill; changed to: fmtpars.justification_options = zero_fill;
		Changed fractional handling, 0xe000 is -.25 not -.75 as I thought
1.2		Optimized number printout (now uses unsigned division and unsigned parameters), hex printout correction (22/02/2001)
1.3		global variable changed to static (19/03/2001)
*/

#include "stdio.h"

/* options */
#define	support_fractional	/* fractional (16bit), conversion character "r", precision (when >3) specifies maximum number of characters (no rounding is done, string is cut) */

#define	BUFFER_SIZE	15	/* buffer size for number conversion */
#define isdigit(c)	((c>='0')&&(c<='9'))

enum justification_options {
	left_justification,
	right_justification,
	zero_fill
};

enum sign_options {
	only_minus,
	sign_always,
	space_holder
};

enum argument_options {
	normal_argument,
	long_argument
};

typedef struct {
	int	justification_options;
	int	sign_options;
	int	alternate_form;
	int	argument_options;
	int	conversion_char;
	int	field_width;
	int	precision;
} print_format;

char *parseformat(char *format,print_format *f,va_list *arg) {
	int	flag_found;
	char c=*format;
	
	(*f).justification_options	= right_justification;
	(*f).sign_options			= only_minus;
	(*f).alternate_form			= 0;
	(*f).argument_options		= normal_argument;
	(*f).field_width			= 0;
	(*f).precision				= -1;		/* -1 means not specified */
	
	if (c == '\0') return(0);
	if (c == '%') {
		(*f).conversion_char = '%';
		return(++format);
	}
	do {
		flag_found = 1;
		switch (c) {
			case '-':	(*f).justification_options = left_justification; break;
			case '+':	(*f).sign_options = sign_always; break;
			case ' ':	if ((*f).sign_options != sign_always) (*f).sign_options = space_holder; break;
			case '#':	(*f).alternate_form = 1; break;
			case '0':	if ((*f).justification_options != left_justification) (*f).justification_options = zero_fill; break;
			default:	flag_found = 0;
		}
		if (flag_found) c=*++format; else break;
	} while (flag_found);
	if (c == '*') {
		if (((*f).field_width = va_arg(*arg, int)) < 0) {
			(*f).justification_options = left_justification;
			(*f).field_width = -(*f).field_width;
		}
		c = *++format;
	}
	else while (isdigit(c)) {
		(*f).field_width = ((*f).field_width * 10) + (c - '0');
		c = *++format;
	}
	if (c == '.') {
		(*f).precision = 0;
		if ((c = *++format) == '*') {
			if (((*f).precision = va_arg(*arg, int)) < 0) (*f).precision = 0;
			c = *++format;
		}
		else while (isdigit(c))	{
				(*f).precision = ((*f).precision * 10) + (c - '0');
				c = *++format;
			}
	}
	if (c=='l') {
		(*f).argument_options = long_argument;
		c = *++format;
	}
	(*f).conversion_char = c;
	switch (c) {
		case 'd':
		case 'i':
		case 'u':
		case 'o':
		case 'x':
		case 'X':
			if ((*f).precision<0) (*f).precision = 1;
			else if ((*f).justification_options == zero_fill) (*f).justification_options = right_justification;
			break;
		case 'f':
		case 'F':
			if ((*f).precision<0) (*f).precision = 6;
			break;
	    case 'g':
		case 'G':
		case 'e':
		case 'E':
			if ((*f).precision<0) (*f).precision = 6;
			if (!(*f).precision) (*f).precision = 1;
			break;
		case 'p':
			(*f).conversion_char  = 'x';
			(*f).alternate_form   = 1;
			(*f).precision        = 4;
			break;
		case '\0':
			return(0);			
	}
	return(++format);
}

/* returns pointer to first character of output string */
char *long2str (unsigned long int n, char *buffer, print_format *f) {
	int base,minus=0,digit,count=0;
	buffer+=BUFFER_SIZE;		/*maximum length of long number plus sign */
	switch ((*f).conversion_char) {
		case 'd':
#ifdef support_fractional
		case 'r':
#endif
		case 'i':
			if (n & 0x80000000) {
				n=~n+1;
				minus=1;
			}
		case 'u':
			base =  10;
			break;
		case 'o':
			base =   8;
			break;
		case 'x':
		case 'X':
			base =  16;
	}
	do {
		digit=n%base;
		n/=base;
		if (digit<10) digit+='0'; else {
			digit+='a'-10;
			if ((*f).conversion_char=='X') digit+='A'-'a';
		}
		*(--buffer)=digit;
		count++;
	} while (n);
	if (base == 8 && (*f).alternate_form && *(++buffer) != '0') {
		*--buffer = '0';
		count++;
	}
	if ((*f).justification_options == zero_fill) {
		(*f).precision = (*f).field_width;
		if (minus || (*f).sign_options != only_minus) (*f).precision--;
		if (base == 16 && (*f).alternate_form) (*f).precision-=2;
	}
	if ((count<BUFFER_SIZE)&&(count<(*f).precision)) {
		*--buffer='0';
		count++;
	}
	if (base == 16 && (*f).alternate_form) {
		*--buffer = (*f).conversion_char;
		*--buffer = '0';
	}
	if (minus) *--buffer = '-'; 
		else if ((*f).sign_options == sign_always) *--buffer = '+';
			else if ((*f).sign_options == space_holder) *--buffer = ' ';
	return(buffer);
}

void justify_and_print_string(void (*output_func)(char), char *buffer, print_format *f) {
	int buf_lng;
	char *bptr=buffer;
	while(*(bptr++));
	buf_lng=bptr-buffer-1;
	if ((*f).justification_options != left_justification) {
		int i;
		char fill_char = ((*f).justification_options == zero_fill) ? '0' : ' ';
		if (((*buffer == '+') || (*buffer == '-')) && (fill_char == '0')) {
			output_func(*(buffer++));
			buf_lng--;
		}
		i=buf_lng;
		while (i<(*f).field_width) {
			output_func(fill_char);
			i++;
		}
	}
	while(*buffer) output_func(*(buffer++));
	if ((*f).justification_options == left_justification) {
		while (buf_lng < (*f).field_width) {
			output_func(' ');
			buf_lng++;
		}
	}
}

#ifdef support_fractional
unsigned long fractable[15]={500000000,250000000,125000000,62500000,31250000,
							 15625000,7812500,3906250,1953125,976563,488281,
							 244141,122070,61035,30518};
long int frac2long (unsigned long int number) {
	int i;
	long int result=0;
	for (i=14;i>=0;i--) {
		if (number&1) result+=fractable[i];
		number>>=1;
	}
	if (number&1) return(result-(long)1000000000);
	return(result);
}
#endif

void pformatter (void (*output_func)(char), char *format, va_list arg) {
	print_format fmtpars;
	char *fmt1;
	while ((*format)!='\0') {
		while (((*format)!='%')&&((*format)!='\0')) {
			output_func(*(format++));
		}
		fmt1=format;
		if ((*(format))!='\0') if (format = parseformat(format+1,&fmtpars,&arg)) {
			switch (fmtpars.conversion_char)
			{
				case 'c':	output_func(va_arg(arg, char)); break;
				case '%':	output_func('%'); break;
				case 's':	justify_and_print_string(output_func,va_arg(arg,char *),&fmtpars); break;
#ifdef support_fractional
				case 'r':	{
						char buffer[BUFFER_SIZE+1+2];
						char *bptr;
						unsigned long int number;
						int i,j;
						buffer[BUFFER_SIZE+2]='\0';
						if (fmtpars.argument_options == long_argument)	number = va_arg(arg, unsigned long);
							else number = va_arg(arg, unsigned int);
						number=frac2long(number);
						j=fmtpars.precision;
						i=fmtpars.field_width;
						fmtpars.field_width=10;
						fmtpars.justification_options = zero_fill;
						bptr=long2str((unsigned long int)number,buffer+2,&fmtpars);
						if (!isdigit(*bptr)) {
							*(bptr-2)=*bptr;
							*(bptr-1)='0';
							*(bptr)='.';
							bptr-=2;
						} else {
							*(bptr-1)='0';
							*(bptr)='.';
							bptr--;
						}
						fmtpars.field_width=i;
						if ((j<12)&&(j>3)) *(bptr+j)='\0';		/* shorten the string if precision > 3 */
						justify_and_print_string(output_func,bptr,&fmtpars); 
					} break;
#endif
				case 'd':
				case 'o':
				case 'u':
				case 'x':
				case 'X':
				case 'i':	{
						char buffer[BUFFER_SIZE+1];
						char *bptr;
						long int number;
						buffer[BUFFER_SIZE]='\0';
						if (fmtpars.argument_options == long_argument)	number = va_arg(arg, long);
							else if (fmtpars.conversion_char=='d') number = va_arg(arg, int);
								else number = va_arg(arg, unsigned int);
						bptr=long2str((unsigned long int)number,buffer,&fmtpars);
						justify_and_print_string(output_func,bptr,&fmtpars); 
					} break;
				default:	while(fmt1<format) output_func(*(fmt1++));	/* print unknown conversion strings */
			}
		}
	}
}

void printf(char *format, ...) {
	pformatter(&stdio_putchar, format, va_start(format));
}

static char *dest_ptr;

void output_to_string(char character) {
	*(dest_ptr++)=character;
}

void sprintf(char *dest, char *format, ...) {
	char *old_dest_ptr=dest_ptr;		/* save old pointer to make sprintf reentrant */
	dest_ptr=dest;	
	pformatter(&output_to_string, format, va_start(format));
	*dest_ptr='\0';
	dest_ptr=old_dest_ptr;	
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美亚洲国产另类| 免费欧美高清视频| 日韩一二在线观看| 成人avav在线| 久久av老司机精品网站导航| 亚洲美腿欧美偷拍| 国产午夜一区二区三区| 欧美高清www午色夜在线视频| 国产成人一级电影| 麻豆精品新av中文字幕| 亚洲人成影院在线观看| 26uuu精品一区二区| 777亚洲妇女| 欧美亚洲国产怡红院影院| 国产一区二区在线看| 美女在线观看视频一区二区| 亚洲一区二区三区中文字幕在线| 中文字幕av一区二区三区高| 欧美刺激午夜性久久久久久久 | 色欧美日韩亚洲| 国产精品88av| 精品一区在线看| 蜜臀精品久久久久久蜜臀| 亚洲一区日韩精品中文字幕| 亚洲婷婷在线视频| 亚洲欧洲成人av每日更新| 国产欧美日韩精品在线| 久久亚洲精品小早川怜子| 日韩视频一区二区三区在线播放| 欧美色精品在线视频| 欧美在线观看视频一区二区三区 | 99国产精品国产精品毛片| 国产成人鲁色资源国产91色综 | 成人高清免费在线播放| 国产传媒欧美日韩成人| 国产一区二区中文字幕| 国产在线视频一区二区| 国产在线精品不卡| 国产在线一区二区| 福利视频网站一区二区三区| 成人丝袜视频网| av中文字幕一区| av网站一区二区三区| 成人av在线电影| 91蜜桃网址入口| 色哦色哦哦色天天综合| 欧美三级在线播放| 日韩一区二区三区精品视频| 精品久久久久99| 久久久久久久久97黄色工厂| 国产人成一区二区三区影院| 国产精品乱子久久久久| 亚洲欧美日韩综合aⅴ视频| 亚洲精品乱码久久久久久黑人| 亚洲猫色日本管| 亚洲国产美女搞黄色| 日韩专区欧美专区| 国内成人免费视频| 国产福利一区二区三区在线视频| 国产99久久久国产精品潘金| 91老师国产黑色丝袜在线| 欧美日韩国产高清一区二区| 日韩一区二区三免费高清| 久久精品一区二区三区不卡| 国产精品久久久久7777按摩| 亚洲高清中文字幕| 美女一区二区三区在线观看| 从欧美一区二区三区| 色老综合老女人久久久| 制服丝袜亚洲色图| 中文子幕无线码一区tr| 亚洲综合一区二区| 久久国产精品色婷婷| 成人18视频日本| 欧美日韩久久久一区| 久久噜噜亚洲综合| 亚洲第一综合色| 国产成人精品影视| 欧美日韩一区高清| 久久精品人人做人人爽人人| 亚洲精品久久嫩草网站秘色| 久久99九九99精品| 91成人网在线| 精品粉嫩aⅴ一区二区三区四区| 国产精品久久午夜| 美女网站一区二区| 日本高清不卡视频| 久久中文娱乐网| 亚洲激情六月丁香| 国产福利一区二区三区在线视频| 欧美一a一片一级一片| 久久精品视频网| 偷拍与自拍一区| 99久久99久久精品国产片果冻 | 欧美日韩激情一区二区三区| 久久久久88色偷偷免费| 亚洲1区2区3区视频| 国产大片一区二区| 欧美一区二区三区爱爱| 亚洲日本乱码在线观看| 国产乱子伦视频一区二区三区 | ...中文天堂在线一区| 久久精品国产999大香线蕉| 一本色道a无线码一区v| 久久蜜桃av一区二区天堂 | 中文字幕一区二区三区视频| 久久99久久久久久久久久久| 欧美午夜精品久久久久久超碰| 久久精品亚洲精品国产欧美kt∨ | 狠狠色丁香婷综合久久| 欧美日韩高清影院| 亚洲人xxxx| 国产精品中文字幕日韩精品 | 日本一区二区三区dvd视频在线| 婷婷夜色潮精品综合在线| 99国产精品一区| 欧美国产乱子伦| 国产一区二区网址| 精品少妇一区二区三区日产乱码| 亚洲成人动漫在线免费观看| 色系网站成人免费| 亚洲四区在线观看| 成人精品一区二区三区四区| 欧美精品一区二区三区蜜桃| 欧美aⅴ一区二区三区视频| 精品视频1区2区3区| 亚洲综合丁香婷婷六月香| 91麻豆高清视频| 亚洲免费大片在线观看| 色综合天天综合| 亚洲品质自拍视频网站| 91小视频在线| 一区二区三区精品在线观看| 色欧美片视频在线观看| 亚洲永久免费av| 欧美天天综合网| 午夜国产精品影院在线观看| 6080午夜不卡| 蜜臀久久久99精品久久久久久| 欧美丰满嫩嫩电影| 日韩高清一区在线| 欧美精品xxxxbbbb| 青青青伊人色综合久久| 日韩免费电影一区| 狠狠色2019综合网| 久久久精品天堂| 成人av在线资源网| 一区二区三区成人| 欧美三级韩国三级日本一级| 日韩中文字幕91| 精品国产乱码久久久久久图片| 经典三级视频一区| 国产亚洲精久久久久久| a美女胸又www黄视频久久| 亚洲精品免费看| 欧美日本国产一区| 九一九一国产精品| 国产精品国产自产拍高清av| 欧洲国内综合视频| 蜜桃av一区二区在线观看| 国产视频一区在线观看 | 精品女同一区二区| 福利电影一区二区| 亚洲一区免费视频| 欧美白人最猛性xxxxx69交| 国产成人av电影在线播放| 亚洲精品老司机| 欧美成人video| 99精品久久只有精品| 午夜av一区二区三区| 国产亚洲精品超碰| 91久久精品一区二区三| 美女国产一区二区| 亚洲少妇屁股交4| 欧美一区二区三区免费大片| 丁香一区二区三区| 香蕉成人伊视频在线观看| 精品国产污污免费网站入口| 色综合天天综合色综合av| 蓝色福利精品导航| 亚洲伦理在线精品| 精品对白一区国产伦| 日韩欧美国产wwwww| 91在线播放网址| 老色鬼精品视频在线观看播放| 亚洲日本电影在线| 精品福利一区二区三区免费视频| 色激情天天射综合网| 国产一区二区三区美女| 亚洲自拍偷拍综合| 国产偷国产偷亚洲高清人白洁| 欧美日韩视频在线一区二区| 国产成+人+日韩+欧美+亚洲| 亚洲成人自拍一区| 中文字幕久久午夜不卡| 日韩久久精品一区| 欧美性色黄大片| 97精品久久久久中文字幕| 国产一区二区免费视频| 日韩二区三区四区|