@@ -0,0 +1,19 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_isprint.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/05/09 11:19:37 by mvanwyk #+# #+# */
/* Updated: 2016/05/09 11:21:13 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

int ft_isprint(char c)
{
if (c > 31 && c < 127)
return (1);
else
return (0);
}
@@ -0,0 +1,19 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_isupper.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/05/09 09:22:47 by mvanwyk #+# #+# */
/* Updated: 2016/05/09 09:49:26 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

int ft_isupper(char c)
{
if (c >= 65 && c <= 90)
return (1);
else
return (0);
}
@@ -0,0 +1,41 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_itoa.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/05/15 15:18:41 by mvanwyk #+# #+# */
/* Updated: 2016/05/15 15:18:44 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "libft.h"

char *ft_itoa(int n)
{
char *istr;

istr = (char *)malloc(sizeof(char) * 32);
if (n == 0)
*--istr = '0' + n;
if (n >= 0)
{
while (n != 0)
{
*--istr = '0' + (n % 10);
n = n / 10;
}
}
else
{
while (n != 0)
{
*--istr = '0' - (n % 10);
n = n / 10;
}
*--istr = '-';
}
istr[ft_strlen(istr)] = '\0';
return (istr);
}
@@ -0,0 +1,63 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_itobase.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/06/03 14:41:32 by mvanwyk #+# #+# */
/* Updated: 2016/08/09 14:21:07 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "libft.h"

static int set_nbr(int n)
{
int nbr;

nbr = 0;
if (n < 0)
{
if (n == -2147483648)
{
nbr = n + 1;
nbr = -nbr;
}
else
{
nbr = n;
nbr = -nbr;
}
}
else
nbr = n;
return (nbr);
}

char *ft_itobase(int n, int base)
{
char *basechars;
char *out;
int nbr;
int bc;

basechars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
out = (char *)malloc(sizeof(char) * 32);
nbr = set_nbr(n);
bc = 0;
*out = '\0';
if (n == 0)
*--out = '0';
while (nbr != 0)
{
bc = nbr % base;
nbr = nbr / base;
*--out = basechars[bc];
}
if (n < 0 && base == 10)
*--out = '-';
if (n == -2147483648 && base == 10)
out[ft_strlen(out) - 1] = '8';
return (out);
}
@@ -0,0 +1,23 @@
#include "libft.h"

int *ft_itorgb(int rgbint)
{
// if rgbint < 0?
// if rgbint > x?
int r;
int g;
int b;
int *rgb;

r = 0;
g = 0;
b = 0;
rgb = (int *)malloc(sizeof(int) * 3);
// r = (rgbint >> 16) & 255;
// g = (rgbint >> 8) & 255;
// b = rgb & 255;
rgb[0] = (rgbint >> 16) & 255;
rgb[1] = (rgbint >> 8) & 255;
rgb[2] = rgbint & 255;
return (rgb);
}
@@ -0,0 +1,27 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_lindexof.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/05/24 15:04:43 by mvanwyk #+# #+# */
/* Updated: 2016/05/31 17:13:01 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "libft.h"

int ft_lindexof(const char *str, char c)
{
int cnt;

cnt = ft_strlen(str) - 1;
while (cnt != 0)
{
if (str[cnt] == c)
return (cnt);
cnt--;
}
return (-1);
}
@@ -0,0 +1,24 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_lstdel.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/08/09 14:22:19 by mvanwyk #+# #+# */
/* Updated: 2016/08/09 14:22:21 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "libft.h"

void ft_lstdel(t_list **alst, void (*del)(void *, size_t))
{
while (*alst != NULL)
{
del(&(*alst)->content, (*alst)->content_size);
free(*alst);
*alst = NULL;
*alst = (*alst)->next;
}
}
@@ -0,0 +1,20 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_lstdelone.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/08/09 14:22:37 by mvanwyk #+# #+# */
/* Updated: 2016/08/09 14:22:39 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "libft.h"

void ft_lstdelone(t_list **alst, void (*del)(void *, size_t))
{
del(&(*alst)->content, (*alst)->content_size);
free(*alst);
*alst = NULL;
}
@@ -0,0 +1,37 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_lstnew.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/08/09 14:22:57 by mvanwyk #+# #+# */
/* Updated: 2016/08/09 14:22:58 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "libft.h"

t_list *ft_lstnew(void const *content, size_t content_size)
{
t_list *lst;

lst = (t_list *)malloc(sizeof(t_list));
if (!lst)
return (NULL);
if (content == NULL)
{
lst->content = NULL;
lst->content_size = 0;
}
else
{
lst->content = (void *)malloc(sizeof(content));
if (lst->content == NULL)
return (NULL);
ft_memcpy(lst->content, content, content_size);
lst->content_size = content_size;
}
lst->next = NULL;
return (lst);
}
@@ -0,0 +1,30 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_memalloc.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/05/15 15:13:55 by mvanwyk #+# #+# */
/* Updated: 2016/05/15 15:13:57 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "libft.h"

void *ft_memalloc(size_t size)
{
unsigned char *mem;
unsigned int cnt;

mem = (unsigned char *)malloc(sizeof(unsigned char) * size);
cnt = 0;
if (mem == NULL)
return (NULL);
while (cnt < size)
{
mem[cnt] = 0;
cnt++;
}
return (mem);
}
@@ -0,0 +1,32 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_memccpy.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/05/10 12:24:52 by mvanwyk #+# #+# */
/* Updated: 2016/05/10 13:54:13 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "libft.h"

void *ft_memccpy(void *dst, void *src, int c, size_t n)
{
unsigned char *d;
unsigned char *s;

d = (unsigned char *)dst;
s = (unsigned char *)src;
while (n != 0)
{
*d = *s;
if (*s == (unsigned char)c)
return ((void *)++s);
d++;
s++;
n--;
}
return (NULL);
}
@@ -0,0 +1,29 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_memchr.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/05/10 15:51:31 by mvanwyk #+# #+# */
/* Updated: 2016/05/10 16:00:37 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "libft.h"

void *ft_memchr(void *s, int c, size_t n)
{
size_t cnt;
unsigned char *s_uc;

cnt = 0;
s_uc = (unsigned char *)s;
while (cnt < n)
{
if (s_uc[cnt] == (unsigned char)c)
return ((void *)&s_uc[cnt]);
cnt++;
}
return (NULL);
}
@@ -0,0 +1,31 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_memcmp.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/05/10 16:24:41 by mvanwyk #+# #+# */
/* Updated: 2016/05/10 17:17:28 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "libft.h"

int ft_memcmp(void *s1, void *s2, size_t n)
{
unsigned char *s1_uc;
unsigned char *s2_uc;

s1_uc = (unsigned char *)s1;
s2_uc = (unsigned char *)s2;
while (n != 0)
{
if (s1_uc != s2_uc)
return (s1_uc - s2_uc);
s1_uc++;
s2_uc++;
n--;
}
return (0);
}
@@ -0,0 +1,30 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_memcpy.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/05/10 17:33:00 by mvanwyk #+# #+# */
/* Updated: 2016/05/15 15:19:54 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "libft.h"

void *ft_memcpy(void *dst, void const *src, size_t n)
{
char *d;
char *s;

d = (char *)dst;
s = (char *)src;
while (n != 0)
{
*d = *s;
d++;
s++;
n--;
}
return (dst);
}
@@ -0,0 +1,19 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_memdel.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/05/15 15:15:04 by mvanwyk #+# #+# */
/* Updated: 2016/05/15 15:15:09 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "libft.h"

void ft_memdel(void **ap)
{
free(*ap);
*ap = 0;
}
@@ -0,0 +1,37 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_memmove.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/05/10 13:55:44 by mvanwyk #+# #+# */
/* Updated: 2016/05/10 15:47:26 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "libft.h"

void *ft_memmove(void *dst, void *src, size_t len)
{
unsigned char *d;
unsigned char *s;

d = (unsigned char *)dst;
s = (unsigned char *)src;
if (!d || !s)
return (0);
if (d > s)
{
d += len;
s += len;
while (len-- != 0)
*--d = *--s;
}
else
{
while (len-- != 0)
*d++ = *s++;
}
return (dst);
}
@@ -0,0 +1,27 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_memset.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/05/10 17:32:30 by mvanwyk #+# #+# */
/* Updated: 2016/05/11 14:52:57 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "libft.h"

void *ft_memset(void *b, int c, size_t len)
{
unsigned char *str;

str = b;
while (len != 0)
{
*str = (unsigned char)c;
str++;
len--;
}
return (b);
}
@@ -0,0 +1,32 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_prependc.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/05/31 17:14:19 by mvanwyk #+# #+# */
/* Updated: 2016/05/31 17:14:20 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "libft.h"

char *ft_prependc(char *str, int c)
{
int len;
int cnt;
char *out_str;

len = ft_strlen(str) + 1;
cnt = 1;
out_str = (char *)malloc(sizeof(char) * len);
out_str[0] = c;
while (cnt < len)
{
out_str[cnt] = str[cnt - 1];
cnt++;
}
out_str[len] = '\0';
return (out_str);
}
@@ -0,0 +1,30 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* check_length.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/06/05 12:48:52 by mvanwyk #+# #+# */
/* Updated: 2016/06/07 16:54:53 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "./ft_printf/includes/ft_printf.h"

int check_length(t_mods mods)
{
int len;
int cnt;

len = ft_strlen(mods.fmtl);
cnt = 0;
while (cnt < len - 1)
{
if (mods.fmtl[cnt] != 'l' && mods.fmtl[cnt] != 'h' &&
mods.fmtl[cnt] != 'j' && mods.fmtl[cnt] != 'z')
return (0);
cnt++;
}
return (1);
}
@@ -0,0 +1,107 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* extra_formatting.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/05/31 17:09:53 by mvanwyk #+# #+# */
/* Updated: 2016/06/06 12:33:30 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "./ft_printf/includes/ft_printf.h"

char *fmt_p(t_mods mods, char *out_str)
{
char *new_str;
char *pad;
int padlen;

padlen = 0;
if (mods.precision != -1)
return ("ERROR: 'p' does not use precision");
if (mods.width != -1 && (mods.width > (int)ft_strlen(out_str)))
{
padlen = mods.width - ft_strlen(out_str);
pad = (char *)malloc(sizeof(char) * padlen);
ft_memset(pad, ' ', padlen);
if (mods.flag != '\0')
{
if (mods.flag != '-')
return ("ERROR: only the '-' flag applies to 's'");
new_str = ft_strjoin(out_str, pad);
}
else
new_str = ft_strjoin(pad, out_str);
}
else
new_str = out_str;
return (new_str);
}

char *fmt_c(t_mods mods, char out_char)
{
char *tmp_str;
char *new_str;
char *pad;
int padlen;

tmp_str = (char *)malloc(sizeof(char) * 1);
tmp_str[0] = out_char;
if (mods.width != -1)
{
padlen = mods.width - 1;
new_str = (char *)malloc(sizeof(char) * mods.width);
pad = (char *)malloc(sizeof(char) * padlen);
ft_memset(pad, ' ', padlen);
if (mods.flag != '\0')
{
if (mods.flag != '-')
return ("ERROR: '-' flag does not apply to 'c'");
new_str = ft_strjoin(tmp_str, pad);
}
else
new_str = ft_strjoin(pad, tmp_str);
}
else
new_str = tmp_str;
return (new_str);
}

static char *init_new_str(char *tmp_str, t_mods mods)
{
int padlen;
char *pad;

padlen = mods.width - ft_strlen(tmp_str);
pad = (char *)malloc(sizeof(char) * padlen);
ft_memset(pad, ' ', padlen);
if (mods.flag != '\0')
{
if (mods.flag != '-')
return ("ERROR: '-' flag does not apply to 's'");
return (ft_strjoin(tmp_str, pad));
}
else
return (ft_strjoin(pad, tmp_str));
}

char *fmt_s(t_mods mods, char *out_str)
{
char *tmp_str;
char *new_str;

if (mods.precision != -1)
{
tmp_str = (char *)malloc(sizeof(char) * mods.precision + 1);
ft_strncpy(tmp_str, out_str, mods.precision);
}
else
tmp_str = out_str;
if (mods.width != -1)
new_str = init_new_str(tmp_str, mods);
else
new_str = tmp_str;
return (new_str);
}
@@ -0,0 +1,105 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* fmt_i.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/06/05 12:59:10 by mvanwyk #+# #+# */
/* Updated: 2016/06/05 15:05:30 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "./ft_printf/includes/ft_printf.h"

static char *do_flags(char *out_str, t_mods mods)
{
if (mods.flag == '+')
out_str = ft_prependc(out_str, '+');
else if (mods.flag == ' ')
out_str = ft_prependc(out_str, ' ');
return (out_str);
}

static char *do_precision(char *new_str, char *pad, char *out_str, t_mods mods)
{
int cnt;
int slen;

slen = ft_strlen(out_str);
cnt = mods.precision - slen;
if (mods.width < 0)
ft_memset(pad, '0', (mods.precision - slen));
else
{
ft_memset(pad, ' ', (mods.width - slen) - (mods.precision - slen));
while (cnt > 0)
{
out_str = ft_prependc(out_str, '0');
cnt--;
}
}
if (mods.flag == '-')
new_str = ft_strjoin(out_str, pad);
else
new_str = ft_strjoin(pad, out_str);
new_str[ft_strlen(new_str)] = '\0';
new_str = do_flags(new_str, mods);
return (new_str);
}

static char *do_width(char *new_str, char *pad, char *out_str, t_mods mods)
{
int slen;

slen = ft_strlen(out_str);
if (mods.flag == '+' || mods.flag == ' ')
{
if (mods.flag == '0')
pad = ft_memset(pad, '0', (mods.width - slen - 1));
else
pad = ft_memset(pad, ' ', (mods.width - slen - 1));
if (mods.flag == '+')
out_str = ft_prependc(out_str, '+');
else
out_str = ft_prependc(out_str, ' ');
}
else
{
if (mods.flag == '0')
pad = ft_memset(pad, '0', (mods.width - slen));
else
pad = ft_memset(pad, ' ', (mods.width - slen));
}
if (mods.flag == '-')
return (new_str = ft_strjoin(out_str, pad));
else
return (new_str = ft_strjoin(pad, out_str));
}

char *fmt_i(t_mods mods, char *out_str)
{
char *new_str;
char *pad;
int slen;

slen = ft_strlen(out_str);
if (mods.width != -1)
{
new_str = (char *)malloc(sizeof(char) * mods.width + 1);
pad = (char *)malloc(sizeof(char) * (mods.width - slen));
if (mods.precision != -1 && mods.precision > slen)
new_str = do_precision(new_str, pad, out_str, mods);
else if (mods.precision == -1)
new_str = do_width(new_str, pad, out_str, mods);
}
else if (mods.precision > slen)
{
new_str = (char *)malloc(sizeof(char) * mods.precision);
pad = (char *)malloc(sizeof(char) * (mods.precision - slen));
new_str = do_precision(new_str, pad, out_str, mods);
}
else
new_str = do_flags(out_str, mods);
return (new_str);
}
@@ -0,0 +1,105 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* fmt_o.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/06/05 13:04:07 by mvanwyk #+# #+# */
/* Updated: 2016/06/05 13:57:30 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "./ft_printf/includes/ft_printf.h"

static char *do_precision(char *new_str, char *pad, char *out_str, t_mods mods)
{
int cnt;
int slen;

slen = ft_strlen(out_str);
cnt = mods.precision - slen;
if (mods.flag == ' ' || mods.flag == '+')
return ("ERROR: unsupported flag or 'o'");
if (mods.width < 0)
ft_memset(pad, '0', (mods.precision - slen));
else
{
ft_memset(pad, ' ', (mods.width - slen) - (mods.precision - slen));
while (cnt > 0)
{
out_str = ft_prependc(out_str, '0');
cnt--;
}
}
if (mods.flag == '-')
new_str = ft_strjoin(out_str, pad);
else
new_str = ft_strjoin(pad, out_str);
new_str[ft_strlen(new_str)] = '\0';
return (new_str);
}

static char *do_width(char *new_str, char *pad, char *out_str, t_mods mods)
{
int slen;

slen = ft_strlen(out_str);
if (mods.flag == ' ' || mods.flag == '+')
return ("ERROR: unsupported flag or 'o'");
if (mods.flag == '0')
pad = ft_memset(pad, '0', (mods.width - slen));
else
pad = ft_memset(pad, ' ', (mods.width - slen));
if (mods.flag == '#')
out_str = ft_appendc(out_str, '0');
if (mods.flag == '-')
new_str = ft_strjoin(out_str, pad);
else
new_str = ft_strjoin(pad, out_str);
return (new_str);
}

static char *do_flags(t_mods mods, char *out_str)
{
char *ret_str;

ret_str = (char *)malloc(sizeof(char) * (ft_strlen(out_str) + 1));
if (mods.flag == ' ' || mods.flag == '+')
return ("ERROR: unsupported flag or 'o'");
if (mods.flag == '#')
ret_str = ft_prependc(out_str, '0');
else
ret_str = out_str;
ret_str[ft_strlen(out_str) + 1] = '\0';
return (ret_str);
}

char *fmt_o(t_mods mods, char *out_str)
{
char *new_str;
char *pad;
int slen;

slen = ft_strlen(out_str);
if (mods.width != -1)
{
new_str = (char *)malloc(sizeof(char) * mods.width + 1);
pad = (char *)malloc(sizeof(char) * (mods.width - slen));
if (mods.precision != -1 && mods.precision > slen)
new_str = do_precision(new_str, pad, out_str, mods);
else if (mods.precision == -1)
new_str = do_width(new_str, pad, out_str, mods);
}
else if (mods.precision > slen)
{
new_str = (char *)malloc(sizeof(char) * mods.precision);
pad = (char *)malloc(sizeof(char) * (mods.precision - slen));
new_str = do_precision(new_str, pad, out_str, mods);
}
else
{
new_str = do_flags(mods, out_str);
}
return (new_str);
}
@@ -0,0 +1,84 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* fmt_u.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/06/05 13:01:05 by mvanwyk #+# #+# */
/* Updated: 2016/06/05 13:02:15 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "./ft_printf/includes/ft_printf.h"

static char *do_precision(char *new_str, char *pad, char *out_str, t_mods mods)
{
int cnt;
int slen;

slen = ft_strlen(out_str);
cnt = mods.precision - slen;
if (mods.width < 0)
ft_memset(pad, '0', (mods.precision - slen));
else
{
ft_memset(pad, ' ', (mods.width - slen) - (mods.precision - slen));
while (cnt > 0)
{
out_str = ft_prependc(out_str, '0');
cnt--;
}
}
if (mods.flag == '-')
new_str = ft_strjoin(out_str, pad);
else
new_str = ft_strjoin(pad, out_str);
new_str[ft_strlen(new_str)] = '\0';
return (new_str);
}

static char *do_width(char *new_str, char *pad, char *out_str, t_mods mods)
{
int slen;

slen = ft_strlen(out_str);
if (mods.flag == '0')
pad = ft_memset(pad, '0', (mods.width - slen));
else
pad = ft_memset(pad, ' ', (mods.width - slen));
if (mods.flag == '-')
new_str = ft_strjoin(out_str, pad);
else
new_str = ft_strjoin(pad, out_str);
return (new_str);
}

char *fmt_u(t_mods mods, char *out_str)
{
char *new_str;
char *pad;
int slen;

if (mods.flag != '\0' && (mods.flag != '-' && mods.flag != '0'))
return ("ERROR: 'u' specifier only takes the '-' & '0' flags");
slen = ft_strlen(out_str);
if (mods.width != -1)
{
new_str = (char *)malloc(sizeof(char) * mods.width + 1);
pad = (char *)malloc(sizeof(char) * (mods.width - slen));
if (mods.precision != -1 && mods.precision > slen)
new_str = do_precision(new_str, pad, out_str, mods);
else if (mods.precision == -1)
new_str = do_width(new_str, pad, out_str, mods);
}
else if (mods.precision > slen)
{
new_str = (char *)malloc(sizeof(char) * mods.precision);
pad = (char *)malloc(sizeof(char) * (mods.precision - slen));
new_str = do_precision(new_str, pad, out_str, mods);
}
else
new_str = out_str;
return (new_str);
}
@@ -0,0 +1,117 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* fmt_x.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/06/05 13:16:09 by mvanwyk #+# #+# */
/* Updated: 2016/06/05 15:59:22 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "./ft_printf/includes/ft_printf.h"

static char *do_precision(char *new_str, char *pad, char *out_str, t_mods mods)
{
int cnt;
int slen;

slen = ft_strlen(out_str);
cnt = mods.precision - slen;
if (mods.flag == ' ' || mods.flag == '+')
return ("ERROR: unsupported flag for 'x'");
if (mods.width < 0)
ft_memset(pad, '0', (mods.precision - slen));
else
{
ft_memset(pad, ' ', (mods.width - slen) - (mods.precision - slen));
while (cnt > 0)
{
out_str = ft_prependc(out_str, '0');
cnt--;
}
}
if (mods.flag == '-')
new_str = ft_strjoin(out_str, pad);
else
new_str = ft_strjoin(pad, out_str);
new_str[ft_strlen(new_str)] = '\0';
return (new_str);
}

static char *do_width(char *new_str, char *pad, char *out_str, t_mods mods)
{
int slen;

slen = ft_strlen(out_str);
if (mods.flag == ' ' || mods.flag == '+')
return ("ERROR: unsupported flag for 'x'");
if (mods.flag == '0')
pad = ft_memset(pad, '0', (mods.width - slen));
else
pad = ft_memset(pad, ' ', (mods.width - slen));
if (mods.flag == '#')
{
if (mods.fmtl[ft_strlen(mods.fmtl - 1)] == 'X')
out_str = ft_prependc(out_str, 'X');
else
out_str = ft_prependc(out_str, 'x');
out_str = ft_prependc(out_str, '0');
}
if (mods.flag == '-')
new_str = ft_strjoin(out_str, pad);
else
new_str = ft_strjoin(pad, out_str);
return (new_str);
}

static char *do_flags(t_mods mods, char *out_str)
{
char *ret_str;

ret_str = (char *)malloc(sizeof(char) * (ft_strlen(out_str) + 1));
if (mods.flag == ' ' || mods.flag == '+')
return ("ERROR: unsupported flag for 'x'");
if (mods.flag == '#')
{
if (mods.fmtl[ft_strlen(mods.fmtl - 1)] == 'X')
ret_str = ft_prependc(out_str, 'X');
else
ret_str = ft_prependc(out_str, 'x');
ret_str = ft_prependc(ret_str, '0');
}
else
ret_str = out_str;
ret_str[ft_strlen(out_str) + 2] = '\0';
return (ret_str);
}

char *fmt_x(t_mods mods, char *out_str)
{
char *new_str;
char *pad;
int slen;

slen = ft_strlen(out_str);
if (mods.width != -1)
{
new_str = (char *)malloc(sizeof(char) * mods.width + 1);
pad = (char *)malloc(sizeof(char) * (mods.width - slen));
if (mods.precision != -1 && mods.precision > slen)
new_str = do_precision(new_str, pad, out_str, mods);
else if (mods.precision == -1)
new_str = do_width(new_str, pad, out_str, mods);
}
else if (mods.precision > slen)
{
new_str = (char *)malloc(sizeof(char) * mods.precision);
pad = (char *)malloc(sizeof(char) * (mods.precision - slen));
new_str = do_precision(new_str, pad, out_str, mods);
}
else
new_str = out_str;
if (mods.flag == '#')
new_str = do_flags(mods, new_str);
return (new_str);
}
@@ -0,0 +1,108 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_printf.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/05/24 11:57:58 by mvanwyk #+# #+# */
/* Updated: 2016/06/05 18:17:46 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "./ft_printf/includes/ft_printf.h"

static char *fstr_build(char *format)
{
char *fstr;
int cnt;

fstr = (char *)malloc(sizeof(char) * 10);
cnt = 0;
while (istype(format[cnt]) == 0)
{
fstr[cnt] = format[cnt];
cnt++;
}
fstr[cnt] = format[cnt];
fstr[cnt + 1] = '\0';
return (fstr);
}

static char *get_fmtl(char *fstr)
{
int len;
int fmtlsz;
int cnt;
char *fmtl;

len = ft_strlen(fstr) - 1;
fmtlsz = 0;
cnt = 0;
while (isprecision(fstr[len]) == 0 && iswidth(fstr) == 0 &&
isflag(fstr[len]) == 0 && len-- > 0)
fmtlsz++;
len = ft_strlen(fstr) - 1;
fmtl = (char *)malloc(sizeof(char) * fmtlsz + 1);
if (istype(fstr[len]) == 1)
{
if (islength(fstr[len - 1]) == 1)
{
if (islength(fstr[len - 2]) == 1)
fmtl[cnt++] = fstr[len - 2];
fmtl[cnt++] = fstr[len - 1];
}
fmtl[cnt++] = fstr[len];
fmtl[cnt] = '\0';
}
return (fmtl);
}

static char *arg_build(va_list vlst, char *fstr, int *pcnt)
{
char *out;
t_mods mods;

mods.width = -1;
mods.precision = -1;
mods.flag = '\0';
if (haswidth(fstr) == 1)
mods.width = get_width(vlst, fstr);
if (hasprecision(fstr) == 1)
mods.precision = get_precision(vlst, fstr);
if (hasflag(fstr) == 1)
mods.flag = fstr[0];
mods.fmtl = get_fmtl(fstr);
out = handle_type_1(vlst, mods);
*pcnt += ft_strlen(out);
return (out);
}

int ft_printf(char *format, ...)
{
va_list vlst;
int cnt;

va_start(vlst, format);
cnt = 0;
while (*format != '\0')
{
if (*format == '%')
{
format++;
if (*format == '%')
ft_putchar('%');
else
{
ft_putstr(arg_build(vlst, fstr_build(format), &cnt));
format += ft_strlen(fstr_build(format)) - 1;
}
}
else
ft_putchar(*format);
format++;
cnt++;
}
va_end(vlst);
return (cnt);
}
@@ -0,0 +1,32 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* handle_c.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/06/02 15:51:33 by mvanwyk #+# #+# */
/* Updated: 2016/06/05 16:51:42 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "./ft_printf/includes/ft_printf.h"

char *handle_c(va_list vlst, t_mods mods)
{
int fmtl_len;
char out_char;
wchar_t wc;

if (mods.precision != -1)
return ("ERROR: 'c' cannot make use of precision\n");
fmtl_len = ft_strlen(mods.fmtl);
if (fmtl_len > 1 || mods.fmtl[fmtl_len] == 'C')
{
wc = va_arg(vlst, wchar_t);
out_char = (char)wc;
}
else
out_char = (char)va_arg(vlst, int);
return (fmt_c(mods, out_char));
}
@@ -0,0 +1,29 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* handle_cap_c.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/06/05 13:10:30 by mvanwyk #+# #+# */
/* Updated: 2016/06/05 13:10:51 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "./ft_printf/includes/ft_printf.h"

char *handle_cap_c(va_list vlst, t_mods mods)
{
int fmtl_len;
char out_char;
wchar_t wc;

if (mods.precision != -1)
return ("ERROR: 'C' cannot make use of precision\n");
fmtl_len = ft_strlen(mods.fmtl);
if (fmtl_len > 1)
return ("ERROR: 'C' does not take ant length modifier\n");
wc = va_arg(vlst, wchar_t);
out_char = (char)wc;
return (fmt_c(mods, out_char));
}
@@ -0,0 +1,36 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* handle_cap_s.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/05/31 15:49:42 by mvanwyk #+# #+# */
/* Updated: 2016/06/05 13:13:07 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "./ft_printf/includes/ft_printf.h"

char *handle_cap_s(va_list vlst, t_mods mods)
{
int fmtl_len;
int cnt;
char *out_str;
wchar_t *wcs;

fmtl_len = ft_strlen(mods.fmtl);
cnt = 0;
if (fmtl_len > 1)
return ("ERROR: 'S' does not take any length modifier\n");
wcs = va_arg(vlst, wchar_t *);
out_str = (char *)malloc(sizeof(char) * ft_wcslen(wcs));
while (*wcs != '\0')
{
out_str[cnt] = (char)*wcs;
cnt++;
wcs++;
}
out_str[cnt] = '\0';
return (fmt_s(mods, out_str));
}
@@ -0,0 +1,110 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* handle_i.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/06/05 13:49:44 by mvanwyk #+# #+# */
/* Updated: 2016/06/05 13:49:46 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "./ft_printf/includes/ft_printf.h"

static char *get_value_3(va_list vlst, t_mods mods, int fmtl_len)
{
signed char schar;
long long int llint;

schar = '\0';
llint = 0;
if (mods.fmtl[fmtl_len - 2] == 'h' &&
mods.fmtl[fmtl_len - 3] == 'h')
{
schar = va_arg(vlst, int);
return (ft_itoa(schar));
}
else if (mods.fmtl[fmtl_len - 2] == 'l' &&
mods.fmtl[fmtl_len - 3] == 'l')
{
llint = va_arg(vlst, long long int);
return (ft_itoa(llint));
}
else
return ("??ERRor?!?");
return ("Crackers");
}

static char *get_value_2(va_list vlst, t_mods mods, int fmtl_len)
{
short int shint;
size_t szt;

shint = 0;
szt = 0;
if (mods.fmtl[fmtl_len - 2] == 'h')
{
shint = va_arg(vlst, int);
return (ft_itoa(shint));
}
else if (mods.fmtl[fmtl_len - 2] == 'z')
{
szt = va_arg(vlst, size_t);
return (ft_itoa(szt));
}
else
return (get_value_3(vlst, mods, fmtl_len));
return ("Crackers");
}

static char *get_value(va_list vlst, t_mods mods, int fmtl_len)
{
long int lint;
int i;

lint = 0;
i = 0;
if (fmtl_len > 3)
return ("ERROR: too many length modifiers");
if (mods.fmtl[fmtl_len - 1] == 'D' || mods.fmtl[fmtl_len - 2] == 'l')
{
lint = va_arg(vlst, long int);
return (ft_itoa(lint));
}
else if (mods.fmtl[fmtl_len - 2] == 'j')
{
i = va_arg(vlst, int);
return (ft_itoa(i));
}
else
return (get_value_2(vlst, mods, fmtl_len));
return ("Crackers");
}

char *handle_i(va_list vlst, t_mods mods)
{
int fmtl_len;
int i;
char *out_str;

fmtl_len = ft_strlen(mods.fmtl);
i = 0;
out_str = NULL;
if (fmtl_len > 1 || mods.fmtl[fmtl_len - 1] == 'D')
{
if (mods.fmtl[fmtl_len - 1] == 'D' && fmtl_len > 1)
return ("ERROR: 'D' takes no length modifier");
if (check_length(mods) == 0)
return ("ERROR: unsupported length modifier for 'i'");
out_str = get_value(vlst, mods, fmtl_len);
}
else
{
i = va_arg(vlst, int);
out_str = (char *)malloc(sizeof(char) * (ft_strlen(ft_itoa(i)) + 1));
out_str = ft_itoa(i);
out_str[ft_strlen(out_str)] = '\0';
}
return (fmt_i(mods, out_str));
}
@@ -0,0 +1,109 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* handle_o.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/06/05 13:22:41 by mvanwyk #+# #+# */
/* Updated: 2016/06/05 13:50:03 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "./ft_printf/includes/ft_printf.h"

static char *get_value_3(va_list vlst, t_mods mods, int fmtl_len)
{
unsigned char uschar;
unsigned long long int ullint;

uschar = '\0';
ullint = 0;
if (mods.fmtl[fmtl_len - 2] == 'h' &&
mods.fmtl[fmtl_len - 3] == 'h')
{
uschar = va_arg(vlst, int);
return (ft_itobase(uschar, 8));
}
else if (mods.fmtl[fmtl_len - 2] == 'l' &&
mods.fmtl[fmtl_len - 3] == 'l')
{
ullint = va_arg(vlst, unsigned long long int);
return (ft_itobase(ullint, 8));
}
return ("Crckrs003");
}

static char *get_value_2(va_list vlst, t_mods mods, int fmtl_len)
{
unsigned short int ushint;
size_t szt;

ushint = 0;
szt = 0;
if (mods.fmtl[fmtl_len - 2] == 'h')
{
ushint = va_arg(vlst, int);
return (ft_itobase(ushint, 8));
}
else if (mods.fmtl[fmtl_len - 2] == 'z')
{
szt = va_arg(vlst, size_t);
return (ft_itobase(szt, 8));
}
else
return (get_value_3(vlst, mods, fmtl_len));
return ("Crckrs002");
}

static char *get_value(va_list vlst, t_mods mods, int fmtl_len)
{
unsigned long int ulint;
unsigned int uint;

ulint = 0;
uint = 0;
if (fmtl_len > 3)
return ("ERROR: too many length modifiers");
if (mods.fmtl[fmtl_len - 1] == 'O' || mods.fmtl[fmtl_len - 2] == 'l')
{
ulint = va_arg(vlst, unsigned long int);
return (ft_itobase(ulint, 8));
}
else if (mods.fmtl[fmtl_len - 2] == 'j')
{
uint = va_arg(vlst, unsigned int);
return (ft_itobase(uint, 8));
}
else
return (get_value_2(vlst, mods, fmtl_len));
return ("Crckrs001");
}

char *handle_o(va_list vlst, t_mods mods)
{
int fmtl_len;
int i;
char *octal;
char *out_str;

fmtl_len = ft_strlen(mods.fmtl);
i = 0;
if (fmtl_len > 1 || mods.fmtl[fmtl_len - 1] == 'O')
{
if (mods.fmtl[fmtl_len - 1] == 'O' && fmtl_len > 1)
return ("ERROR: 'O' takes no length modifier");
if (check_length(mods) == 0)
return ("ERROR: unsupported length modifier for 'o'");
out_str = get_value(vlst, mods, fmtl_len);
}
else
{
i = va_arg(vlst, int);
octal = ft_itobase(i, 8);
out_str = (char *)malloc(sizeof(char) * (ft_strlen(octal) + 1));
ft_strcpy(out_str, octal);
out_str[ft_strlen(out_str) + 1] = '\0';
}
return (fmt_o(mods, out_str));
}
@@ -0,0 +1,29 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* handle_p.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/06/05 13:17:24 by mvanwyk #+# #+# */
/* Updated: 2016/06/06 12:37:24 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "./ft_printf/includes/ft_printf.h"

char *handle_p(va_list vlst, t_mods mods)
{
unsigned long ptr;
char *out_str;

out_str = NULL;
if (ft_strlen(mods.fmtl) > 1)
return ("ERROR: 'p' takes no length modifier\n");
ptr = va_arg(vlst, unsigned long);
out_str = ft_itobase(ptr, 16);
out_str = ft_prependc(out_str, 'x');
out_str = ft_prependc(out_str, '0');
out_str = ft_strlower(out_str);
return (fmt_p(mods, out_str));
}
@@ -0,0 +1,41 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* handle_s.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/05/31 15:49:29 by mvanwyk #+# #+# */
/* Updated: 2016/06/02 16:53:22 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "./ft_printf/includes/ft_printf.h"

char *handle_s(va_list vlst, t_mods mods)
{
int fmtl_len;
int cnt;
char *out_str;
wchar_t *wcs;

fmtl_len = ft_strlen(mods.fmtl);
cnt = 0;
if (fmtl_len > 1)
{
if (mods.fmtl[fmtl_len - 2] != 'l' || fmtl_len > 2)
return ("ERROR: 's' can only make use of the 'l' modifier");
wcs = va_arg(vlst, wchar_t *);
out_str = (char *)malloc(sizeof(char) * ft_wcslen(wcs));
while (*wcs != '\0')
{
out_str[cnt] = (char)*wcs;
wcs++;
cnt++;
}
out_str[cnt] = '\0';
}
else
out_str = va_arg(vlst, char *);
return (fmt_s(mods, out_str));
}
@@ -0,0 +1,107 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* handle_u.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/06/05 13:25:24 by mvanwyk #+# #+# */
/* Updated: 2016/06/05 13:25:28 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "./ft_printf/includes/ft_printf.h"

static char *get_value_3(va_list vlst, t_mods mods, int fmtl_len)
{
unsigned char uschar;
unsigned long long int ullint;

uschar = '\0';
ullint = 0;
if (mods.fmtl[fmtl_len - 2] == 'h' &&
mods.fmtl[fmtl_len - 3] == 'h')
{
uschar = va_arg(vlst, int);
return (ft_itoa(uschar));
}
else if (mods.fmtl[fmtl_len - 2] == 'l' &&
mods.fmtl[fmtl_len - 3] == 'l')
{
ullint = va_arg(vlst, unsigned long long int);
return (ft_itoa(ullint));
}
return ("Crckrs003");
}

static char *get_value_2(va_list vlst, t_mods mods, int fmtl_len)
{
unsigned short int ushint;
size_t szt;

ushint = 0;
szt = 0;
if (mods.fmtl[fmtl_len - 2] == 'h')
{
ushint = va_arg(vlst, int);
return (ft_itoa(ushint));
}
else if (mods.fmtl[fmtl_len - 2] == 'z')
{
szt = va_arg(vlst, size_t);
return (ft_itoa(szt));
}
else
return (get_value_3(vlst, mods, fmtl_len));
return ("Crckrs002");
}

static char *get_value(va_list vlst, t_mods mods, int fmtl_len)
{
unsigned long int ulint;
unsigned int uint;

ulint = 0;
uint = 0;
if (fmtl_len > 3)
return ("ERROR: too many length modifiers");
if (mods.fmtl[fmtl_len - 1] == 'U' || mods.fmtl[fmtl_len - 2] == 'l')
{
ulint = va_arg(vlst, unsigned long int);
return (ft_itoa(ulint));
}
else if (mods.fmtl[fmtl_len - 2] == 'j')
{
uint = va_arg(vlst, unsigned int);
return (ft_itoa(uint));
}
else
return (get_value_2(vlst, mods, fmtl_len));
return ("Crckrs001");
}

char *handle_u(va_list vlst, t_mods mods)
{
int fmtl_len;
int ui;
char *out_str;

fmtl_len = ft_strlen(mods.fmtl);
ui = 0;
if (fmtl_len > 1 || mods.fmtl[fmtl_len - 1] == 'U')
{
if (mods.fmtl[fmtl_len - 1] == 'U' && fmtl_len > 1)
return ("ERROR: 'U' takes no length modifier");
if (check_length(mods) == 0)
return ("ERROR: unsupported length modifier for 'i'");
out_str = get_value(vlst, mods, fmtl_len);
}
else
{
ui = va_arg(vlst, unsigned int);
out_str = (char *)malloc(sizeof(char) * (ft_strlen(ft_itoa(ui)) + 1));
out_str = ft_itoa(ui);
out_str[ft_strlen(out_str)] = '\0';
}
return (fmt_u(mods, out_str));
}
@@ -0,0 +1,106 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* handle_x.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/06/05 13:27:22 by mvanwyk #+# #+# */
/* Updated: 2016/06/05 15:57:30 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "./ft_printf/includes/ft_printf.h"

static char *get_value_3(va_list vlst, t_mods mods, int fmtl_len)
{
unsigned char uschar;
unsigned long long int ullint;

uschar = '\0';
ullint = 0;
if (mods.fmtl[fmtl_len - 2] == 'h' &&
mods.fmtl[fmtl_len - 3] == 'h')
{
uschar = va_arg(vlst, int);
return (ft_itobase(uschar, 16));
}
else if (mods.fmtl[fmtl_len - 2] == 'l' &&
mods.fmtl[fmtl_len - 3] == 'l')
{
ullint = va_arg(vlst, unsigned long long int);
return (ft_itobase(ullint, 16));
}
return ("Crckrs003");
}

static char *get_value_2(va_list vlst, t_mods mods, int fmtl_len)
{
unsigned short int ushint;
size_t szt;

ushint = 0;
szt = 0;
if (mods.fmtl[fmtl_len - 2] == 'h')
{
ushint = va_arg(vlst, int);
return (ft_itobase(ushint, 16));
}
else if (mods.fmtl[fmtl_len - 2] == 'z')
{
szt = va_arg(vlst, size_t);
return (ft_itobase(szt, 16));
}
else
return (get_value_3(vlst, mods, fmtl_len));
return ("Crckrs002");
}

static char *get_value(va_list vlst, t_mods mods, int fmtl_len)
{
unsigned long int ulint;
unsigned int uint;

ulint = 0;
uint = 0;
if (fmtl_len > 3)
return ("ERROR: too many length modifiers");
if (mods.fmtl[fmtl_len - 2] == 'l')
{
ulint = va_arg(vlst, unsigned long int);
return (ft_itobase(ulint, 16));
}
else if (mods.fmtl[fmtl_len - 2] == 'j')
{
uint = va_arg(vlst, unsigned int);
return (ft_itobase(uint, 16));
}
else
return (get_value_2(vlst, mods, fmtl_len));
return ("Crckrs001");
}

char *handle_x(va_list vlst, t_mods mods)
{
int fmtl_len;
int i;
char *out_str;

fmtl_len = ft_strlen(mods.fmtl);
i = 0;
if (fmtl_len > 1)
{
if (check_length(mods) == 0)
return ("ERROR: unsupported length modifier for 'o'");
out_str = get_value(vlst, mods, fmtl_len);
}
else
{
i = va_arg(vlst, int);
out_str = ft_itobase(i, 16);
out_str[ft_strlen(out_str) + 1] = '\0';
}
if (mods.fmtl[fmtl_len - 1] == 'x')
out_str = ft_strlower(out_str);
return (fmt_x(mods, out_str));
}
@@ -0,0 +1,53 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* has_checks.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/06/02 13:28:24 by mvanwyk #+# #+# */
/* Updated: 2016/06/05 13:23:12 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "./ft_printf/includes/ft_printf.h"

int haslength(char *fstr)
{
int len;

len = ft_strlen(fstr) - 1;
if (fstr[len - 1] == 'h' || fstr[len - 1] == 'l' ||
fstr[len - 1] == 'j' || fstr[len - 1] == 'z')
return (1);
return (0);
}

int hasprecision(char *fstr)
{
if (ft_strchr(fstr, '.') == NULL)
return (0);
return (1);
}

int haswidth(char *fstr)
{
while (isprecision(*fstr) == 0 && islength(*fstr) == 0 &&
istype(*fstr) == 0 && *fstr != '\0')
{
if (*fstr == '*' || ft_isdigit(*fstr))
return (1);
fstr++;
}
return (0);
}

int hasflag(char *fstr)
{
if (fstr[0] == '-' || fstr[0] == '+' || fstr[0] == ' ' ||
fstr[0] == '#' || fstr[0] == '0')
{
return (1);
}
return (0);
}
@@ -0,0 +1,58 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_printf.h :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/06/02 12:45:17 by mvanwyk #+# #+# */
/* Updated: 2016/08/09 14:24:08 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#ifndef FT_PRINTF_H
# define FT_PRINTF_H

# include <stdarg.h>
# include "../../libft.h"

typedef struct s_mods
{
int width;
int precision;
char flag;
char *fmtl;
} t_mods;

int check_length(t_mods mods);
int ft_printf(char *format, ...);
int get_width(va_list vlst, char *fstr);
int get_precision(va_list vlst, char *fstr);
int haslength(char *fstr);
int hasprecision(char *fstr);
int haswidth(char *fstr);
int hasflag(char *fstr);
int istype(int c);
int islength(int c);
int isprecision(int c);
int iswidth(char *fstr);
int isflag(int c);
char *fmt_c(t_mods mods, char out_char);
char *fmt_i(t_mods mods, char *out_str);
char *fmt_o(t_mods mods, char *out_str);
char *fmt_p(t_mods mods, char *out_str);
char *fmt_s(t_mods mods, char *out_str);
char *fmt_u(t_mods mods, char *out_str);
char *fmt_x(t_mods mods, char *out_str);
char *handle_cap_c(va_list vlst, t_mods mods);
char *handle_c(va_list vlst, t_mods mods);
char *handle_cap_s(va_list vlst, t_mods mods);
char *handle_i(va_list vlst, t_mods mods);
char *handle_o(va_list vlst, t_mods mods);
char *handle_p(va_list vlst, t_mods mods);
char *handle_s(va_list vlst, t_mods mods);
char *handle_u(va_list vlst, t_mods mods);
char *handle_x(va_list vlst, t_mods mods);
char *handle_type_1(va_list vlst, t_mods mods);

#endif
@@ -0,0 +1,67 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* is_checks.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/06/02 13:28:40 by mvanwyk #+# #+# */
/* Updated: 2016/06/05 13:23:37 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "./ft_printf/includes/ft_printf.h"

int istype(int c)
{
if (c == 's' || c == 'S' || c == 'p' || c == 'd' ||
c == 'D' || c == 'i' || c == 'o' || c == 'O' ||
c == 'u' || c == 'U' || c == 'x' || c == 'X' ||
c == 'c' || c == 'C')
return (1);
return (0);
}

int islength(int c)
{
if (c == 'h' || c == 'l' || c == 'j' || c == 'z')
return (1);
return (0);
}

int isprecision(int c)
{
if (c == '.')
return (1);
return (0);
}

int iswidth(char *fstr)
{
int cnt;

cnt = 0;
while (isprecision(fstr[cnt]) == 0 && islength(fstr[cnt]) == 0 &&
istype(fstr[cnt]) == 0 && fstr[cnt] != '\0')
{
if (fstr[cnt] == '*' || ft_isdigit(fstr[cnt]) == 1)
{
if (ft_strchr(fstr, '.') == NULL)
return (1);
else if (ft_indexof(fstr, '.') > cnt)
return (1);
else
return (0);
}
cnt++;
}
return (0);
}

int isflag(int c)
{
if (c == '-' || c == '+' || c == ' ' ||
c == '#' || c == '0')
return (1);
return (0);
}
@@ -0,0 +1,59 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* mod_ops.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/06/02 13:30:24 by mvanwyk #+# #+# */
/* Updated: 2016/06/05 13:50:51 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "./ft_printf/includes/ft_printf.h"

int get_width(va_list vlst, char *fstr)
{
char width[5];
int cnt;

cnt = 0;
while (isprecision(*fstr) == 0 && islength(*fstr) == 0 &&
istype(*fstr) == 0)
{
if (ft_isdigit(*fstr))
{
width[cnt] = *fstr;
cnt++;
}
else if (*fstr == '*')
return (va_arg(vlst, int));
fstr++;
}
width[cnt] = '\0';
return (ft_atoi(width));
}

int get_precision(va_list vlst, char *fstr)
{
int cnt;
char prec[10];
char *prec_str;

cnt = 0;
prec_str = ft_strchr(fstr, '.');
while (islength(*prec_str) == 0 && istype(*prec_str) == 0 &&
prec_str[cnt] != '\0')
{
if (ft_isdigit(*prec_str))
{
prec[cnt] = *prec_str;
cnt++;
}
else if (*prec_str == '*')
return (va_arg(vlst, int));
prec_str++;
}
prec[cnt] = '\0';
return (ft_atoi(prec));
}
@@ -0,0 +1,52 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* type_handling.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/05/31 16:57:09 by mvanwyk #+# #+# */
/* Updated: 2016/06/06 12:38:45 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "./ft_printf/includes/ft_printf.h"

static char *handle_type_2(va_list vlst, t_mods mods, char *out_str)
{
int len;

len = ft_strlen(mods.fmtl) - 1;
if (mods.fmtl[len] == 'u' || mods.fmtl[len] == 'U')
out_str = handle_u(vlst, mods);
else if (mods.fmtl[len] == 'o' || mods.fmtl[len] == 'O')
out_str = handle_o(vlst, mods);
else if (mods.fmtl[len] == 'x' || mods.fmtl[len] == 'X')
out_str = handle_x(vlst, mods);
return (out_str);
}

char *handle_type_1(va_list vlst, t_mods mods)
{
int len;
char *out_str;

out_str = NULL;
len = ft_strlen(mods.fmtl) - 1;
if (mods.fmtl[len] == 's')
out_str = handle_s(vlst, mods);
else if (mods.fmtl[len] == 'S')
out_str = handle_cap_s(vlst, mods);
else if (mods.fmtl[len] == 'p')
out_str = handle_p(vlst, mods);
else if (mods.fmtl[len] == 'c')
out_str = handle_c(vlst, mods);
else if (mods.fmtl[len] == 'C')
out_str = handle_cap_c(vlst, mods);
else if (mods.fmtl[len] == 'i' || mods.fmtl[len] == 'd' ||
mods.fmtl[len] == 'D')
out_str = handle_i(vlst, mods);
else
out_str = handle_type_2(vlst, mods, out_str);
return (out_str);
}
@@ -0,0 +1,18 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_putchar.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/05/15 15:15:17 by mvanwyk #+# #+# */
/* Updated: 2016/05/15 15:15:19 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "libft.h"

void ft_putchar(char c)
{
write(1, &c, 1);
}
@@ -0,0 +1,18 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_putchar_fd.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/05/15 15:18:53 by mvanwyk #+# #+# */
/* Updated: 2016/05/15 15:18:58 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "libft.h"

void ft_putchar_fd(char c, int fd)
{
write(fd, &c, 1);
}
@@ -0,0 +1,20 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_putendl.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/05/15 15:09:22 by mvanwyk #+# #+# */
/* Updated: 2016/05/15 15:09:39 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "libft.h"

void ft_putendl(char const *s)
{
while (*s)
ft_putchar(*s++);
ft_putchar('\n');
}
@@ -0,0 +1,20 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_putendl_fd.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/05/15 15:08:05 by mvanwyk #+# #+# */
/* Updated: 2016/05/15 15:08:08 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "libft.h"

void ft_putendl_fd(char const *s, int fd)
{
while (*s)
ft_putchar_fd(*s++, fd);
ft_putchar_fd('\n', fd);
}
@@ -0,0 +1,32 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_putnbr.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/05/15 15:01:29 by mvanwyk #+# #+# */
/* Updated: 2016/05/15 15:07:37 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "libft.h"

void ft_putnbr(int n)
{
if (n > 9)
{
ft_putnbr(n / 10);
ft_putnbr(n % 10);
}
else if (n < 0)
{
ft_putchar('-');
n = -n;
ft_putnbr(n);
}
else
{
ft_putchar('0' + n);
}
}
@@ -0,0 +1,19 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_putnbr_endl.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/08/09 14:24:37 by mvanwyk #+# #+# */
/* Updated: 2016/08/09 14:24:41 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "libft.h"

void ft_putnbr_endl(int n)
{
ft_putnbr(n);
ft_putchar('\n');
}
@@ -0,0 +1,32 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_putnbr_fd.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/05/15 15:19:09 by mvanwyk #+# #+# */
/* Updated: 2016/05/15 15:19:12 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "libft.h"

void ft_putnbr_fd(int n, int fd)
{
if (n > 9)
{
ft_putnbr_fd(n / 10, fd);
ft_putnbr_fd(n % 10, fd);
}
else if (n < 0)
{
ft_putchar_fd('-', fd);
n = -n;
ft_putnbr_fd(n, fd);
}
else
{
ft_putchar_fd('0' + n, fd);
}
}
@@ -0,0 +1,19 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_putstr.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/05/15 15:05:36 by mvanwyk #+# #+# */
/* Updated: 2016/05/15 15:05:52 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "libft.h"

void ft_putstr(char const *s)
{
while (*s)
ft_putchar(*s++);
}
@@ -0,0 +1,19 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_putstr_fd.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/05/15 15:06:50 by mvanwyk #+# #+# */
/* Updated: 2016/05/15 15:06:54 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "libft.h"

void ft_putstr_fd(char const *s, int fd)
{
while (*s)
ft_putchar_fd(*s++, fd);
}
@@ -0,0 +1,21 @@
int ft_rgbtoi(int red, int green, int blue)
{
int r;
int g;
int b;
int rgbint;

r = 0;
g = 0;
b = 0;
if (red <= 255 && red >= 0)
r = red;
if (green <= 255 && green >= 0)
g = green;
if (blue <= 255 && blue >= 0)
b = blue;
rgbint = r;
rgbint = (rgbint << 8) + g;
rgbint = (rgbint << 8) + b;
return (rgbint);
}
@@ -0,0 +1,29 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_splitcnt.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/08/09 14:25:09 by mvanwyk #+# #+# */
/* Updated: 2016/08/09 14:25:10 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "libft.h"

int ft_splitcnt(char *str, char c)
{
int cnt;
int wcnt;

cnt = 0;
wcnt = 0;
while (str[cnt] != '\0')
{
if (str[cnt] != c && (str[cnt + 1] == c || str[cnt + 1] == '\0'))
wcnt++;
cnt++;
}
return (wcnt);
}
@@ -0,0 +1,29 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_startswith.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/06/14 14:14:27 by mvanwyk #+# #+# */
/* Updated: 2016/06/14 14:27:28 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "libft.h"

int ft_startswith(char *str, char *start)
{
int startlen;
int cnt;

startlen = ft_strlen(start);
cnt = 0;
while (cnt < startlen)
{
if (str[cnt] != start[cnt])
return (0);
cnt++;
}
return (1);
}
@@ -0,0 +1,29 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_strcat.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/05/09 10:23:44 by mvanwyk #+# #+# */
/* Updated: 2016/05/09 10:23:46 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "libft.h"

char *ft_strcat(char *dest, char *src)
{
int cnt;
int len;

cnt = 0;
len = ft_strlen(dest);
while (src[cnt])
{
dest[cnt + len] = src[cnt];
cnt++;
}
dest[cnt + len] = '\0';
return (dest);
}
@@ -0,0 +1,22 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_strchr.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/05/10 17:34:19 by mvanwyk #+# #+# */
/* Updated: 2016/05/10 17:35:04 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

char *ft_strchr(char *s, int c)
{
while (*s)
{
if (*s == c)
return (s);
s++;
}
return (0);
}
@@ -0,0 +1,25 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_strclr.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/05/15 15:08:17 by mvanwyk #+# #+# */
/* Updated: 2016/05/15 15:08:19 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "libft.h"

void ft_strclr(char *s)
{
int cnt;

cnt = 0;
while (s[cnt] != '\0')
{
s[cnt] = '\0';
cnt++;
}
}
@@ -0,0 +1,23 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_strcmp.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/05/09 10:22:47 by mvanwyk #+# #+# */
/* Updated: 2016/08/09 14:18:46 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

int ft_strcmp(char *s1, char *s2)
{
while (*s1 == *s2)
{
if (*s1 == 0)
return (0);
s1++;
s2++;
}
return (*(unsigned char *)s1 - *(unsigned char *)s2);
}
@@ -0,0 +1,30 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_strcmp_low.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/08/09 14:17:28 by mvanwyk #+# #+# */
/* Updated: 2016/08/09 14:17:31 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "libft.h"

int ft_strcmp_low(char *s1, char *s2)
{
char *s1low;
char *s2low;

s1low = ft_strlower(s1);
s2low = ft_strlower(s2);
while (*s1low == *s2low)
{
if (*s1low == 0)
return (0);
s1low++;
s2low++;
}
return (*(unsigned char *)s1low - *(unsigned char *)s2low);
}
@@ -0,0 +1,25 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_strcpy.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/05/09 10:21:24 by mvanwyk #+# #+# */
/* Updated: 2016/05/09 10:21:29 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

char *ft_strcpy(char *dest, char *source)
{
int cnt;

cnt = 0;
while (source[cnt])
{
dest[cnt] = source[cnt];
cnt++;
}
dest[cnt] = '\0';
return (dest);
}
@@ -0,0 +1,22 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_strdel.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/05/15 15:13:39 by mvanwyk #+# #+# */
/* Updated: 2016/05/15 15:13:45 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "libft.h"

void ft_strdel(char **as)
{
if (as != NULL)
{
free(*as);
*as = NULL;
}
}
@@ -0,0 +1,29 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_strdup.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/05/09 12:20:55 by mvanwyk #+# #+# */
/* Updated: 2016/05/09 12:40:10 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "libft.h"

char *ft_strdup(char *str)
{
char *out_str;
int cnt;

out_str = (char *)malloc(sizeof(char *) * ft_strlen(str) + 1);
cnt = 0;
while (str[cnt])
{
out_str[cnt] = str[cnt];
cnt++;
}
out_str[cnt] = '\0';
return (out_str);
}
@@ -0,0 +1,25 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_strequ.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/05/15 15:03:48 by mvanwyk #+# #+# */
/* Updated: 2016/05/15 15:03:53 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

int ft_strequ(char const *s1, char const *s2)
{
int cnt;

cnt = 0;
while (s1[cnt])
{
if (s1[cnt] != s2[cnt])
return (0);
cnt++;
}
return (1);
}
@@ -0,0 +1,23 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_striter.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/05/15 15:12:37 by mvanwyk #+# #+# */
/* Updated: 2016/05/15 15:12:40 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

void ft_striter(char *s, void (*f)(char *))
{
int cnt;

cnt = 0;
while (s[cnt] != '\0')
{
f((char *)&s[cnt]);
cnt++;
}
}
@@ -0,0 +1,27 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_striteri.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/05/15 15:08:41 by mvanwyk #+# #+# */
/* Updated: 2016/08/09 14:17:50 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "libft.h"

void ft_striteri(char *s, void (*f)(unsigned int, char *))
{
int cnt;

if (s == NULL || f == NULL)
return ;
cnt = 0;
while (s[cnt] != '\0')
{
f(cnt, (char *)&s[cnt]);
cnt++;
}
}
@@ -0,0 +1,37 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_strjoin.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/05/15 15:18:31 by mvanwyk #+# #+# */
/* Updated: 2016/05/15 15:24:29 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "libft.h"

char *ft_strjoin(char const *s1, char const *s2)
{
size_t cnt;
size_t scnt;
char *str;
size_t len1;
size_t len2;

cnt = 0;
scnt = 0;
len1 = ft_strlen(s1);
len2 = ft_strlen(s2);
str = (char *)malloc(sizeof(char) * (len1 + len2 + 1));
if (!str)
return (0);
while (scnt < len1)
str[cnt++] = s1[scnt++];
scnt = 0;
while (scnt < len2)
str[cnt++] = s2[scnt++];
str[cnt] = '\0';
return (str);
}
@@ -0,0 +1,37 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_strlcat.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/05/15 15:14:47 by mvanwyk #+# #+# */
/* Updated: 2016/05/31 17:16:58 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "libft.h"

size_t ft_strlcat(char *dst, char *src, size_t size)
{
size_t cnt;
size_t dlen;
char *d;
char *s;

cnt = 0;
dlen = 0;
d = dst;
s = src;
while (dst[cnt] && cnt < size)
cnt++;
dlen = cnt;
while (s[cnt - dlen] && cnt < size)
{
d[cnt] = s[cnt - dlen];
cnt++;
}
if (dlen < size)
d[cnt] = '\0';
return (dlen + ft_strlen(src));
}
@@ -0,0 +1,23 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_strlen.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/05/09 10:20:58 by mvanwyk #+# #+# */
/* Updated: 2016/05/15 16:39:14 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "libft.h"

size_t ft_strlen(char const *str)
{
int cnt;

cnt = 0;
while (str[cnt])
cnt++;
return (cnt);
}
@@ -0,0 +1,33 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_strlower.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/06/06 13:10:20 by mvanwyk #+# #+# */
/* Updated: 2016/06/06 13:11:21 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "libft.h"

char *ft_strlower(char const *str)
{
char *out_str;
int cnt;

out_str = NULL;
cnt = 0;
out_str = (char *)malloc(sizeof(str));
while (str[cnt] != '\0')
{
if (ft_isupper(str[cnt]))
out_str[cnt] = ft_tolower(str[cnt]);
else
out_str[cnt] = str[cnt];
cnt++;
}
out_str[cnt] = '\0';
return (out_str);
}
@@ -0,0 +1,34 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_strmap.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mvanwyk <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2016/05/15 15:14:10 by mvanwyk #+# #+# */
/* Updated: 2016/05/15 15:14:16 by mvanwyk ### ########.fr */
/* */
/* ************************************************************************** */

#include "libft.h"

char *ft_strmap(char const *s, char (*f)(char))
{
char *str;
int cnt;
int scnt;

cnt = 0;
scnt = 0;
if (!s || !f)
return (NULL);
str = (char *)malloc(sizeof(char *) * ft_strlen(s) + 1);
while (s[cnt] != '\0')
{
str[scnt] = f((int)s[cnt]);
cnt++;
scnt++;
}
str[scnt] = '\0';
return (str);
}