int luaO_hexavalue (int c) { if (lisdigit(c)) return c - '0'; else return ltolower(c) - 'a' + 10; }
void esp_vprintf(const func_ptr f_ptr, charptr ctrl, va_list argp) { int long_flag; int dot_flag; char ch; out_char = f_ptr; for (; *ctrl; ctrl++) { /* move format string chars to buffer until a */ /* format control is found. */ if (*ctrl != '%') { out_char(*ctrl); continue; } /* initialize all the flags for this format. */ dot_flag = long_flag = left_flag = do_padding = 0; pad_character = ' '; num2 = 32767; try_next: ch = *(++ctrl); if (lisdigit(ch)) { if (dot_flag) num2 = getnum(&ctrl); else { if (ch == '0') pad_character = '0'; num1 = getnum(&ctrl); do_padding = 1; } ctrl--; goto try_next; } switch (ltolower(ch)) { case '%': out_char('%'); continue; case '-': left_flag = 1; break; case '.': dot_flag = 1; break; case 'l': long_flag = 1; break; case 'i': case 'd': if (long_flag || ch == 'D') { outnum(va_arg(argp, long), 10L); continue; } else { outnum(va_arg(argp, int), 10L); continue; } case 'x': outnum((long)va_arg(argp, int), 16L); continue; case 's': outs(va_arg(argp, charptr)); continue; case 'c': out_char(va_arg(argp, int)); continue; case '\\': switch (*ctrl) { case 'a': out_char(0x07); break; case 'h': out_char(0x08); break; case 'r': out_char(0x0D); break; case 'n': out_char(0x0D); out_char(0x0A); break; default: out_char(*ctrl); break; } ctrl++; break; default: continue; }