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;
125 bool exp_is_positive, initial_digit;
186 buf = va_arg(ap,
void*);
192 width = (width * 10) + (f -
'0');
201 if (f ==
'l' || f ==
'L') {
205 is_long = isupper(f);
219 for (i = 0; i < width; ++i) {
244 for (i = 0; i < width; ++i) {
265 ((
char*)buf)[width] = 0;
278 initial_digit =
false;
289 }
else if (c ==
'-') {
313 if (tolower(c) ==
'n') {
317 while (*match != 0) {
318 if (*match != tolower(c)) {
334 if (tolower(c) ==
'i') {
338 while (*match != 0) {
339 if (*match != tolower(c)) {
354 while (*match != 0) {
355 if (*match != tolower(c)) {
375 if (c ==
'x' || c ==
'X') {
398 valf = (valf * base) + (
double)digit;
413 valf = (valf * base) + (
double)digit;
424 valf = valf / ch_mpow(base, fixed_point);
426 if (tolower(c) == exp_char) {
431 exp_is_positive =
true;
440 }
else if (c ==
'-') {
444 exp_is_positive =
false;
465 exp = (exp * 10) + digit;
468 if (exp_is_positive) {
469 valf = valf * (double)ch_mpow(exp_base, exp);
471 valf = valf / (double)ch_mpow(exp_base, exp);
482 *(
double*)buf = valf;
505 }
else if (c ==
'-') {
518 if (c ==
'x' || c ==
'X') {
542 }
else if (c ==
'-') {
564 }
else if (c ==
'-') {
576 if (c ==
'x' || c ==
'X') {
595 }
else if (c ==
'-') {
616 }
else if (c ==
'-') {
642 vall = (vall * base) + digit;
651 if (is_long && is_signed) {
652 *((
signed long*)buf) = vall;
653 }
else if (is_long && !is_signed) {
654 *((
unsigned long*)buf) = vall;
655 }
else if (!is_long && is_signed) {
656 *((
signed int*)buf) = vall;
657 }
else if (!is_long && !is_signed) {
658 *((
unsigned int*)buf) = vall;
734int chsnscanf(
char *str,
size_t size,
const char *fmt, ...)
776int chvsnscanf(
char *str,
size_t size,
const char *fmt, va_list ap)
782 size_wo_nul = size - 1;
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.
int32_t msg_t
Type of a message.
Memory streams structures and macros.