16static void az_default(
char *format, va_list ap);
17static void az_input(
char *format, va_list ap);
22int az_skip(
char *format,
int i);
23void az_fill(
int fillcnt,
char c);
25void az_plusflag(
int d,
char flag,
int param,
char *format);
29int az_output(
char *format,
char flag, va_list ap,
int i);
31void az_o_support(
int o,
int param,
char flag,
char f_addon);
33void az_c_support(
char c,
int param,
char flag,
char f_addon);
35void az_c(va_list ap,
char *format,
char flag);
36void az_s(va_list ap,
char *format,
char flag);
38void az_x(va_list ap,
char *format,
char flag);
39void az_d(va_list ap,
char *format,
char flag);
40void az_i(va_list ap,
char *format,
char flag);
41void az_o(va_list ap,
char *format,
char flag);
42void az_f(va_list ap,
char *format,
char flag);
43void az_u(va_list ap,
char *format,
char flag);
46static void az_default(
char *format, va_list ap)
75 if (format[mod + 1] ==
'%' && format[mod] ==
'%')
83 else if (mod == 0 || format[0] ==
'%')
104 if (format[i] ==
'%')
107 if (format[i] ==
'%')
122static void az_input(
char *format, va_list ap)
130 if (format[i] ==
'%')
136 else if (format[i] !=
'\0')
174 else if (flag ==
'#')
176 else if (flag ==
'+')
178 else if (flag ==
'-')
180 else if (flag ==
'*')
182 else if (flag ==
'.')
184 else if (flag ==
'*')
198 add_flag = format[
az_chrpos(format, flag) + 1];
199 add_flag_val = format[
az_chrpos(format, flag) + 2];
201 if (flag ==
'+' && add_flag !=
'0')
210 if (flag ==
'+' && add_flag ==
'0')
215 if (add_flag_val !=
'1')
231 if (flag ==
' ' && (param < 0) && d > 0)
234 if (flag ==
' ' && param)
244 if (flag ==
'0' && d < 0)
257int az_output(
char *format,
char flag, va_list ap,
int i)
273 if (flag ==
'+' && param > 0)
275 if (flag ==
'0' && param > 0)
279 if (f_addon ==
'+' && param > 0)
284 if (flag ==
'#' && f_addon ==
'-')
286 if (flag ==
'-' && param > 0)
298 if (flag ==
'-' && f_addon ==
'0')
309 else if (flag ==
'#' && f_addon ==
'-')
313 if (param > 0 && !flag)
320 if (param > 0 && !flag)
323 if (f_addon ==
'-' && flag ==
'+')
348 else if (format[i] ==
' ' &&
az_isdigit(format[i + 1]))
352 while (!
az_isdigit(format[i]) && format[i] !=
' ')
362 tmp[j++] = format[i++];
375 if (specif ==
'c' || specif ==
'C')
376 az_c(ap, format, flag);
377 else if (specif ==
's' || specif ==
'S')
378 az_s(ap, format, flag);
379 else if (specif ==
'p')
381 else if (specif ==
'x' || specif ==
'X')
382 az_x(ap, format, flag);
383 else if (specif ==
'd' || specif ==
'D')
384 az_d(ap, format, flag);
385 else if (specif ==
'i')
386 az_i(ap, format, flag);
387 else if (specif ==
'o' || specif ==
'O')
388 az_o(ap, format, flag);
389 else if (specif ==
'u' || specif ==
'U')
390 az_u(ap, format, flag);
391 else if (specif ==
'f' || specif ==
'F')
392 az_f(ap, format, flag);
397void az_f(va_list ap,
char *format,
char flag) {
398 double f = va_arg(ap,
double);
400 int param_precision = 6;
403 char *precision_ptr =
az_strchr(format,
'.');
404 if (precision_ptr != NULL) {
405 param_precision = atoi(precision_ptr + 1);
409 char format_string[20];
410 sprintf(format_string,
"%%%s%d.%df", (flag ==
'-') ?
"-" :
"", param_width, param_precision);
413 sprintf(buffer, format_string, f);
420void az_c(va_list ap,
char *format,
char flag)
428 c = (char)va_arg(ap,
int);
429 f_addon = format[
az_chrpos(format, flag) + 1];
433 if (flag ==
'+' && f_addon !=
'-')
435 if (flag ==
'0' && f_addon !=
'+')
437 if (f_addon ==
'+' && flag ==
'0')
444void az_s(va_list ap,
char *format,
char flag)
450 s = va_arg(ap,
char *);
451 if (s == NULL && flag ==
'\0')
459 if (param > 0 && (flag ==
' ' || flag ==
'+'))
460 az_fill(param - s_length,
' ');
463 if (param > 0 && !flag)
464 az_fill(param - s_length,
' ');
467 az_fill(param - s_length,
' ');
477 nbr = va_arg(ap,
int);
483void az_x(va_list ap,
char *format,
char flag)
490 if (flag ==
'#' && !
az_strchr(format,
'X'))
492 if (flag ==
'#' &&
az_strchr(format,
'X'))
496 if (x && !param && !
az_strchr(format,
'X'))
501void az_d(va_list ap,
char *format,
char flag)
519 if (flag ==
'+' && d >= 0)
523 if (param > 0 && flag !=
'0')
536void az_i(va_list ap,
char *format,
char flag)
546 az_fill(param - i_length, flag);
548 az_fill(param - i_length,
'0');
556void az_o(va_list ap,
char *format,
char flag)
565 f_addon = format[
az_chrpos(format, flag) + 1];
576void az_u(va_list ap,
char *format,
char flag)
582 u = va_arg(ap,
unsigned int);
586 az_fill((param - u_length), flag);
588 az_fill((param - u_length),
'0');
590 az_fill(param - u_length,
' ');
599 va_start(ap, format);
600 az_default((
char *)format, ap);
int az_atoi(const char *s)
char * az_itoa(int value, int base)
void * az_memalloc(size_t size)
void az_puthex(unsigned int n)
void az_putunsigned(unsigned int n)
char * az_strchr(const char *s, int c)
int az_strcmp(const char *s1, const char *s2)
size_t az_strlen(const char *s)
char * az_strsub(char const *s, unsigned int start, size_t len)
void kernel_putchar(char c)
void az_plusflag(int d, char flag, int param, char *format)
int az_output(char *format, char flag, va_list ap, int i)
void az_s(va_list ap, char *format, char flag)
void az_mod(char *format)
void az_i(va_list ap, char *format, char flag)
int az_skip(char *format, int i)
void az_minusflag(int d, char flag)
void az_u(va_list ap, char *format, char flag)
void az_f(va_list ap, char *format, char flag)
void az_d(va_list ap, char *format, char flag)
void az_x(va_list ap, char *format, char flag)
void az_fill(int fillcnt, char c)
int function_Test(int a, int b)
void az_spaceflag(int d, char flag, int param)
void az_o_support_p2(char flag, char *fmt, char f_addon)
void az_zeroflag(int d, char flag)
int az_default_mod(char *format)
int az_chrpos(const char *s, int c)
void test_kernel_printf()
char az_getflag(char flag)
void az_putstr(const char *s)
int az_getparam(char *format, char flag)
void az_speciftypeini(char *format, char specif, char flag, va_list ap)
void az_c_support(char c, int param, char flag, char f_addon)
void az_o(va_list ap, char *format, char flag)
void az_c(va_list ap, char *format, char flag)
void az_o_support(int o, int param, char flag, char f_addon)
kernel_printf("5-4 = %d\n", 1)