莱昂氏UNIX源代码分析UNIXv6src.tar.gz

源代码在线查看: printf.c

软件大小: 1346 K
上传用户: Jonson_zhu
关键词: UNIXv UNIX src tar
下载地址: 免注册下载 普通下载 VIP

相关代码

				char  *_ptrbf, *_ptrst, *__fmt;				printf(a1,a2,a3,a4){				auto char  c, *s,  adj, *ptr,*p, buf[30];				extern cputc(),_putstr(), cout;				auto int  *adx, x, n, m, width, prec,i, padchar, fd;				double zz, *dblptr;				char (*f)();				_ptrbf = buf;								fd=cout;				adx = &a1;				f = cputc;				if (a1 == -1)				  {				  f = _putstr;				  _ptrst = a2;				  adx =+ 2;				  }				else if (a1 >= 0 && a1 				  fd = *adx++;				__fmt = *adx++;												while( c = *__fmt++ ){				   if(c != '%') (*f)(c,fd);				   else { x = *adx++;				      if( *__fmt == '-' ){ adj = 'l';  __fmt++; }				      else adj = 'r';				   padchar = (*__fmt=='0') ? '0' : ' ';				      width = __conv();				      if( *__fmt == '.'){++__fmt; prec = __conv();}				      else prec = 0;								   s = 0;				   switch ( c = *__fmt++ ) {				     case 'D':				     case 'd':					_prt1(x); break;				     case 'o':				     case 'O':				         _prnt8(x); break;				     case 'x':				     case 'X':				          _prntx(x); break;				      case 'S':				     case 's':    s=x;				        break;				     case 'C':				     case 'c':   *_ptrbf++ = x&0777;				         break;				     case 'E':				     case 'e':				     case 'F':				     case 'f':				      dblptr = adx-1;				      zz = *dblptr;				      adx =+ 3;				      ftoa (zz, buf, prec, c);				      prec = 0;				      s = buf;				     break;				     default:   (*f)(c,fd);				         adx--;				   }				   if (s == 0)				    {*_ptrbf = '\0'; s = buf;}				   n = _clenf (s);				   n = (prec				   m = width-n;				   if (adj == 'r') while (m-- > 0) (*f)(padchar,fd);				   while (n--) (*f)(*s++,fd);				   while (m-- > 0) (*f)(padchar,fd);				   _ptrbf = buf;				   }				}				if(a1 == -1) (*f)('\0',fd);				}												_prnt8 (n)				{ /* print in octal */				int p, k, sw;				if (n==0) {*_ptrbf++ = '0'; return;}				sw = 0;				for (p=15; p >= 0; p =- 3)				  if ((k = (n>>p)&07) || sw)				   {				    *_ptrbf++ = '0' + k;				     sw = 1;				     }				}				_prntx (n)				{					int d,a;					if (a = n>>4)						_prntx ( a & 07777);					d = n&017;					*_ptrbf++ =  d > 9 ? 'A'+d-10 : '0' + d;				}								__conv()				{				auto c,n;				n = 0;				while( ((c = *__fmt++) >= '0') && (c				__fmt--;				return(n);				}								_putstr(chr,str){				*_ptrst++ = chr;				return; ieh305i(); /* force loading of dummy.s */				}				_prt1(n)				{				int digs[15], *dpt;				dpt = digs;				if (n >= 0)				   n = -n;				else				   *_ptrbf++ = '-';				for (; n != 0; n = n/10)				 *dpt++ = n%10;				if (dpt == digs)				   *dpt++ = 0;				while (dpt != digs)				   { --dpt;				   *_ptrbf++ =  '0' - *dpt;				}				}							

相关资源