From fcbe35befd2156063e07ceb1304d2c3d28826874 Mon Sep 17 00:00:00 2001 From: Camille Chauvet Date: Thu, 19 Jan 2023 17:33:26 +0100 Subject: [PATCH] kekw --- Makefile | 35 ++++++++++ extra/Makefile | 39 +++++++++++ extra/extra.h | 36 ++++++++++ extra/ft_contain_only.c | 41 ++++++++++++ extra/ft_freer.c | 58 ++++++++++++++++ extra/ft_is_in.c | 27 ++++++++ extra/ft_random_generator.c | 38 +++++++++++ extra/ft_strchri.c | 27 ++++++++ extra/ft_strcmp.c | 23 +++++++ extra/ft_strfjoin.c | 42 ++++++++++++ extra/ft_strgen.c | 31 +++++++++ extra/ft_strmerger.c | 33 +++++++++ extra/ft_strndup.c | 32 +++++++++ extra/ft_tabrealloc-5f29f43f.o.tmp | 0 extra/ft_tabrealloc.c | 31 +++++++++ extra/ft_ultoa.o | Bin 0 -> 4688 bytes extra/ft_ultoa_base.c | 89 ++++++++++++++++++++++++ gnl/Makefile | 39 +++++++++++ gnl/get_next_line.c | 104 +++++++++++++++++++++++++++++ gnl/get_next_line.h | 25 +++++++ gnl/get_next_line_utils.o | Bin 0 -> 5424 bytes libft/Makefile | 87 ++++++++++++++++++++++++ libft/ft_atoi.c | 39 +++++++++++ libft/ft_bzero.c | 18 +++++ libft/ft_calloc.c | 26 ++++++++ libft/ft_isalnum.c | 22 ++++++ libft/ft_isalpha.c | 20 ++++++ libft/ft_isascii.c | 18 +++++ libft/ft_isdigit.c | 20 ++++++ libft/ft_isprint.c | 18 +++++ libft/ft_itoa.c | 55 +++++++++++++++ libft/ft_lstadd_back.c | 26 ++++++++ libft/ft_lstadd_front.c | 21 ++++++ libft/ft_lstclear.c | 27 ++++++++ libft/ft_lstdelone.c | 25 +++++++ libft/ft_lstiter.c | 24 +++++++ libft/ft_lstlast.c | 22 ++++++ libft/ft_lstmap.c | 39 +++++++++++ libft/ft_lstnew.c | 25 +++++++ libft/ft_lstsize.c | 26 ++++++++ libft/ft_memchr.c | 31 +++++++++ libft/ft_memcmp.c | 29 ++++++++ libft/ft_memcpy.c | 32 +++++++++ libft/ft_memmove.c | 37 ++++++++++ libft/ft_memset.c | 28 ++++++++ libft/ft_putchar_fd.c | 18 +++++ libft/ft_putendl_fd.c | 21 ++++++ libft/ft_putnbr_fd.c | 34 ++++++++++ libft/ft_putstr_fd.c | 21 ++++++ libft/ft_split.c | 92 +++++++++++++++++++++++++ libft/ft_strchr.c | 24 +++++++ libft/ft_strdup.c | 31 +++++++++ libft/ft_striteri.c | 27 ++++++++ libft/ft_strjoin.c | 38 +++++++++++ libft/ft_strlcat.c | 25 +++++++ libft/ft_strlcpy.c | 28 ++++++++ libft/ft_strlen.c | 25 +++++++ libft/ft_strmapi.c | 33 +++++++++ libft/ft_strncmp.c | 25 +++++++ libft/ft_strnstr.c | 35 ++++++++++ libft/ft_strrchr.c | 24 +++++++ libft/ft_strtrim.c | 44 ++++++++++++ libft/ft_substr.c | 35 ++++++++++ libft/ft_tolower.c | 18 +++++ libft/ft_toupper.c | 18 +++++ libft/libft.h | 71 ++++++++++++++++++++ libftx.h | 89 ++++++++++++++++++++++++ printf/Makefile | 39 +++++++++++ printf/ft_dprintX.c | 18 +++++ printf/ft_dprintarg.c | 36 ++++++++++ printf/ft_dprintflag.c | 23 +++++++ printf/ft_dprintl_base.c | 34 ++++++++++ printf/ft_dprintptr.c | 27 ++++++++ printf/ft_dprintstrtab.c | 29 ++++++++ printf/ft_dprintul.c | 18 +++++ printf/ft_dprintul_base.c | 81 ++++++++++++++++++++++ printf/ft_dprintx.c | 18 +++++ printf/ft_isarg.c | 29 ++++++++ printf/ft_isdigit.c | 20 ++++++ printf/ft_printf.c | 24 +++++++ printf/ft_printf.h | 41 ++++++++++++ printf/ft_putchar_fd.c | 19 ++++++ printf/ft_putstr_fd.c | 25 +++++++ printf/ft_skipflag.c | 30 +++++++++ printf/ft_strlen.c | 25 +++++++ printf/ft_vdprintf.c | 54 +++++++++++++++ printf/libftprintf.a | Bin 0 -> 30760 bytes 87 files changed, 2831 insertions(+) create mode 100644 Makefile create mode 100644 extra/Makefile create mode 100644 extra/extra.h create mode 100644 extra/ft_contain_only.c create mode 100644 extra/ft_freer.c create mode 100644 extra/ft_is_in.c create mode 100644 extra/ft_random_generator.c create mode 100644 extra/ft_strchri.c create mode 100644 extra/ft_strcmp.c create mode 100644 extra/ft_strfjoin.c create mode 100644 extra/ft_strgen.c create mode 100644 extra/ft_strmerger.c create mode 100644 extra/ft_strndup.c create mode 100644 extra/ft_tabrealloc-5f29f43f.o.tmp create mode 100644 extra/ft_tabrealloc.c create mode 100644 extra/ft_ultoa.o create mode 100644 extra/ft_ultoa_base.c create mode 100644 gnl/Makefile create mode 100644 gnl/get_next_line.c create mode 100644 gnl/get_next_line.h create mode 100644 gnl/get_next_line_utils.o create mode 100644 libft/Makefile create mode 100644 libft/ft_atoi.c create mode 100644 libft/ft_bzero.c create mode 100644 libft/ft_calloc.c create mode 100644 libft/ft_isalnum.c create mode 100644 libft/ft_isalpha.c create mode 100644 libft/ft_isascii.c create mode 100644 libft/ft_isdigit.c create mode 100644 libft/ft_isprint.c create mode 100644 libft/ft_itoa.c create mode 100644 libft/ft_lstadd_back.c create mode 100644 libft/ft_lstadd_front.c create mode 100644 libft/ft_lstclear.c create mode 100644 libft/ft_lstdelone.c create mode 100644 libft/ft_lstiter.c create mode 100644 libft/ft_lstlast.c create mode 100644 libft/ft_lstmap.c create mode 100644 libft/ft_lstnew.c create mode 100644 libft/ft_lstsize.c create mode 100644 libft/ft_memchr.c create mode 100644 libft/ft_memcmp.c create mode 100644 libft/ft_memcpy.c create mode 100644 libft/ft_memmove.c create mode 100644 libft/ft_memset.c create mode 100644 libft/ft_putchar_fd.c create mode 100644 libft/ft_putendl_fd.c create mode 100644 libft/ft_putnbr_fd.c create mode 100644 libft/ft_putstr_fd.c create mode 100644 libft/ft_split.c create mode 100644 libft/ft_strchr.c create mode 100644 libft/ft_strdup.c create mode 100644 libft/ft_striteri.c create mode 100644 libft/ft_strjoin.c create mode 100644 libft/ft_strlcat.c create mode 100644 libft/ft_strlcpy.c create mode 100644 libft/ft_strlen.c create mode 100644 libft/ft_strmapi.c create mode 100644 libft/ft_strncmp.c create mode 100644 libft/ft_strnstr.c create mode 100644 libft/ft_strrchr.c create mode 100644 libft/ft_strtrim.c create mode 100644 libft/ft_substr.c create mode 100644 libft/ft_tolower.c create mode 100644 libft/ft_toupper.c create mode 100644 libft/libft.h create mode 100644 libftx.h create mode 100644 printf/Makefile create mode 100644 printf/ft_dprintX.c create mode 100644 printf/ft_dprintarg.c create mode 100644 printf/ft_dprintflag.c create mode 100644 printf/ft_dprintl_base.c create mode 100644 printf/ft_dprintptr.c create mode 100644 printf/ft_dprintstrtab.c create mode 100644 printf/ft_dprintul.c create mode 100644 printf/ft_dprintul_base.c create mode 100644 printf/ft_dprintx.c create mode 100644 printf/ft_isarg.c create mode 100644 printf/ft_isdigit.c create mode 100644 printf/ft_printf.c create mode 100644 printf/ft_printf.h create mode 100644 printf/ft_putchar_fd.c create mode 100644 printf/ft_putstr_fd.c create mode 100644 printf/ft_skipflag.c create mode 100644 printf/ft_strlen.c create mode 100644 printf/ft_vdprintf.c create mode 100644 printf/libftprintf.a diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..7474655 --- /dev/null +++ b/Makefile @@ -0,0 +1,35 @@ +OBJ = ${SRC:.c=.o} + +NAME = libftx.a + +LIBS = libft/libft.a gnl/get_next_line.a printf/ft_printf.a extra/extra.a + +CC = clang + +FLAG = -Wall -Wextra -Werror + +all: ${NAME} + +${NAME}: ${OBJ} + make -C extra + make -C libft + make -C gnl + make -C printf + ar -rcT $(NAME) $(LIBS) + +clean: + make -C extra clean + make -C libft clean + make -C gnl clean + make -C printf clean + +fclean: clean + rm -f ${NAME} + make -C extra fclean + make -C libft fclean + make -C printf fclean + make -C gnl fclean + +re: fclean all + +.PHONY: all clean fclean re diff --git a/extra/Makefile b/extra/Makefile new file mode 100644 index 0000000..269a370 --- /dev/null +++ b/extra/Makefile @@ -0,0 +1,39 @@ +# **************************************************************************** # +# # +# ::: :::::::: # +# Makefile :+: :+: :+: # +# +:+ +:+ +:+ # +# By: cchauvet +# include +# include +# include +# include "../libft/libft.h" + +char *ft_ultoa_base(unsigned long long n, char *base); +char *get_next_line(int fd); +size_t ft_random_generator(size_t start, size_t stop); +void ft_freer_tab_ultimate(size_t len, ...); +void ft_freer_ultimate(size_t len, ...); +char *ft_strgen(char c, size_t len); +char *ft_strfjoin(char *s1, char *s2); +char *ft_strmerger(size_t arg_len, ...); +int ft_is_in(char *str, char c); +char **ft_tabrealloc(char **tab, size_t current_size, size_t new_size); +char *ft_strndup(char *src, size_t n); +ssize_t ft_strchri(char *str, char c); +int ft_contain_only_str(char *str, char *to_find); +int ft_contain_only(char *str, char c); +int ft_strcmp(char *s1, char *s2); +#endif diff --git a/extra/ft_contain_only.c b/extra/ft_contain_only.c new file mode 100644 index 0000000..4844e79 --- /dev/null +++ b/extra/ft_contain_only.c @@ -0,0 +1,41 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_contain_only.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: cchauvet 2) + { + temp = ft_strjoin(out, va_arg(va, char *)); + free(out); + if (temp == NULL) + return (NULL); + out = temp; + arg_len--; + } + return (out); +} diff --git a/extra/ft_strndup.c b/extra/ft_strndup.c new file mode 100644 index 0000000..c0fc2aa --- /dev/null +++ b/extra/ft_strndup.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strndup.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: cchauvet M4n8bU-HLuvPNw%xGZ#l190 zs5ae7C`}AJ7>zN8M_!EaL5LU$1|qE*ZIlNSQP&5_){w9y8mf@g|DQ9nm!UqG_%~-~ z{_ns4GiT29_0Z1ks-h4<3h5>_PN0PB^3>)*HVqOVXznp5e>02Mg68CC#hfgZ&Eja8 zc;9FR74uSP9yRCwKxS&RTwcJ*WT*s6C0XfPTd87B6-wppkiul>%2en|@w{Tj=FeeD zWq8nh7R+a5^W!MH6q;r_#nB4LTM(KGm5;gLclM}jt|pu4;WBV{9;B6ynaMBBn}rh0 z&mUXnLjyC`bH#kPXZq+ew6A>P29u8O%$qmB2C@uIo0!{VXnO9{!oq^E_`>1BptB&D zhjHF4UJUkKNEqIA6Bu6f%g_2XHCicu1z>TWcqbZKwjNMuSw+;$`l@=14N5Mi6e`!n z^4G`mt_#}n#M)d6m9UY}KkSe2r2;g!8Gqp6!ijdA)*6E`uxMC1R&;6ZvR!mZ1n;}x zUH1&H595KY_nci>iu*c7j)tzoBH2lRf;rVw@}6_JSpA#0mH@rydaiGtwwLiz=r$%k z_mHhq%i^@1MTMtTnVSFrv_X$dg>LsA{tn zXG`-F%@3~HvGl1`gg7WsIkaObA#`H{tKVrvh|^0@)pZ}yJl)OB&4e^92gLRZk;Wi% z2j)XuSOdXrc_*EORZum7KLDD_i^wV6FQL79;(*N^wz;92jH)LF7#ECz47k0F+gh-> zU5tAgy@1SQ+&0uC&2|YiB;3h~XPRbfqZ`b0pPZh||Re3hyG2(?#|~3+a5pA4^5j zgZ>dKn@eWW{*F##gRx=#qXj1Hc&!t-jm9RD$oCgg`Ao!!kw7|;3k+q3ty~}$8;TT0 ztbAZ&XCRkJWzvIzR5F^#9}HLr^Vvw%sy`aZSp<}`2qDv-OCGWaTKEg;TyijN#r?^2 zo*>+xN3C2wYb(J#nTr<=5R|8Fn>!6zgqr87b*7LfNs_YC%rya=#NdtmFSV0p*fAjG z&~Bm}^eL-boUY^0-8F#WgM_=2Z1wn#sM}g~tz7{XChKBSLU2D-_nVfA*5aG_L z$rDxiVZ?!OSJdQFO#UOpbdX*UD2j5+(~1M80gn+#=Ogg0%(8<>PTHVGN-ccx~|@WTbT~wAnpRb-kBr`XF6BLp^$!w)9e;{#+GZ zHAB|`+8UO`by59&>aNpt%urX6*|mT-O;1pFn5ue!HbVflm#)x< zz|}Zi8>TDHQmuf3RZs7O*yGHr3PBa{PPCUHl-KgR8DhM) z$k~1dB)&zo&40ls0dK3zhrMfn;Wrcsza&lY+=lNQ(g3dqalD}jTpaF*i8)NG86sX^ zMH>o%1dbOFq~-R&aCVw<{_Z*){XEY3wS2_1D4*l-2%pRN7LJR!?7ajG`-3F#k8PH) zk76DE4aehr6#CzDJ}coraehp~uX6rP3ICn*@A6UPFZSIjNq>a%rzKqEc~QczaekJM z!oS$3KTG=WabDPodPRT!mh?p*?7K&;pB1jR3KjQePgyVaNWrl|>_~>&D{B~C_1Gb)R znoK7${K|kIdLy05TgJ1`?^&PAM`HVlfuF$sNIVW#oI&|&QM)pLYj(x4FDv!_Q^~Z& z6SIc;6WPeHg>GVzR4Nn0nYbDmkYYX(B}VSmVI2P_`WpObi})JG|5kvm*hBS~FLRa0 z`wL?AXC4ZJ_ycrOI_l-K8UHuHvs9*2c<2Icum^&A=t`W4D>;s_<(yDd;&I2ho)~1^ zE)d8V>PC4}CM2Q6lE*-IvHXAF`LE=DFn`>ia{l)MhCW4|FlBU=JG~_UK8pBa#P7ml z_P_F%0l&}nB<#ev8-!wBujiE)lnZ6u4{ZAb(lQetw|}SJDa=Lv0>*Q0vHn$BY>fe~ zi2cJeP}qz0$Madv2~AG%_`gU(i6w7??qczG@%=C2V0=tTjvoa~+qsZ|VGN!s4RL#M bCZRo&9RD(4a_>;@C=cZ41~}lBlH>maDPoK7 literal 0 HcmV?d00001 diff --git a/extra/ft_ultoa_base.c b/extra/ft_ultoa_base.c new file mode 100644 index 0000000..33933e5 --- /dev/null +++ b/extra/ft_ultoa_base.c @@ -0,0 +1,89 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_ultoa_base.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: cchauvet +# include +# ifndef BUFFER_SIZE +# define BUFFER_SIZE 42 +# endif +# include "../libft/libft.h" +# include "../extra/extra.h" + +char *get_next_line(int fd); + +#endif diff --git a/gnl/get_next_line_utils.o b/gnl/get_next_line_utils.o new file mode 100644 index 0000000000000000000000000000000000000000..fccc944f2266e8251807bd5929c440453fbed53d GIT binary patch literal 5424 zcmb_geQX>@6`$R^Szpc{>yIQjO+yS#DWLk!Hlb=7*KtX%Y>ybB2qQNTo$d49N4eXJ zZucyw;HJtsV8;lYN<|1ktNzml@saXJTi_34Xhh;5z^y=W#Yawv3L6z_5N*PTWZs*d z+1s0(k&t-O-pu>GH^2Ah&Ft>%osJ!SP*oHnL?HvDstJ^kp0;X#kaY)1D|ikYbFUla zH+qb@=?!D9v}Tm2H;6v78(fU}*qWhVjBWHT&s{Zcls1fmu{C|B8BLdCH<4sL&-`Gh zesOwj4IyJLRsoU<(a+X+9!A^c*edgxkF6T>L&!d~VH~)km-nD`9!Aa&t^On!!v3mJ zUQ&Q@*ni_pP$|kd0a8(MN;$AR}AH{QNFA! zVs(Va3S_z>XS(8MT7ib}ay$s#b*9h9HXz4}z8DOZZ$hE&LMINM+a7}M3fgB`7Yf0q zP+7kOQ{V(5Kd1$On-F0Qc;dbYYgh#XYF_>^6kvE&Upx|0ShT%vH0I!oW(0;-A>#Uy zFA84`%%@tmK`2{9-#dd-A^!SR*B|DhFA|JayMAA1p{HSkNHwgx+6DBkt~S;TrqLAY zT`K>B%*L+iGcAk{Rv9?#@=+7)0-I9fBmeRY6Ti^B{5Zfarn*Nr30_b#;)r#J8F#X+CK?N zUq2VS?j?=47|TYi`nTQmYIaO*@Q@h7Cvf6rrA@iBrGo}qTHmp|rA=wq2vK$L3Pixt zt_^kuTJCE+*m&2jhdK`JA|yzO%Atok2%-CHR81#{HtZvTmVw5`MnXb60dXmS^qX)q z1fd0-Jv5qFU;a5CfE?g*iLtd_BCWv&u6L{RnLzyt<44-Xd_H( zM^EB0_JYP4-;I7AqtIMNrg@C}PWu_}gw%_^hA2PKTu-E-pBet+aLKLNt;f>GN+tGE^C>I zl9SEZktB&)DLa}el4H4CA&EWP zDW)DNWGwVIHyjUb|iyIi7upVI};OT3Sf5QZUe-X zfUeM{@Y}Ra8=>1%bXT0dYlOb<4AtT^prxt4Om{#xG(y21);>ZtXweW{rrXN28Eoxw z+Bibhet zmJ!;_C|e<+eh8SMt-t|Tkd1DPQ>xuh120ka1Z{Yj#S3Z=V{$UbA80$|-Vakv)9t{~ zCO9Br9jAMcs>cOK7&yG#LuaW5HEPxzs^L7-w0)UTY?VINWm}v=&YfrI?iAe<54?E# zDXIppl78BxU1f7cuMTv1q{z+h%Z5l!k!7x;tQ}I ze*|#G&w1E00q7XK`1+tf z93?#b*IVERdEV&n=fSZkn2Yz~hQ6pg;y6Y~JMRd*o9jD$IG*%`+{Qb?|1j6z$y-d9 zr^b-Gx4`e?xZufg-H`C_ah)AxpfCKdaePAZ{|(oR5?q+s zi*>yq;jeT3MG3EP{gQ;Qas5>Z{}b1L$6Jx7DC!%M|L3{>PYM4E*WL4CwQhgo_)fmB z#C%2EeG*>b{yiKQ`H1^(K=OZr`yZ9?zjOS!gtO06uw^8?!u?N4_!*ARNci&{|B{41 z%keKuIDRIfJR{*NE=(>+IGzMhy4bI~$Nl?!P{NnEJ}Tj29Uqr)QO}=p9K-wh8=Arz ziAmn1Hivnn!l|@YKoyGm}Ua$MPmg6-|@my;CVa zpVmLHGSemmGVnjdldvhUOG_>=y75IsBj_^-Ibyk9YY0pNS1Uj43M!9YgYFZ{U!Ek1+A zc(MLp1We8ehdj^YzbYjr`_6%Hz4-6t8&$-?__(BU{LcUuIJ#MY=5e?@8RX*yH=oWe Zx&9VLNGURoS)44$y*y!Ta7pF({{d;DXBPkf literal 0 HcmV?d00001 diff --git a/libft/Makefile b/libft/Makefile new file mode 100644 index 0000000..9a2c3b1 --- /dev/null +++ b/libft/Makefile @@ -0,0 +1,87 @@ +:# **************************************************************************** # +# # +# ::: :::::::: # +# Makefile :+: :+: :+: # +# +:+ +:+ +:+ # +# By: cchauvet = c && c >= '0') + || ('z' >= c && c >= 'a') + || ('Z' >= c && c >= 'A')) + return (1); + return (0); +} diff --git a/libft/ft_isalpha.c b/libft/ft_isalpha.c new file mode 100644 index 0000000..9573931 --- /dev/null +++ b/libft/ft_isalpha.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isalpha.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: cchauvet = c && c >= 'a') || ('Z' >= c && c >= 'A')) + return (1); + return (0); +} diff --git a/libft/ft_isascii.c b/libft/ft_isascii.c new file mode 100644 index 0000000..5706106 --- /dev/null +++ b/libft/ft_isascii.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isascii.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: cchauvet = 0 && 127 >= c) + return (1); + return (0); +} diff --git a/libft/ft_isdigit.c b/libft/ft_isdigit.c new file mode 100644 index 0000000..0db99f6 --- /dev/null +++ b/libft/ft_isdigit.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isdigit.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: cchauvet = c && c >= '0') + return (1); + return (0); +} diff --git a/libft/ft_isprint.c b/libft/ft_isprint.c new file mode 100644 index 0000000..fd6d523 --- /dev/null +++ b/libft/ft_isprint.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isprint.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: cchauvet next = new; +} diff --git a/libft/ft_lstadd_front.c b/libft/ft_lstadd_front.c new file mode 100644 index 0000000..b17cc46 --- /dev/null +++ b/libft/ft_lstadd_front.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstadd_front.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: cchauvet next = *lst; + *lst = new; +} diff --git a/libft/ft_lstclear.c b/libft/ft_lstclear.c new file mode 100644 index 0000000..e29060a --- /dev/null +++ b/libft/ft_lstclear.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstclear.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: cchauvet next; + ft_lstdelone(*lst, del); + *lst = next; + } +} diff --git a/libft/ft_lstdelone.c b/libft/ft_lstdelone.c new file mode 100644 index 0000000..73ac454 --- /dev/null +++ b/libft/ft_lstdelone.c @@ -0,0 +1,25 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstdelone.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: cchauvet content != NULL) + del(lst->content); + free(lst); + } +} diff --git a/libft/ft_lstiter.c b/libft/ft_lstiter.c new file mode 100644 index 0000000..1baa94d --- /dev/null +++ b/libft/ft_lstiter.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstiter.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: cchauvet content); + lst = lst->next; + } +} diff --git a/libft/ft_lstlast.c b/libft/ft_lstlast.c new file mode 100644 index 0000000..ba0d9d7 --- /dev/null +++ b/libft/ft_lstlast.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstlast.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: cchauvet next != NULL) + lst = lst->next; + return (lst); +} diff --git a/libft/ft_lstmap.c b/libft/ft_lstmap.c new file mode 100644 index 0000000..ed99c7c --- /dev/null +++ b/libft/ft_lstmap.c @@ -0,0 +1,39 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstmap.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: cchauvet content)); + if (root == NULL) + return (NULL); + last = root; + lst = lst->next; + while (lst != NULL) + { + last->next = ft_lstnew(f(lst->content)); + if (last->next == NULL) + { + ft_lstclear(&root, del); + return (NULL); + } + lst = lst->next; + last = last->next; + } + return (root); +} diff --git a/libft/ft_lstnew.c b/libft/ft_lstnew.c new file mode 100644 index 0000000..705733e --- /dev/null +++ b/libft/ft_lstnew.c @@ -0,0 +1,25 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstnew.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: cchauvet next = NULL; + new->content = content; + return (new); +} diff --git a/libft/ft_lstsize.c b/libft/ft_lstsize.c new file mode 100644 index 0000000..fa39de9 --- /dev/null +++ b/libft/ft_lstsize.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstsize.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: cchauvet next; + } + return (count); +} diff --git a/libft/ft_memchr.c b/libft/ft_memchr.c new file mode 100644 index 0000000..28f3775 --- /dev/null +++ b/libft/ft_memchr.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: cchauvet 9) + { + ft_putnbr_fd(n / 10, fd); + ft_putnbr_fd(n % 10, fd); + } + else + ft_putchar_fd(n + 48, fd); +} diff --git a/libft/ft_putstr_fd.c b/libft/ft_putstr_fd.c new file mode 100644 index 0000000..d8c87d2 --- /dev/null +++ b/libft/ft_putstr_fd.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putstr_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: cchauvet = size) + return (ft_strlen(src) + (size)); + return (len_dest + ft_strlcpy(dest + len_dest, src, size - len_dest)); +} diff --git a/libft/ft_strlcpy.c b/libft/ft_strlcpy.c new file mode 100644 index 0000000..677264b --- /dev/null +++ b/libft/ft_strlcpy.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strlcpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: cchauvet 0) + if (s[i] == (char) c) + return ((char *) s + i); + return (NULL); +} diff --git a/libft/ft_strtrim.c b/libft/ft_strtrim.c new file mode 100644 index 0000000..229cb81 --- /dev/null +++ b/libft/ft_strtrim.c @@ -0,0 +1,44 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strtrim.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: cchauvet len) + size = len; + ptr = malloc((size + 1) * sizeof(char)); + if (ptr == NULL) + return (NULL); + ptr[size] = '\0'; + while (size-- > 0) + ptr[size] = s[start + size]; + return (ptr); +} diff --git a/libft/ft_tolower.c b/libft/ft_tolower.c new file mode 100644 index 0000000..14d83da --- /dev/null +++ b/libft/ft_tolower.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_tolower.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: cchauvet = 'A' && 'Z' >= c)); +} diff --git a/libft/ft_toupper.c b/libft/ft_toupper.c new file mode 100644 index 0000000..3775f6d --- /dev/null +++ b/libft/ft_toupper.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_toupper.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: cchauvet = 'a' && 'z' >= c)); +} diff --git a/libft/libft.h b/libft/libft.h new file mode 100644 index 0000000..3c98b38 --- /dev/null +++ b/libft/libft.h @@ -0,0 +1,71 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* libft.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: cchauvet +# include + +void *ft_cancel(char **tab, size_t len); +int ft_atoi(const char *nptr); +void ft_bzero(void *s, size_t n); +void *ft_calloc(size_t nmemb, size_t size); +int ft_isalnum(int c); +int ft_isalpha(int c); +int ft_isascii(int c); +int ft_isdigit(int c); +int ft_isprint(int c); +void *ft_memchr(const void *s, int c, size_t n); +int ft_memcmp(const void *s1, const void *s2, size_t n); +void *ft_memcpy(void *dest, const void *src, size_t n); +void *ft_memmove(void *dest, const void *src, size_t n); +void *ft_memset(void *s, int c, size_t n); +char *ft_strchr(const char *s, int c); +char *ft_strdup(const char *s); +size_t ft_strlcat(char *dst, const char *src, size_t size); +size_t ft_strlcpy(char *dst, const char *src, size_t size); +size_t ft_strlen(const char *s); +int ft_strncmp(const char *s1, const char *s2, size_t n); +char *ft_strnstr(const char *big, const char *little, size_t len); +char *ft_strrchr(const char *s, int c); +int ft_tolower(int c); +int ft_toupper(int c); + +char *ft_substr(char const *s, unsigned int start, size_t len); +char *ft_strjoin(char const *s1, char const *s2); +char *ft_strtrim(char const *s1, char const *set); +char **ft_split(char const *s, char c); +char *ft_itoa(int n); +char *ft_strmapi(char const *s, char (*f)(unsigned int, char)); +void ft_striteri(char *s, void (*f)(unsigned int, char*)); +void ft_putchar_fd(int fd, char c); +void ft_putstr_fd(char *s, int fd); +void ft_putendl_fd(char *s, int fd); +void ft_putnbr_fd(int n, int fd); + +typedef struct s_list +{ + void *content; + struct s_list *next; +} t_list; + +t_list *ft_lstnew(void *content); +void ft_lstadd_front(t_list **lst, t_list *nouveau); +int ft_lstsize(t_list *lst); +t_list *ft_lstlast(t_list *lst); +void ft_lstadd_back(t_list **lst, t_list *nouveau); +void ft_lstdelone(t_list *lst, void (*del)(void *)); +void ft_lstclear(t_list **lst, void (*del)(void *)); +void ft_lstiter(t_list *lst, void (*f)(void *)); +t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *)); + +#endif diff --git a/libftx.h b/libftx.h new file mode 100644 index 0000000..e9d6a7a --- /dev/null +++ b/libftx.h @@ -0,0 +1,89 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* libftx.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: cchauvet +# include +# include + +char *ft_ultoa_base(unsigned long long n, char *base); +int ft_printf(const char *format, ...); +char *get_next_line(int fd); +size_t ft_random_generator(size_t start, size_t stop); +void ft_freer_tab_ultimate(size_t len, ...); +void ft_freer_ultimate(size_t len, ...); +char *ft_strgen(char c, size_t len); +int ft_is_in(char *str, char c); +char **ft_tabrealloc(char **tab, size_t current_size, size_t new_size); +int ft_contain_only_str(char *str, char *to_find); +int ft_contain_only(char *str, char c); +char *ft_strfjoin(char *s1, char *s2); +char *ft_strmerger(size_t arg_len, ...); +int ft_strcmp(char *s1, char *s2); +ssize_t ft_strchri(char *str, char c); +char *ft_strndup(char *src, size_t n); + +void *ft_cancel(char **tab, size_t len); +int ft_atoi(const char *nptr); +void ft_bzero(void *s, size_t n); +void *ft_calloc(size_t nmemb, size_t size); +int ft_isalnum(int c); +int ft_isalpha(int c); +int ft_isascii(int c); +int ft_isdigit(int c); +int ft_isprint(int c); +void *ft_memchr(const void *s, int c, size_t n); +int ft_memcmp(const void *s1, const void *s2, size_t n); +void *ft_memcpy(void *dest, const void *src, size_t n); +void *ft_memmove(void *dest, const void *src, size_t n); +void *ft_memset(void *s, int c, size_t n); +char *ft_strchr(const char *s, int c); +char *ft_strdup(const char *s); +size_t ft_strlcat(char *dst, const char *src, size_t size); +size_t ft_strlcpy(char *dst, const char *src, size_t size); +size_t ft_strlen(const char *s); +int ft_strncmp(const char *s1, const char *s2, size_t n); +char *ft_strnstr(const char *big, const char *little, size_t len); +char *ft_strrchr(const char *s, int c); +int ft_tolower(int c); +int ft_toupper(int c); + +char *ft_substr(char const *s, unsigned int start, size_t len); +char *ft_strjoin(char const *s1, char const *s2); +char *ft_strtrim(char const *s1, char const *set); +char **ft_split(char const *s, char c); +char *ft_itoa(int n); +char *ft_strmapi(char const *s, char (*f)(unsigned int, char)); +void ft_striteri(char *s, void (*f)(unsigned int, char*)); +void ft_putchar_fd(int fd, char c); +void ft_putstr_fd(int fd, char *s); +void ft_putendl_fd(int fd, char *s); +void ft_putnbr_fd(int fd, int n); + +typedef struct s_list +{ + void *content; + struct s_list *next; +} t_list; + +t_list *ft_lstnew(void *content); +void ft_lstadd_front(t_list **lst, t_list *nouveau); +int ft_lstsize(t_list *lst); +t_list *ft_lstlast(t_list *lst); +void ft_lstadd_back(t_list **lst, t_list *nouveau); +void ft_lstdelone(t_list *lst, void (*del)(void *)); +void ft_lstclear(t_list **lst, void (*del)(void *)); +void ft_lstiter(t_list *lst, void (*f)(void *)); +t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *)); + +#endif diff --git a/printf/Makefile b/printf/Makefile new file mode 100644 index 0000000..7be75df --- /dev/null +++ b/printf/Makefile @@ -0,0 +1,39 @@ +# **************************************************************************** # +# # +# ::: :::::::: # +# Makefile :+: :+: :+: # +# +:+ +:+ +:+ # +# By: cchauvet base_size - 1) + { + ft_dprintul_base(fd, n / base_size, base); + ft_putchar_fd(fd, base[n % base_size]); + } + else + ft_putchar_fd(fd, base[n]); + return (str_size - 1); +} diff --git a/printf/ft_dprintx.c b/printf/ft_dprintx.c new file mode 100644 index 0000000..6d6de6e --- /dev/null +++ b/printf/ft_dprintx.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_dprintx.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: cchauvet = '0') + return (1); + return (0); +} diff --git a/printf/ft_printf.c b/printf/ft_printf.c new file mode 100644 index 0000000..80cedbe --- /dev/null +++ b/printf/ft_printf.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_printf.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: cchauvet +# include + +size_t ft_strlen(const char *s); +char *ft_strchr(const char *s, int c); +int ft_isdigit(int c); +int ft_skipflag(const char *str); +int ft_isarg(int c); + +int ft_dprintptr(int fd, void *ptr); +int ft_dprintl_base(int fd, long long n, char *base); +int ft_dprintul_base(int fd, unsigned long long n, char *base); +int ft_dprintul(int fd, unsigned long long n); +int ft_dprintx(int fd, unsigned int n); +int ft_dprint_upperx(int fd, unsigned int n); +int ft_dprintflag(int fd, const char *flag, va_list va); +int ft_dprintarg(int fd, int c, va_list va); +int ft_dprintstrtab(int fd, char **tab); + +int ft_printf(const char *format, ...); + +int ft_vdprintf(int fd, const char *format, va_list va); + +int ft_putchar_fd(int fd, char c); +int ft_putstr_fd(int fd, char *str); + +#endif diff --git a/printf/ft_putchar_fd.c b/printf/ft_putchar_fd.c new file mode 100644 index 0000000..d509e9c --- /dev/null +++ b/printf/ft_putchar_fd.c @@ -0,0 +1,19 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putchar_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: cchauvet `bRY;Q4FdQ>3g|;o7)e{G=pPV4>#|i)$sf`RDd4hgfDkQO&>%mshyW9X z5cU0L-rJp<+u_|(q%FyQz~0QhnKy6#?fcE!o!xu%VE1V6;L|(y`uWsooa(sw>-){E z&77lahv#|Ko>w;Oc{{)5dAn;oujaF!_eh23J=WrRdjikf_m`e`aL)6N{Eg>5f6?>4 zM)^7@>?Qswl6~d;K&G>AWOV3ECOh2O(>>Pj5o2hqZ|LMu22n|i;^R?tV7U7v&c;p+ zjY$04T4Er|6_u-#I@Dx`Za&?anm%GA`N@c6QeeqphkR8qV&Gc)AH-?bsX2=n~CSbENjSw5SZtEsbqD zXV;E5(#M`DFDs*A(^Td??L}w8^}M?KqIgP0Q{FDG()(4_Z~b3;ko)f-cWyDrWfy|0 z=~c)Fljjz_?8CF=6kmEYm`*SL1X95VlqHv53??a?&huZCxO(D>SYnkJWhRc+E0 zqk}xn

x%PR=I`3t7 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 literal 0 HcmV?d00001