예제 #1
0
int luaO_hexavalue (int c) {
  if (lisdigit(c)) return c - '0';
  else return ltolower(c) - 'a' + 10;
}
예제 #2
0
파일: printf.cpp 프로젝트: ChaiSoft/ChaiOS
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;
		}