/* ** EPITECH PROJECT, 2018 ** task01 ** File description: ** I do task */ #include #include "lib/my_stdio.h" static const char base[2][16] = { "0123456789abcdef", "0123456789ABCDEF" }; static void vfprintf_set_output(printf_t *print, char str[], int maj) { int locate; int size; locate = (maj) ? 1 : 0; size = print->str_width; while (++print->cursor < print->nbr_width){ str[size - 1 - print->cursor] = base[locate][print->value % print->base]; print->value /= print->base; print->precision--; } } static void vfprintf_add_sign(printf_t *print, char str[]) { int size; size = print->str_width; if (print->mode_flags & PRINT_MODE_DIEZ){ str[size - 1 - print->cursor++] = '0'; print->precision--; } if (print->precision > 0) while (print->precision > 0){ str[size - 1 - print->cursor++] = '0'; print->precision--; } if (print->mode_flags & PRINT_MODE_HEXA){ if (print->mode_flags & PRINT_MODE_MAJ) str[size - 1 - print->cursor++] = 'X'; else str[size - 1 - print->cursor++] = 'x'; str[size - 1 - print->cursor++] = '0'; } if (print->sign != '\0') str[size - 1 - print->cursor++] = print->sign; } static void vfprintf_reverse_padding(char str[], int size) { char tmp[size + 1]; int len; int i; i = 0; len = -1; tmp[size] = '\0'; while (str[i++] == ' '); while (str[i++]) tmp[++len] = str[i]; while (++len < size) tmp[len] = ' '; i = -1; while (++i < size) str[i] = tmp[i]; } void vfprintf_print_arg(printf_t *print, int size) { char str[size + 1]; str[size] = '\0'; print->cursor = -1; vfprintf_set_output(print, str, print->mode_flags & PRINT_MODE_MAJ); vfprintf_add_sign(print, str); while (print->cursor < size) str[size - 1 - print->cursor++] = ' '; if (print->mode_flags & PRINT_MODE_MINUS) vfprintf_reverse_padding(str, print->str_width); write(print->stream, str, sizeof(str) - 1); }