aboutsummaryrefslogtreecommitdiff
path: root/ft_printf.c
diff options
context:
space:
mode:
Diffstat (limited to 'ft_printf.c')
-rw-r--r--ft_printf.c78
1 files changed, 38 insertions, 40 deletions
diff --git a/ft_printf.c b/ft_printf.c
index 9540489..49781e1 100644
--- a/ft_printf.c
+++ b/ft_printf.c
@@ -5,65 +5,63 @@
int ft_printf(const char *format, ...)
{
- int i;
+ int print_len;
va_list ap;
+ /* va_list ap_start; */
+ /* int ap_index; */
t_list *format_list;
- t_conversion conv;
+ char *str;
if ((format_list = parse(format)) == NULL)
return (-1);
+ /* ap_index = 0; */
va_start(ap, format);
- i = -1;
- while (format[++i])
+
+ /* va_copy(ap_start, ap); */
+ print_len = -1;
+ while (format[++print_len])
{
- if (format[i] == '%')
+ if (format[print_len] == '%')
{
- conv = format_list->data->conversion;
- if (conv == CONVERSION_CHAR)
- ft_putchar(va_arg(ap, char));
- else if (conv == CONVERSION_STR)
- ft_putstr(va_arg(ap, char*));
- else if (conv == CONVERSION_PTR)
- {
- ft_putstr("0x");
- PUTXNBR(va_arg(ap, long unsigned int));
- }
- else if (conv == CONVERSION_DECIMAL || conv == CONVERSION_INT)
- ft_putnbr(va_arg(ap, int));
- else if (conv == CONVERSION_UINT)
- ft_putunbr(va_arg(ap, unsigned int));
- else if (conv == CONVERSION_HEX_LOWER)
- PUTXNBR(va_arg(ap, unsigned int));
- else if (conv == CONVERSION_HEX_UPPER)
- PUTXMAJNBR(va_arg(ap, unsigned int));
- else if (conv == CONVERSION_PERCENT)
- ft_putchar('%');
- i += format_list->data->len;
+ /* if (format_list->data->ap_index != -1) */
+ /* { */
+ /* ap_index = format_list->data->ap_index; */
+ /* } */
+ /* else */
+ /* ap_index++; */
+ /* printf("\n%d\n", format_list->data->left_adjusted); */
+ if ((str = convert_to_str(format_list->data, ap)) == NULL)
+ return (-1);
+ ft_putstr(str);
+ free(str);
+
+
+ print_len += format_list->data->len;
list_pop_front(&format_list);
}
else
- write(STDOUT_FILENO, format + i, 1);
+ write(STDOUT_FILENO, format + print_len, 1);
}
va_end(ap);
- return (0);
+ return (print_len);
}
int main()
{
- int test;
+ /* int test; */
- ft_printf("char: %c\n", 'r');
- ft_printf("string: %s\n", "bonjour");
- ft_printf("pointer: %p\n", &test);
- ft_printf("int: %d or %i\n", 45, 54);
- ft_printf("uint: %u\n", 1 << 31);
- ft_printf("hex lower: %x\n", 0xabcf012);
- ft_printf("hex upper: %X\n", 0xabcf012);
- ft_printf("percent: %%\n");
+ /* ft_printf("char: %c\n", 'r'); */
+ /* ft_printf("string: %s\n", "bonjour"); */
+ /* ft_printf("pointer: %p\n", &test); */
+ /* ft_printf("int: %d or %i\n", 45, 54); */
+ /* ft_printf("uint: %u\n", 1 << 31); */
+ /* ft_printf("hex lower: %x\n", 0xabcf012); */
+ /* ft_printf("hex upper: %X\n", 0xabcf012); */
+ /* ft_printf("percent: %%\n"); */
/* ft_printf("precision %.2d\n", 43); */
- ft_printf("min width %4d\n", 43);
- ft_printf("zero padding %04d\n", 43);
- ft_printf("right adjusted %-4d\n", 43);
+ ft_printf("min width |%9d|\n", 43);
+ ft_printf("zero padding |%09d|\n", 43);
+ ft_printf("left adjusted |%-9d|\n", 43);
return 0;
}