📄 stdio.c
字号:
if (precision>=j)
{
k='0';
goto print_sign;
};
if ((width>=j) && ((flags & F_LEFT_JUSTIFY)==0))
{
k=' ';
if (flags & F_PAD_CHR0)
{
k='0';
print_sign:
flags|=F_NON_ZERO;
if (flags & F_SIGNED) _PRINT_SIGN();
};
print_digit:
_put(k,ps_ptr,&msize);
if (width) --width;
};
--j;
arg_val.n%=i;
i/=base;
}
while (i);
if (flags & F_LEFT_JUSTIFY)
while (width)
{
--width;
_put(' ',ps_ptr,&msize);
};
default:
next:
l=TEST_FORMAT;
};
};
}
#endif
#endif
#if funcused sprintf
void sprintf(char *str,char flash *fmtstr,...)
{
va_list argptr;
ps_s p;
va_start(argptr,fmtstr);
p.ps=str;
_print(fmtstr,argptr,&p,0);
*p.ps=0;
}
#endif
#if funcused snprintf
#ifdef _MODEL_TINY_
void snprintf(char *str, unsigned char size, char flash *fmtstr,...)
#else
void snprintf(char *str, unsigned int size, char flash *fmtstr,...)
#endif
{
va_list argptr;
ps_s p;
if (size)
{
va_start(argptr,fmtstr);
p.ps=str;
_print(fmtstr,argptr,&p,size);
*p.ps=0;
};
}
#endif
#if funcused vsprintf
void vsprintf(char *str,char flash *fmtstr,va_list argptr)
{
ps_s p;
p.ps=str;
_print(fmtstr,argptr,&p,0);
*p.ps=0;
}
#endif
#if funcused vsnprintf
#ifdef _MODEL_TINY_
void vsnprintf (char *str, unsigned char size, char flash * fmtstr, va_list argptr)
#else
void vsnprintf (char *str, unsigned int size, char flash * fmtstr, va_list argptr)
#endif
{
ps_s p;
if (size)
{
p.ps=str;
_print(fmtstr,argptr,&p,size);
*p.ps=0;
};
}
#endif
#if funcused printf
void printf(char flash *fmtstr,...)
{
va_list argptr;
ps_s p;
va_start(argptr,fmtstr);
p.ps=NULL;
_print(fmtstr,argptr,&p,0);
}
#endif
#if funcused vprintf
void vprintf(char flash *fmtstr,va_list argptr)
{
ps_s p;
p.ps=NULL;
_print(fmtstr,argptr,&p,0);
}
#endif
#if funcused scanf | funcused sscanf
static char _get(char *ptr_cc,ps_s *ptr_ps)
{
char k;
if (k=*ptr_cc) *ptr_cc=0;
else if (ptr_ps->ps)
{
if (k=*(ptr_ps->ps)) ++(ptr_ps->ps);
}
#if defined _CHIP_ATTINY13_ | \
defined _CHIP_ATTINY22_ | defined _CHIP_ATTINY22L_ | \
defined _CHIP_ATTINY24_ | defined _CHIP_ATTINY25_ | \
defined _CHIP_ATTINY26_ | defined _CHIP_ATTINY26L_ | \
defined _CHIP_ATTINY261_ | defined _CHIP_ATTINY261V_ | \
defined _CHIP_ATTINY44_ | defined _CHIP_ATTINY45_ | \
defined _CHIP_ATTINY461_ | defined _CHIP_ATTINY461V_ | \
defined _CHIP_ATTINY84_ | defined _CHIP_ATTINY85_ | \
defined _CHIP_ATTINY861_ | defined _CHIP_ATTINY861V_ | \
defined _CHIP_AT90S2343_ | defined _CHIP_AT90LS2343_ | \
defined _CHIP_AT90C8534_ | \
defined _CHIP_AT86RF401_ | defined _CHIP_AT43USB355_
#ifdef _ALTERNATE_GETCHAR_
else k=getchar();
#elif funcused scanf
#error the scanf function can't be used as the chip doesn't have an U(S)ART
#endif
#else
else k=getchar();
#endif
return k;
}
#ifdef _SCANF_INT_WIDTH_
static signed char _scanf(char flash *fmtstr,va_list argptr,ps_s *ptr_ps)
{
void *parg;
unsigned char k,b,width;
char cc;
signed char ns,s;
unsigned int n;
cc=ns=0;
while (k=*fmtstr++)
{
if (isspace(k))
{
while ((k=_get(&cc,ptr_ps)) && isspace(k));
cc=k;
}
else if (k=='%')
{
width=0;
while (1)
{
k=*fmtstr++;
if ((k<'0')||(k>'9')) break;
width*=10;
width+=k-'0';
};
if (k==0) break;
while (isspace(b=_get(&cc,ptr_ps)));
if (b==0) goto _scan_end;
cc=b;
if (width==0) width=255;
switch (k)
{
case 'c':
parg=va_arg(argptr,char *);
*(char *)parg=_get(&cc,ptr_ps);
break;
case 's':
parg=va_arg(argptr,char *);
while (width--)
{
if (((k=_get(&cc,ptr_ps))==0) || isspace(k)) break;
*(char *)parg++=k;
};
*(char *)parg=0;
break;
default:
s=1;
switch (k)
{
case 'd':
case 'i': s=0;
case 'u': b=10; break;
case 'x': b=16; break;
case '%': goto _scan_cmp;
default: return ns;
};
n=0;
while (width--)
{
if ((k=_get(&cc,ptr_ps))<=' ') goto _scan_next;
if (s==0)
{
if (k=='-') {s=-1; continue;}
else s=1;
};
if (b==16)
{
if (!isxdigit(k)) goto _scan_next;
}
else
if (!isdigit(k))
{
_scan_next:
cc=k;
break;
};
if (k>='a') k-=0x57;
else if(k>='A') k-=0x37;
else k-='0';
n=n*b+k;
};
parg=va_arg(argptr,int *);
*(int *)parg=n*s;
};
++ns;
}
else
{
_scan_cmp:
if (k!=_get(&cc,ptr_ps))
{
_scan_end:
if (ns==0) return EOF;
break;
};
};
};
return ns;
}
#elif defined _SCANF_LONG_WIDTH_
static signed char _scanf(char flash *fmtstr,va_list argptr,ps_s *ptr_ps)
{
void *parg;
unsigned char k,b,width,long_flag;
char cc;
signed char ns,s;
unsigned long n;
cc=ns=0;
while (k=*fmtstr++)
{
if (isspace(k))
{
while ((k=_get(&cc,ptr_ps)) && isspace(k));
cc=k;
}
else if (k=='%')
{
width=0;
while (1)
{
k=*fmtstr++;
if ((k<'0')||(k>'9')) break;
width*=10;
width+=k-'0';
};
if (k==0) break;
while (isspace(b=_get(&cc,ptr_ps)));
if (b==0) goto _scan_end;
cc=b;
if (width==0) width=255;
long_flag=0;
switch (k)
{
case 'c':
parg=va_arg(argptr,char *);
*(char *)parg=_get(&cc,ptr_ps);
break;
case 's':
parg=va_arg(argptr,char *);
while (width--)
{
if (((k=_get(&cc,ptr_ps))==0) || isspace(k)) break;
*(char *)parg++=k;
};
*(char *)parg=0;
break;
case 'l':
long_flag=1;
k=*fmtstr++;
default:
s=1;
switch (k)
{
case 'd':
case 'i': s=0;
case 'u': b=10; break;
case 'x': b=16; break;
case '%': goto _scan_cmp;
default: return ns;
};
n=0;
while (width--)
{
if ((k=_get(&cc,ptr_ps))<=' ') goto _scan_next;
if (s==0)
{
if (k=='-') {s=-1; continue;}
else s=1;
};
if (b==16)
{
if (!isxdigit(k)) goto _scan_next;
}
else
if (!isdigit(k))
{
_scan_next:
cc=k;
break;
};
if (k>='a') k-=0x57;
else if(k>='A') k-=0x37;
else k-='0';
n=n*b+k;
};
n=n*s;
if (long_flag)
{
parg=va_arg(argptr,long *);
*(long *)parg=n;
}
else
{
parg=va_arg(argptr,int *);
*(int *)parg=(int) n;
};
};
++ns;
}
else
{
_scan_cmp:
if (k!=_get(&cc,ptr_ps))
{
_scan_end:
if (ns==0) return EOF;
break;
};
};
};
return ns;
}
#endif
#endif
#if funcused sscanf
signed char sscanf(char *str,char flash *fmtstr,...)
{
va_list argptr;
ps_s p;
if (str==NULL) return -1;
va_start(argptr,fmtstr);
p.ps=str;
return _scanf(fmtstr,argptr,&p);
}
#endif
#if funcused scanf
signed char scanf(char flash *fmtstr,...)
{
va_list argptr;
ps_s p;
va_start(argptr,fmtstr);
p.ps=NULL;
return _scanf(fmtstr,argptr,&p);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -