SJ_PRIVATE enum v7_err Console_log(struct v7 *v7, v7_val_t *res) { int argc = v7_argc(v7); /* Put everything into one message */ for (int i = 0; i < argc; i++) { v7_val_t arg = v7_arg(v7, i); if (v7_is_string(arg)) { size_t len; const char *str = v7_get_string(v7, &arg, &len); puts_n(str, len); } else { char buf[100], *p; p = v7_stringify(v7, arg, buf, sizeof(buf), V7_STRINGIFY_DEBUG); puts_n(p, strlen(p)); if (p != buf) free(p); } if (i != argc - 1) { putchar(' '); } } putchar('\n'); *res = V7_UNDEFINED; /* like JS print */ return V7_OK; }
void printf(const char* format, ...){ char convertBuffer[BUF_SIZE]; va_list vars; int iVal = 0; float fVal = 0.0f; char* strVal = NULL; unsigned int uiVal = 0; int length = 0; va_start(vars, format); int skip = 0; while( *format != '\0' ){ for(; *format!='\0' && *format!='%' ; format++) skip++; puts_n(format-skip, skip); skip = 0; if(*format == '%'){ format++; switch(*format){ case 'd': iVal = va_arg(vars, int); length = format_int(iVal, convertBuffer, BUF_SIZE); puts_n(convertBuffer, length); iVal = 0; format++; break; case 'e': fVal = va_arg(vars, double); length = format_float(fVal, convertBuffer, BUF_SIZE); puts_n(convertBuffer, length); fVal = 0.0f; format++; break; case 's': strVal = va_arg(vars, char*); puts(strVal); strVal = NULL; format++; break; case 'c': iVal = va_arg(vars, int); putchar(iVal); iVal = 0; format++; break; case 'x': iVal = va_arg(vars, int); format++; break; case 'u': uiVal = va_arg(vars, unsigned int); format++; break; case '%': putchar('%'); format++; break; default: break; } } }