⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 printk.lst

📁 嵌入式系统内核模拟器
💻 LST
📖 第 1 页 / 共 2 页
字号:
              				*buf = digits[33];
              			++buf;
              		}
              	}
              	if (!(type & LEFT)) {
              		while (size-- > 0) {
              			if (buf <= end)
              				*buf = c;
              			++buf;
              		}
              	}
              	while (i < precision--) {
              		if (buf <= end)
              			*buf = '0';
C51 COMPILER V6.12  PRINTK                                                                 12/07/2004 17:58:48 PAGE 6   

              		++buf;
              	}
              	while (i-- > 0) {
              		if (buf <= end)
              			*buf = tmp[i];
              		++buf;
              	}
              	while (size-- > 0) {
              		if (buf <= end)
              			*buf = ' ';
              		++buf;
              	}
              	return buf;
              }
              
              
              int sprintf(char * buf, const char *fmt, ...);
              
              int vsprintf(char *buf, const char *fmt, va_list args)
              {
              	int len;
              	unsigned long long num;
              	int i, base;
              	char *str, *end, c;
              	const char *s;
              
              	int flags;		/* flags to number() */
              
              	int field_width;	/* width of output field */
              	int precision;		/* min. # of digits for integers; max
              				   number of chars for from string */
              	int qualifier;		/* 'h', 'l', or 'L' for integer fields */
              				/* 'z' support added 23/7/1999 S.H.    */
              				/* 'z' changed to 'Z' --davidm 1/25/99 */
              
              	str = buf;
              	end = buf + CFG_DUMP_BUFSZ - 1;
              
              	for (; *fmt ; ++fmt) {
              		if (*fmt != '%') {
              			if (str <= end)
              				*str = *fmt;
              			++str;
              			continue;
              		}
              
              		/* process flags */
              		flags = 0;
              		repeat:
              			++fmt;		/* this also skips first '%' */
              			switch (*fmt) {
              				case '-': flags |= LEFT; goto repeat;
              				case '+': flags |= PLUS; goto repeat;
              				case ' ': flags |= SPACE; goto repeat;
              				case '#': flags |= SPECIAL; goto repeat;
              				case '0': flags |= ZEROPAD; goto repeat;
              			}
              
              		/* get field width */
              		field_width = -1;
              		if (isdigit(*fmt))
              			field_width = skip_atoi(&fmt);
C51 COMPILER V6.12  PRINTK                                                                 12/07/2004 17:58:48 PAGE 7   

              		else if (*fmt == '*') {
              			++fmt;
              			/* it's the next argument */
              			field_width = va_arg(args, int);
              			if (field_width < 0) {
              				field_width = -field_width;
              				flags |= LEFT;
              			}
              		}
              
              		/* get the precision */
              		precision = -1;
              		if (*fmt == '.') {
              			++fmt;	
              			if (isdigit(*fmt))
              				precision = skip_atoi(&fmt);
              			else if (*fmt == '*') {
              				++fmt;
              				/* it's the next argument */
              				precision = va_arg(args, int);
              			}
              			if (precision < 0)
              				precision = 0;
              		}
              
              		/* get the conversion qualifier */
              		qualifier = -1;
              		if (*fmt == 'h' || *fmt == 'l' || *fmt == 'L' ||
              		    *fmt =='Z' || *fmt == 'z') {
              			qualifier = *fmt;
              			++fmt;
              			if (qualifier == 'l' && *fmt == 'l') {
              				qualifier = 'L';
              				++fmt;
              			}
              		}
              
              		/* default base */
              		base = 10;
              
              		switch (*fmt) {
              			case 'c':
              				if (!(flags & LEFT)) {
              					while (--field_width > 0) {
              						if (str <= end)
              							*str = ' ';
              						++str;
              					}
              				}
              				c = (unsigned char) va_arg(args, int);
              				if (str <= end)
              					*str = c;
              				++str;
              				while (--field_width > 0) {
              					if (str <= end)
              						*str = ' ';
              					++str;
              				}
              				continue;
              
              			case 's':
              				s = va_arg(args, char *);
C51 COMPILER V6.12  PRINTK                                                                 12/07/2004 17:58:48 PAGE 8   

              				if (!s)
              					s = "<NULL>";
              
              				len = strnlen(s, precision);
              
              				if (!(flags & LEFT)) {
              					while (len < field_width--) {
              						if (str <= end)
              							*str = ' ';
              						++str;
              					}
              				}
              				for (i = 0; i < len; ++i) {
              					if (str <= end)
              						*str = *s;
              					++str; ++s;
              				}
              				while (len < field_width--) {
              					if (str <= end)
              						*str = ' ';
              					++str;
              				}
              				continue;
              
              			case 'p':
              				if (field_width == -1) {
              					field_width = 2*sizeof(void *);
              					flags |= ZEROPAD;
              				}
              				str = number(str, end,
              						(unsigned long) va_arg(args, void *),
              						16, field_width, precision, flags);
              				continue;
              
              
              			case 'n':
              				/* FIXME:
              				* What does C99 say about the overflow case here? */
              				if (qualifier == 'l') {
              					long * ip = va_arg(args, long *);
              					*ip = (str - buf);
              				} else if (qualifier == 'Z' || qualifier == 'z') {
              					mmsz_t * ip = va_arg(args, mmsz_t *);
              					*ip = (str - buf);
              				} else {
              					int * ip = va_arg(args, int *);
              					*ip = (str - buf);
              				}
              				continue;
              
              			case '%':
              				if (str <= end)
              					*str = '%';
              				++str;
              				continue;
              
              				/* integer number formats - set up the flags and "break" */
              			case 'o':
              				base = 8;
              				break;
              
              			case 'X':
C51 COMPILER V6.12  PRINTK                                                                 12/07/2004 17:58:48 PAGE 9   

              				flags |= LARGE;
              			case 'x':
              				base = 16;
              				break;
              
              			case 'd':
              			case 'i':
              				flags |= SIGN;
              			case 'u':
              				break;
              
              			default:
              				if (str <= end)
              					*str = '%';
              				++str;
              				if (*fmt) {
              					if (str <= end)
              						*str = *fmt;
              					++str;
              				} else {
              					--fmt;
              				}
              				continue;
              		}
              		if (qualifier == 'L')
              			num = va_arg(args, long long);
              		else if (qualifier == 'l') {
              			num = va_arg(args, unsigned long);
              			if (flags & SIGN)
              				num = (signed long) num;
              		} else if (qualifier == 'Z' || qualifier == 'z') {
              			num = va_arg(args, mmsz_t);
              		} else if (qualifier == 'h') {
              			num = (unsigned short) va_arg(args, int);
              			if (flags & SIGN)
              				num = (signed short) num;
              		} else {
              			num = va_arg(args, unsigned int);
              			if (flags & SIGN)
              				num = (signed int) num;
              		}
              		str = number(str, end, num, base,
              				field_width, precision, flags);
              	}
              	if (str <= end)
              		*str = '\0';
              	else
              		*end = '\0';
              	/* the trailing null byte doesn't count towards the total
              	* ++str;
              	*/
              	return str-buf;
              }
              
              int sprintf(char * buf, const char *fmt, ...)
              {
                  va_list args;
                  int i;
                  va_start(args, fmt);
                  i = vsprintf(buf, fmt, args);
                  va_end(args);
                  return i;
C51 COMPILER V6.12  PRINTK                                                                 12/07/2004 17:58:48 PAGE 10  

              }
              
              void printk(const char *fmt, ...)
              {
                  va_list args;
                  int i;
                  va_start(args, fmt);
                  i = vsprintf(sbuf, fmt, args);
                  va_end(args);
                  __ui_writec(sbuf, i);
              }
              
              #endif
 564          
 565          
 566          /*===========================================================================*/
 567          
 568          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   ----    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -