39 if (sym <=
'7' && sym >=
'0') {
44 if (sym <=
'f' && sym >=
'a') {
45 return (sym -
'a' + 0xa);
67static inline double ch_mpow(
double x,
unsigned long y)
118 bool is_long, is_signed, is_positive;
126 bool exp_is_positive, initial_digit;
187 buf = va_arg(ap,
void*);
193 width = (width * 10) + (f -
'0');
202 if (f ==
'l' || f ==
'L') {
206 is_long = isupper(f);
221 for (i = 0; i < width; ++i) {
246 for (i = 0; i < width; ++i) {
267 ((
char*)buf)[width] = 0;
280 initial_digit =
false;
291 }
else if (c ==
'-') {
315 if (tolower(c) ==
'n') {
319 while (*match != 0) {
320 if (*match != tolower(c)) {
336 if (tolower(c) ==
'i') {
340 while (*match != 0) {
341 if (*match != tolower(c)) {
356 while (*match != 0) {
357 if (*match != tolower(c)) {
377 if (c ==
'x' || c ==
'X') {
400 valf = (valf * base) + (
double)digit;
415 valf = (valf * base) + (
double)digit;
426 valf = valf / ch_mpow(base, fixed_point);
428 if (tolower(c) == exp_char) {
433 exp_is_positive =
true;
442 }
else if (c ==
'-') {
446 exp_is_positive =
false;
467 exp = (exp * 10) + digit;
470 if (exp_is_positive) {
471 valf = valf * (double)ch_mpow(exp_base, exp);
473 valf = valf / (double)ch_mpow(exp_base, exp);
484 *(
double*)buf = valf;
507 }
else if (c ==
'-') {
520 if (c ==
'x' || c ==
'X') {
545 }
else if (c ==
'-') {
567 }
else if (c ==
'-') {
579 if (c ==
'x' || c ==
'X') {
600 }
else if (c ==
'-') {
621 }
else if (c ==
'-') {
649 vall = (vall * base) + digit;
659 if (is_long && is_signed) {
660 *((
signed long*)buf) = vall;
661 }
else if (is_long && !is_signed) {
662 *((
unsigned long*)buf) = vall;
663 }
else if (!is_long && is_signed) {
664 *((
signed int*)buf) = vall;
665 }
else if (!is_long && !is_signed) {
666 *((
unsigned int*)buf) = vall;
742int chsnscanf(
char *str,
size_t size,
const char *fmt, ...)
784int chvsnscanf(
char *str,
size_t size,
const char *fmt, va_list ap)
791 while ((eos < size) && (str[eos] !=
'\0')) {
Mini scanf-like functionality.
int chscanf(BaseBufferedStream *chp, const char *fmt,...)
System formatted input function.
int chsnscanf(char *str, size_t size, const char *fmt,...)
System formatted input function.
int chvscanf(BaseBufferedStream *chp, const char *fmt, va_list ap)
System formatted input function.
static long sym_to_val(char sym, int base)
int chvsnscanf(char *str, size_t size, const char *fmt, va_list ap)
System formatted input function.
void msObjectInit(MemoryStream *msp, uint8_t *buffer, size_t size, size_t eos)
Memory stream object initialization.
#define streamGet(ip)
Sequential Stream blocking byte read.
#define streamUnget(ip, b)
Buffered Stream unget.
Memory streams structures and macros.