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

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

?? doprnt.cc

?? Murphy 大俠 GPL 的 C++/x86 RTOS, 支持 MMU, 用戶/核心 模式區隔. http://hpc.ee.ntu.edu.tw/~murphy/me/EKernel.html
?? CC
字號:
/* 
 * Mach Operating System
 * Copyright (c) 1991,1990,1989 Carnegie Mellon University
 * All Rights Reserved.
 * 
 * Permission to use, copy, modify and distribute this software and its
 * documentation is hereby granted, provided that both the copyright
 * notice and this permission notice appear in all copies of the
 * software, derivative works or modified versions, and any portions
 * thereof, and that both notices appear in supporting documentation.
 * 
 * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
 * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
 * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
 * 
 * Carnegie Mellon requests users of this software to return to
 * 
 *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
 *  School of Computer Science
 *  Carnegie Mellon University
 *  Pittsburgh PA 15213-3890
 * 
 * any improvements or extensions that they make and grant Carnegie Mellon
 * the rights to redistribute these changes.
 */


/*
 *  Common code for printf et al.
 *
 *  The calling routine typically takes a variable number of arguments,
 *  and passes the address of the first one.  This implementation
 *  assumes a straightforward, stack implementation, aligned to the
 *  machine's WORDsize.  Increasing addresses are assumed to point to
 *  successive arguments (left-to-right), as is the case for a machine
 *  with a downward-growing stack with arguments pushed right-to-left.
 *
 *  To write, for example, fprintf() using this routine, the code
 *
 *	fprintf(fd, format, args)
 *	FILE *fd;
 *	char *format;
 *	{
 *	_doprnt(format, &args, fd);
 *	}
 *
 *  would suffice.  (This example does not handle the fprintf's "return
 *  value" correctly, but who looks at the return value of fprintf
 *  anyway?)
 *
 *  This version implements the following printf features:
 *
 *	%d	decimal conversion
 *	%u	unsigned conversion
 *	%x	hexadecimal conversion
 *	%X	hexadecimal conversion with capital letters
 *	%o	octal conversion
 *	%c	character
 *	%s	string
 *	%m.n	field width, precision
 *	%-m.n	left adjustment
 *	%0m.n	zero-padding
 *	%*.*	width and precision taken from arguments
 *
 *  This version does not implement %f, %e, or %g.  It accepts, but
 *  ignores, an `l' as in %ld, %lo, %lx, and %lu, and therefore will not
 *  work correctly on machines for which sizeof(long) != sizeof(int).
 *  It does not even parse %D, %O, or %U; you should be using %ld, %o and
 *  %lu if you mean long conversion.
 *
 *  As mentioned, this version does not return any reasonable value.
 *
 *  Permission is granted to use, modify, or propagate this code as
 *  long as this notice is incorporated.
 *
 *  Steve Summit 3/25/87
 */

/*
 * Added for general use:
 *	#	prefix for alternate format:
 *		0x (0X) for hex
 *		leading 0 for octal
 *	+	print '+' if positive
 *	blank	print ' ' if positive
 *
 *	z	signed hexadecimal
 *	r	signed, 'radix'
 *	n	unsigned, 'radix'
 *
 *	D,U,O,Z	same as corresponding lower-case versions
 *		(compatibility)
 */
/*
 *	Added ANSI %p for pointers.  Output looks like 0x%08x.
 */

#include <stdarg.h>
#include "types.h"
#include "LibC/String/string.h"

static int isdigit(int d)
{
	return ( d>='0' && d<='9' );
}

const static int MAXBUF=32;		// enough for binary

const static char digits[] = "0123456789abcdef";

BOOL	_doprnt_truncates = FALSE;

void _doprnt(
	register const char *fmt,
	va_list		args,
	int		radix,							// default radix - for '%r'
 	void		(*putc)(char *arg, int c),	// character output
	char		*putc_arg					// argument for putc
)
{
	int		length;
	int		prec;
	BOOL		ladjust;
	char		padc;
	long		n;
	unsigned long	u;
	int		plus_sign;
	int		sign_char;
	BOOL		altfmt, truncate;
	int		base;
	char		c;

	while (*fmt != '\0') {
		if (*fmt != '%') {
			(*putc)(putc_arg, *fmt++);
			continue;
	    }

	    fmt++;

	    length = 0;
	    prec = -1;
	    ladjust = FALSE;
	    padc = ' ';
	    plus_sign = 0;
	    sign_char = 0;
	    altfmt = FALSE;

	    while (TRUE) {
		if (*fmt == '#') {
		    altfmt = TRUE;
		    fmt++;
		}
		else if (*fmt == '-') {
		    ladjust = TRUE;
		    fmt++;
		}
		else if (*fmt == '+') {
		    plus_sign = '+';
		    fmt++;
		}
		else if (*fmt == ' ') {
		    if (plus_sign == 0)
			plus_sign = ' ';
		    fmt++;
		}
		else
		    break;
	    }

	    if (*fmt == '0') {
		padc = '0';
		fmt++;
	    }

	    if (isdigit(*fmt)) {
		while(isdigit(*fmt))
		    length = 10 * length + ((*fmt++)-'0');
	    }
	    else if (*fmt == '*') {
		length = va_arg(args, int);
		fmt++;
		if (length < 0) {
		    ladjust = !ladjust;
		    length = -length;
		}
	    }

	    if (*fmt == '.') {
		fmt++;
		if (isdigit(*fmt)) {
		    prec = 0;
		    while(isdigit(*fmt))
			prec = 10 * prec + ((*fmt++)-'0');
		}
		else if (*fmt == '*') {
		    prec = va_arg(args, int);
		    fmt++;
		}
	    }

	    if (*fmt == 'l')
		fmt++;	/* need it if sizeof(int) < sizeof(long) */

	    truncate = FALSE;

	    switch(*fmt) {

		case 'c':
		    c = va_arg(args, int);
		    (*putc)(putc_arg, c);
		    break;

		case 's':
		{
		    register char *p;
		    register char *p2;

		    if (prec == -1)
			prec = 0x7fffffff;	/* MAXINT */

		    p = va_arg(args, char *);

		    if (p == (char *)0)
			p = "";

		    if (length > 0 && !ladjust) {
			n = 0;
			p2 = p;

			for (; *p != '\0' && n < prec; p++)
			    n++;

			p = p2;

			while (n < length) {
			    (*putc)(putc_arg, ' ');
			    n++;
			}
		    }

		    n = 0;

		    while (*p != '\0') {
			if (++n > prec)
			    break;

			(*putc)(putc_arg, *p++);
		    }

		    if (n < length && ladjust) {
			while (n < length) {
			    (*putc)(putc_arg, ' ');
			    n++;
			}
		    }

		    break;
		}

		case 'o':
 		    truncate = _doprnt_truncates;
		case 'O':
		    base = 8;
		    goto print_unsigned;

		case 'd':
 		    truncate = _doprnt_truncates;
		case 'D':
		    base = 10;
		    goto print_signed;

		case 'u':
 		    truncate = _doprnt_truncates;
		case 'U':
		    base = 10;
		    goto print_unsigned;

		case 'p':
		    padc = '0';
		    length = 8;
		    /* 
		     * We do this instead of just setting altfmt to TRUE
		     * because we want 0 to have a 0x in front, and we want
		     * eight digits after the 0x -- not just 6.
		     */
		    (*putc)(putc_arg, '0');
		    (*putc)(putc_arg, 'x');
		case 'x':
 		    truncate = _doprnt_truncates;
		case 'X':
		    base = 16;
		    goto print_unsigned;

		case 'z':
 		    truncate = _doprnt_truncates;
		case 'Z':
		    base = 16;
		    goto print_signed;

		case 'r':
 		    truncate = _doprnt_truncates;
		case 'R':
		    base = radix;
		    goto print_signed;

		case 'n':
 		    truncate = _doprnt_truncates;
		case 'N':
		    base = radix;
		    goto print_unsigned;

		print_signed:
		    n = va_arg(args, long);
		    if (n >= 0) {
			u = n;
			sign_char = plus_sign;
		    }
		    else {
			u = -n;
			sign_char = '-';
		    }
		    goto print_num;

		print_unsigned:
		    u = va_arg(args, unsigned long);
		    goto print_num;

		print_num:
		{
		    char	buf[MAXBUF];	/* build number here */
		    register char *	p = &buf[MAXBUF-1];
		    char *prefix = 0;

		    if (truncate) u = (long)((int)(u));

		    if (u != 0 && altfmt) {
			if (base == 8)
			    prefix = "0";
			else if (base == 16)
			    prefix = "0x";
		    }

		    do {
				*p-- = digits[u % base];
				u /= base;
		    } while (u != 0);

		    length -= (&buf[MAXBUF-1] - p);
		    if (sign_char)
			length--;
		    if (prefix)
			length -= strlen(prefix);

		    if (padc == ' ' && !ladjust) {
			/* blank padding goes before prefix */
			while (--length >= 0)
			    (*putc)(putc_arg, ' ');
		    }
		    if (sign_char)
			(*putc)(putc_arg, sign_char);
		    if (prefix)
			while (*prefix)
			    (*putc)(putc_arg, *prefix++);
		    if (padc == '0') {
			/* zero padding goes after sign and prefix */
			while (--length >= 0)
			    (*putc)(putc_arg, '0');
		    }
		    while (++p != &buf[MAXBUF])
			(*putc)(putc_arg, *p);

		    if (ladjust) {
			while (--length >= 0)
			    (*putc)(putc_arg, ' ');
		    }
		    break;
		}

		case '\0':
		    fmt--;
		    break;

		default:
		    (*putc)(putc_arg, *fmt);
	    }
	fmt++;
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲风情在线资源站| 国产精品视频在线看| 99国产精品国产精品毛片| 捆绑变态av一区二区三区| 一区二区欧美国产| 免费欧美高清视频| 午夜电影一区二区三区| 亚洲一区二区三区四区五区中文| 亚洲欧洲成人av每日更新| 国产精品女上位| 国产精品久久久久aaaa樱花| 日韩毛片精品高清免费| 又紧又大又爽精品一区二区| 亚洲无人区一区| 日本aⅴ亚洲精品中文乱码| 免费观看一级欧美片| 激情久久久久久久久久久久久久久久| 日本不卡不码高清免费观看| 久久精品国产第一区二区三区 | 国产一区不卡精品| 成人午夜电影久久影院| eeuss国产一区二区三区| 色噜噜狠狠成人网p站| 精品1区2区3区| 久久影院视频免费| 亚洲免费毛片网站| 午夜精品123| 国产成人综合在线| 在线观看免费一区| 精品国产乱码久久久久久牛牛| 国产精品色在线| 亚洲二区视频在线| 国产高清亚洲一区| 欧美在线观看你懂的| 99在线精品观看| 日韩欧美国产一区二区三区| 国产女人aaa级久久久级| 亚洲成人免费观看| 粉嫩蜜臀av国产精品网站| 在线亚洲一区二区| 午夜成人在线视频| 国产成人精品亚洲日本在线桃色| 91老司机福利 在线| 精品少妇一区二区三区日产乱码| 亚洲婷婷综合久久一本伊一区| 喷白浆一区二区| 91视视频在线直接观看在线看网页在线看| 欧美日韩午夜在线视频| 久久久美女艺术照精彩视频福利播放| 一区二区三区国产精品| 国产九九视频一区二区三区| 欧美日韩国产小视频| 国产欧美日韩另类一区| 日韩和欧美一区二区| 91小视频在线观看| 久久精品人人做人人综合 | 亚洲一区二区视频| 成人免费观看av| 精品久久人人做人人爽| 婷婷成人综合网| 色丁香久综合在线久综合在线观看| 国产亚洲欧美日韩日本| 麻豆精品国产91久久久久久| 日本精品一级二级| 亚洲日本韩国一区| 不卡av电影在线播放| 久久久影视传媒| 狠狠网亚洲精品| 精品欧美一区二区在线观看| 天天色综合成人网| 欧美日韩dvd在线观看| 亚洲高清免费一级二级三级| 色综合久久久网| 亚洲欧洲日产国码二区| 99天天综合性| 亚洲精品视频在线观看免费| eeuss国产一区二区三区| 中文字幕在线不卡一区二区三区| 国产精品亚洲专一区二区三区| 国产三级精品在线| 国产福利一区二区三区视频在线| 欧美精品一区视频| 东方aⅴ免费观看久久av| 国产精品日韩成人| 91亚洲永久精品| 一区二区不卡在线播放| 欧美色偷偷大香| 日韩国产在线观看一区| 91精品国产91久久久久久一区二区| 视频一区视频二区中文字幕| 日韩一级视频免费观看在线| 久久av资源网| 国产精品久久三区| 欧美性大战久久久| 毛片不卡一区二区| 欧美国产日韩亚洲一区| 一道本成人在线| 精品一区二区三区免费| 捆绑紧缚一区二区三区视频| 精品福利一二区| 国产成人免费视频一区| ●精品国产综合乱码久久久久 | 欧美日韩精品福利| 国产亚洲一区二区三区在线观看 | 成人美女视频在线观看18| 久久成人免费日本黄色| 日本欧美一区二区三区| 亚洲午夜激情av| 亚洲与欧洲av电影| 一区二区三区久久久| 亚洲欧美偷拍三级| 亚洲欧美激情插| 亚洲少妇30p| 亚洲人成网站精品片在线观看| 亚洲夂夂婷婷色拍ww47| 亚洲一区在线观看视频| 亚洲精品高清在线观看| 亚洲欧美日韩国产成人精品影院| 欧美激情中文不卡| 国产精品久久国产精麻豆99网站| 国产精品婷婷午夜在线观看| 国产精品人妖ts系列视频 | 日韩一区二区三区四区 | 久久亚洲精精品中文字幕早川悠里| 欧美大度的电影原声| 日韩欧美国产系列| 久久久亚洲国产美女国产盗摄| 国产亚洲一区二区在线观看| 国产精品视频麻豆| 亚洲日韩欧美一区二区在线| 亚洲精品国产视频| 日韩精品福利网| 国内欧美视频一区二区| 国产成人免费视频网站| 9人人澡人人爽人人精品| 色猫猫国产区一区二在线视频| 欧美三级蜜桃2在线观看| 91精品国产福利在线观看| 精品国产伦一区二区三区观看体验| 久久久精品国产免大香伊| 国产精品麻豆网站| 亚洲一区二区三区国产| 久热成人在线视频| 成人激情小说乱人伦| 欧美日韩在线三区| 久久日韩粉嫩一区二区三区| 中文字幕一区二区三区不卡在线 | 视频一区免费在线观看| 国内精品在线播放| 99re成人精品视频| 国产精品美女久久久久aⅴ| 樱花影视一区二区| 另类小说欧美激情| 91首页免费视频| 欧美成人a视频| 亚洲精品日日夜夜| 久久精品国产99国产精品| 成人国产精品免费观看视频| 欧美三级日韩在线| 国产午夜精品美女毛片视频| 亚洲综合视频在线观看| 久久99九九99精品| 欧美亚洲一区二区在线| 久久综合色之久久综合| 亚洲国产毛片aaaaa无费看| 国产美女在线精品| 91麻豆精品国产| 亚洲同性同志一二三专区| 久久99久久久欧美国产| 色婷婷综合久久久久中文一区二区| 精品国产乱码久久久久久蜜臀| 亚洲自拍偷拍网站| av午夜精品一区二区三区| 日韩欧美在线不卡| 亚洲电影在线免费观看| av色综合久久天堂av综合| 久久精品一区四区| 美女视频黄免费的久久| 欧洲一区二区三区在线| 国产精品电影一区二区三区| 久久精品国产99国产| 欧美日本在线视频| 一区二区三区欧美日| eeuss鲁一区二区三区| 国产清纯在线一区二区www| 久久精品国产999大香线蕉| 欧美日韩成人一区| 亚洲综合久久久久| 色悠悠亚洲一区二区| 国产精品每日更新| 白白色 亚洲乱淫| 国产亚洲一区二区在线观看| 加勒比av一区二区| 精品国产不卡一区二区三区| 欧美96一区二区免费视频| 欧美浪妇xxxx高跟鞋交| 亚洲电影视频在线| 国产色91在线| 国产91在线看| 中文字幕国产一区二区|