From 0eb994b3aaf0dfefaa35de41793b9fa1a5d166ac Mon Sep 17 00:00:00 2001 From: Hugo LAMY Date: Tue, 25 Feb 2020 16:44:32 +0100 Subject: [PATCH] ecriture de la macro pour faire les tests, pas la partie detournement de stdout dans fichier --- Makefile | 1 + ft_printf | Bin 45036 -> 45164 bytes ft_printf.c | 172 +----------------------------------- ft_printf.h | 17 +++- main.c | 76 +++++++++------- srcs/ft_width_n_precision.c | 153 ++++++++++++++++++++++++++++++++ 6 files changed, 213 insertions(+), 206 deletions(-) create mode 100644 srcs/ft_width_n_precision.c diff --git a/Makefile b/Makefile index 60235b6..2eb6a65 100644 --- a/Makefile +++ b/Makefile @@ -18,6 +18,7 @@ SRCS = ft_printf.c \ ft_next_word.c \ aside.c \ ft_convert.c \ + ft_width_n_precision.c \ main.c ODIR = ./builds diff --git a/ft_printf b/ft_printf index 7fa477eedd9f97bb8aae9331b10a5a7ea3d7922b..c17ebe29e7b5791f62ac628ef6eef7103a77de6d 100755 GIT binary patch literal 45164 zcmeHwdwf*Y+4TvD5*3|jvBioy0x{u|IN>57V1s6KsEMKyiwX@P7ZT0QB%`q}snIZ+ z!w{SLN~>0D+G2~A*0iF<3p6MNs#McTYpSSuEv=K9)>N@XMETb9tbJxql8N^H{l4$} zi}^8g&R*-;Yd`xr`*u!dHZLFg$ETw$Dq$msK-(*6Bk81=xg?t0$%2Bq`ryjCC^S^>`WvX{GZs$T$&hUHV*ZIeTqYXZgrpPaX|F3C8~k+gYbx5EJEoj7LWLdvz2wvzoL%eoWC!#}mG z8gw}EZ86^RT4vs7iH?=g6v8?386x1xOIxy83s6eBIK z)A1HRx*mFaN8OP*y+6sk`T9Hmdg*tj1M}jobvy|r<1ObJ%f#mrrr_L!0%sVbP(9J< zoTSO+{7XU!@U>`B*bp2;EK5n$;?t2J9wrhxT} zHDyYDaD}FfD-YLb%J^5=ZXuo<%LhlwetsZZGYD;|7HnfZfnSbX`a0>CAZa| zf@AW+T?>M6b_9QYk{+l z!LaV%Z2LF&9tYE2;7V+hF+P%r36VNs!CU=3;k=&akJ3@w0Gzj5b0pk%rh*KIhrx?U_0NjZe)1X_c;BfH_R z)F332$S(gr)ci>AjX3XJjx*G>2d!~SRw{yw-V<@bBGjdn%&Fi@*^ zm9`f@xa8)KQax)51r#Q$vt>If-ybLn_Ib7?O>Z7ZZOMDrv*t_S0%7#}qCDVZlba7& z*`D<~vs;4iuJymWF~Ji;3$uFZVV~BhulF(au+R1%?)|s0c)LWjhClc^YS?^*6OqCB zrG`$SfrQ-wdspOMT#rOQB>Mv4Jb2RxZ)VO#s0u{r{HT!ERg`3fN0R*-WXCBL;`#Gs zk@*0tGhU&Q{V`YQAIo9?eANCp6dU%N`r`yu5Bm>usO0$A+~-64kRcWCui#XM+=z3H zP87Fy`3G>YdK)AGGBOcfqlL;rE=(z+y4iBk2P?2 z`x5`v=~Pb$lL88m#uP|s{s?_}kdIijx>%T>YJi>D39-6{0PgbdXPeb#w%y+C3d zxs>UyK*G*I^FI^pf7yBa!g>3ex8rhd4{Yy2J$6ODu8rktC_1_#u759=*$d zSegO*jk^Il?Jv7!pv8X>D;9K{#)HjAiaepo;#KQ{CMZQ_NpEEPkH}!=?`e^0!ejqH z?@Snaw)qb>4-|XWNIPYs+!H!QB&4@J!TbZgI@g-c2m$F2gH}Al{n7lX=8}81E zY1|;juYJuJe_qu*XXRL&Pj2h$l!9f*LcpbhaA3ZORpzQ#5BsHbU}3ja;3V>kOOew4 zTB*3dXRTa={%}h3q4bu#x1{;o`FlKfjt3p~@6iQCewS-Ck=NO4<{XSgL)H=bozTMD zw>IxB&$f>uf8mrr(A$CAPvhc!h)d)JaYLHI$gcbve21OC$#G>9UFmSU((bs@G2E4Q zxY8adf-AokSC%@iq{du1MO^vHAXf%QtNE*+8LfxlVw;`6&T(-aU2Jo^*yOm_Hr&M~ zxQI7gd`MjMJ1*X?ivYc#b!Zro2gHqNwARJBaILpWx3xnxIN0ke@ae1y zR#|L2t3u_5Ud{DlfmNX#!pZhaYuDe3Gtag|k?$Rr($H&VKr`3%CCqt|_ZPW64af7e z02=UgF%I_nToE+uS2?Gr!nr-oM%wXIxnZ7)1w7@!x3;waX$k53A4_3y^xT-EY2xT2 zaa0@MpgD0^_q%OJCvv(cTTHvo_#&Op4r0O6*dG}ez!bDod!kIZzUEIeJfY)|*S+eP z=Z|>q8i;~YTeCKJNLKpJB_2FacflSFMV1VGTrx-j=&vY1o`eav)5_?@sny&V!Bmhz zv_G5|Y2JRs&cj6V`|PzdWj4SKM4w`Pg0;*{>HV#S&a60x`fNn|AbOf9$}O-nDaF_O z#t;FQPa2tRSBZ~U=IH7Q)BK>x+_gUT!D7(;?zT*n8Ts^LS7_Fpp?yO}4lW$!K|kg# zDPZSli3Jp#32?x(ttJ7p&-n;$S+S^O(|?R=j&kA;#!_X*lE-`BepHC5-Z z&Y0)l?`f4MpTli;Ci%R*e-_(kl!rq;oJ0;|&J%|;^^_No$Ny5x3oZG7!7UsL$=i<@ zadm9x?T)mHc{p!(V6rSSx&m`|dz$6$cdh>~a&HpO-)H}+d1rzhMAkzsNppLjblm&D zRZVdxvU4%(h>MXO=Xs2CzoA2hJmU%Wn0q`d=|-WpEqSkd*6^;~56Fjxd@F9FBLBRI z(eSL_4wJS1*Q3qLtoKdd@b~ooR9hGpxUV53u3l2qhz^5c!EWr58IA zvh?t?e%xevCO_PxhX=d#u)b3dt@4xrPng$uCn|2 z(+Y^#t;_J~%-?d(`CB;m{Jj`yXZ}`h*!(RPh!+pIm4iD!5?^0}(`)m@>0GriPUEg% zm_ykxuv_Qj({V`7>5y=4hkQso4keXX3#*4l$O{9z zbv!;Dhvb|N3Fmew1!>12<%T&V7H~)oVHpY}DhQ6O_3h9YC5nm&fB3)YGORX&1mCLkJ@2iw?2SR$0IqXN5Z*1 zYD3!bNV#Dii3L33K^o9}Ix|h3S*NUVro=Fst0cDLd z`Ei_yz`$|{BSeD@W=Z_QD+<;Tp-z2&ur@eJI4xZ2n=oDF<__Ks8Yw%}@Um&07gy{2|s{*(6 zZ8=^Z3Lb!=Wgg=+H};S6g#OKY94wg{@W+N(+u&BD4cX=HCG=;IA9zxZx$}BGp4iOe zskh=7Xgy{_(kmj5DFAt*M*k7BQt6Dj)I-{K^HGfw`H+j_=ZsJ6Ye z7@E2ETj2-g#2!B>$6hiiIbi2ZO6f?9TramPxc$SOP&mIkoQD$pT_}Y`wEB1X}hhdKc2TF&x|w&Tq%^8ajUHh(Vl1xDH+r`O*WvUR~Z0Fkv)N@-ni22xyS0z2_-ZLc0++vLX74&~6LY#JX%zziX4 zQRI02e~@EWr~#>7yk*dqL+gTWm|{euRf5*Yp>`-Wht&Nd(7NCOQSJeRzt55Qo!nZq zF0f;SEOAj}8FSnWBCrjRyl%y+3J0*?VYU@RSXmH*oyNRh712_y;3N_S%r-kl$nqFD z4#6q7kt%wvvnJtShsKkd$~<2pb(~V;NbO**L}1$vZa4*b#*#RAq1LJ&0WpLu`ccl^ z%<-lWua1#Y#*p|8bG#TMl1Z#!j;AEHt~ex-y^Gm?IE1yxPGa75!nV!|<6wslV>Jgy z@|m%bRE<&tr2hGq#-be9Ho3va@Jr%s=J{HT=qK?kb6hOMH#A2diT4(29A?Fc2#K}K zkt&1?Lw0CCiLK0WYK-V1v6MNE6+)KMc4!}oFmwDHm&p*_B+g-ucZ86|lO5Vi;u_|7 zEk<;aIPj*{{3Rj2sX6wLNMnxYV#IC|&oRfZgt%36>>%-Bw$}WS7|}_hjX9ptSk5{H z2RrmEsqM`3Gg1dprXAWs>RRS1g&eNrDje+4W>R71x|UR~QXQlwF;{@pBBeHw%4e?m zq%xJ-Na~+&XcVT9lICxRHjp}txy~e&qEtJnEzC8BlpO5P1EhMtqOmx_di_hQEcdKv zhPN|UAFyqmXMBor;T{rCFwg5TqK(92=6F$vrXwF#X*1s`=tOWIRqvok6_3j0j=Y_f~ zM%9p7!*UjYz*Ut4Z@%I56Uc=;K2j5uDr2t8nClEuXDU@p>Q?4DnN*@uD@cuFt|Qu# zXC)}LjMO6LIzZ}g+U}N;di!;a#9v6gsMHctUtq33lj=}vF{w?+#XEA&R~dLp=bEp! zz&6sez|2=EAhR&|&U#qj=K-7Zfc-=b0=Y9(jnAT8p)wqfwKOd2q)6}%t(D|BDHKa;uez!_g5WA9Cm)eyP zyI_#Si%J!fnn?4@RbmA(53!%9-7;by&(R7$0&JVyOxdBOB;F=*k_s##_7brs6593d|uk zhuD`z;1Qk6W|BCI#HA|WBX$C@(JC;F*umKvgX2VCwIv>;lX#QF@hUKh*bBsZFt^$v zFR>?yy$#F=j3@CRiQl47Tc2H^J=(;cQh~9w3ljT*2xPyV0OJ%A%Sg1Sz!+iyVt1)P zGO?M&R>TC7NSsdM5*4tBjV4y40*4Rl2>QW!8iQvrO&Sm6;Rf7&jl{7kAWt@c?IgBY z+eSaJUlN<7qJ6}^Z|t-;$-@ieT}!N3hZTA30qiDXr)l0EVk?QwR%{=!%ZOzIL$8wq zMpIHVNEM)JSUD3ri`bXdPM&6nH-NWMbbVwoe7N5WADulL)C1*i52|#QiGJLF`&$TU1~Z zv5Sdq2WA8|lE@%&jS6fab{etosX#liV}R)@Z=qh+2Z+8mQv-0i=DwHM>%_jHx$hyi zi&(Q1FN+lnwIqH{;x(vap-b$3V#`&ah1ea$Rw=fISS_*dYu+YeUnh34+N~z`Rbs`8 zH4rq(tX>JpW$AvW4ATS4rD8Cv(tDe+fron@rDNhPU7F|i%Q($$L< z#5#y&QDVAM%Sf#!wH*axfF*Vtu@lv939(9IU!=r)T9L)1t|awMmB=M_0WsPIh)p5J z)#I#9Dv?9VLu#H%WE1;%y4L%*YB!(QJH-9~Y#T;&xIBl%OC%0K2aiOEJx%OqD&Qmb zV`ASH0S;%=NVJl8N(Iu1-9k*3#dc^Cu@Yh%74s6ig4jcfjVHDsX15KK7X-$Um_%Z+ z7BrSv3bAGtNFjC@fBZ+EUkA(xj3MzC5)v{yluYbpVyjdjiP$s5YGMKwi64@Xkl`@~ zzPN+Y;SP+Vs~raeqvV=o27Pr#4aHA6~!XNrVzVY^X@11MPg^F zT@SHQ#I8|nAF+SRolon6HHvi;dyN=a^V;Qv&qO{5Ou z>r|-rM3vY`>@URrtaclSy-e(BU>IgzSE`-VW>P&U1dCQ;?Zlo{yL*YPBla6g+^f_* zq;4ejph~n6TTZN9?bZ=nMC=h@X7Fzz;Ulq31=bK7Pi&0}G!aWC)+z$OIa?fFP2#;w zjl=0G&_L{UVr42&Piz;l8)E`BBz{ifH57nH1H|qpmZt(`#O@#_ZNPX?Orny+eJZem z*fqq=cuLGqY+g)YDT!$$ma4!KV&jO7Qx6ssOCol5OdyxUyBQjTFR4I)*sH`o(dM2* z?0H~1gC?nLHqoEa^3PDmb7o@q5!=Gw; zy?U8WG>ewYHTNW9XApZ-b9;#$=j7h1mg9+jfWLa851gggIAU)R3G|V8Zz|ir3Pgy#PHch->?gL1*k2K=ZS&rg^-m9ppObhE z1>n}7*!{#l)fGiIu{(&3j(M<`L?wy)RG^F4HN^g+0(*%0iTy*d-NdqpNyxBNC3Xg} z->F?EvEzuntJt%|KAfU8ze;K(Gyc<@Ot+AIm29FaZzlFUvFB8!gViXPdn63!)zK>sNe&{rV+bE1@9#` z4w!b;r9ic2Pl@EhEnM5&L#y{EYY5I%wKigJ6652Ob;Mo(rfOHjRcoQu2IlNS(ROGJ zu{L7osBcZgRuelHm|1_UCQ(G~dl!s6aijdBnzwfL=L`7B627O~%nAN2Mx= zB@ugHFKHRE{&bDNAM|dmnAkpI?ULkE~0(4YUI%VT%)TR*~Csa8ndbK zxN`HUaU@N3r>e#r+P_Qe9<`fE>{Vh905cWwk=RD!?m&9kv71#Oo!EDX-5L{^ zM52+zBP!q}R!;0%6&Oz}pV-Qnz&H}~NtCI;SYqkK=Bq#ov9ZK*Vgh4Ge0+|^AWa35 ziM>PYOch8X_6o6cVgeS4r%C(`1z?@~kq*&6CT6L?0I|D?$rDLDjwSX@V)GR1Cw4ut zi(&=!k+_0{gbdGQi7g=JRe}A)CIgdJuVHC2<>xpQ*q-#43p`Re?5Q*AQC~6Ie$gn?!{Q zv=Ey{Y`zMtAvTU!PE4SQ#F2?w->E9Fn%KL<&Q^g2Vy_aL922M~v5myvQ2>6dLhMmu zNh(l5>^sE9#01JnG?I8k1&WE46MIJ=I<6p=PwYKlrX4IJF`q=43M?g-PV7Y$SVC+p zu~%XOi%EPuL1U1n0=dNAA@*|>2oQUP*po4V91>5H_!|nqlUrgxCiZO=m{06(V)w-a z=8(9B#KS5ulUNC{pbGeiT|w+_#ikKkKL2g_aw z8UENsEJEy;DmsqXUSKjH^!wGG+*sifB3o#`A7$XVE$ufDyGJ#~5Nk6Uo2Wr9nHu%9 zZ&!^Z+OHsXlWJJRa*akAHOL(vP(OUMU#1!Zf?1LA#I8||1H_Vv6#_Gjsh`AqUaj2e zD$qylbz%!tAVO>xF@H>8KZ&1{cnt+$O-$^5VrQ$sK4Nzen;aA9CQ(V^J{8zY>>6Un zs(^fX4b}1!J1Hixhr~1zOI2Vuv2n!yu8%r*5KAKVzC42E+N6`jyJu+(zN7-r5_^@H z{PhE0aUk|Qu|LHGHj{YN5GcS7brAawvE}+;brZ4MiIo5|9&990PGY?ZY#^3TY(O7D zwi8=O%!&y-Kq8&Q5*4_Y*jQp&T7`RvS;XeXs?bK_oijBCUr>Q{#9kqGstU9a`!%uY zimf5`Q(|XmRhx)?m)JbDTTQH)*hR6z8%SJFLPBPT>WN)V%&P)5#4ZFTJ@V@ps7pi$72HX zNsK2EP=Ptbl8Jpw1!fXEFkZd?ZcM;O;&l?ERbU#iUBv2DAf4Fb#8$@yCXu+G#7-27 zzn2lagV@(pU_7x}V)6$Z6N7Oit|1Xpfw9E=#LicN6k=J#E{q9`Au*0bjtV3bOColr z3M3KhKV4&RPE5ce@hXW#6*zoQN1*44C8)pvvB!uV7ZW%@;yWasL!ox4pV;lh_G?G! zBUVMMFV>|aB=SkzrULtkEhM&E1$u~O5UbLMzx#-tMl7sYH?d=gZPmPciT&%#TK(U| z3hyG(O+rG3FCY-xLF|Vru$x#1FzJzdE>IzIJA_M!+(Y|Ll#4%?(Y}e;8r67~ScTDO zp$54v)L2aW)vB?X_VbCAszwK~bfb|&4RV{PF^2YYRAVFU2ToIe7pcYuV*80*0nD_< zb`md=I0zj)=q2_mVi_uMFR>pHn-vqdhs0VEPpUv0v73mUtODzZtt56@OrV9tA`(Fr zSVL?UvG3|%E1HO%P3$3HrV6V`B$Jq_0u96tjMErosX#rk9%6H20yQLdk@x^Qc+5-e zabop4LzNMGh}ddi#)D!KcaZp{3alVjOKcCHDiHfRvAyzGinH`m5`Gdls=yLrS;SVU zz+z%&5UY*}@i}`sK6Xz z-y?RSKB=8a>`r1k)Xqn&4w!VFZ_QID$W0S2A@ViaH)~nxw7-bhC3?Xo5j)ptTuKdc zUTS=S_Fqwr@w7kkMJ?+M9T~_uP_k9X#%J-N-)c#QTEGAw;*|2<-pRbvyeJB`MV zs6lQcHEy82gbd%~rTy249j6-Y#4a)#1=Jw-05#HRFCnu-_tO3g#Qv^r{T^aRzQDSi zP7QKx)c6ZHEdL~A_$mYKUncf~YP1l0#%R1cTkXlMp~geBmyqFyX0#6zdsH=66T8`H z{5LhoHBjR^+Dpi=9H#vx#5kkZ5Su~l$NE6Gg4kKaqVoh3pF|mWEsP8Sn z%pkXd#G53J*TR<(dx4nzg&tpJAoe6MX%v4rPld=W5iTKeKkav-T&#gHvqW?}u`*(J12dOn z9ErQdS3Sfg5=)8+>?3hJiStyTo7lfS8iTh~U@x(^iM<2N1hI?6Z%KRz9V~~5 zJwfb8+PHQT`vI}XRCEWiR$?;1V;M~B7Ghh}?pb0b#I`E7h1eCuWY-9M(Sg_kVmlP; zAU2uUZpAhcJC)e)6x&EFff&ECuz}b=PSQa9Rqfh|{h3%IB8e3*vEL9&R_tD4zaVyw zV)qbxkl0kk+KAc27AdxlSdiFdinS0cBzB!*Yl!6$TcKDJvAM)56kAO!l~}D}4a80+ z_ASNgiG6aS*7qL8YKZj``>A3T#QsREL$NYq+kxRnyh!NpBIVbQ*XhnWx<84tk(Hg_ zgN^pO@wHU^4h{RB+Sq+c_C2)ock6Lpek8gz7f|f&^DPTL$wnXZ{MhLO_b|@BDcF=k z_kzKXGO>Z4{CaK;ZewVRE%ms|8dURoWLLC3D6todxM=R^FF+yO<7swf?T%%Y4cdBN zmaNDr(&`hA1F=nmO#KE>uYO~N?d7F>w-iL!LX0{+y|F~Z*Y9EZiJLHpK$QE{5Lh~U69}j#0%KnNDF*7-G zmefP94JOTK9^Eq#4q$bKIyt)vJ}S1uHh$xNOlUu*++F^j1d%eaGC?wKc(b2Oz~-25 zVQW^{xOUY9FS}|cx8%L)xeJS2UdyQaCuMsckX<$3T*R~UE4$5!!? z*TocR_GyA!poVZ$J!>$u4Jj+S3zMS>i#V?OTJqlTtQ+p?+-%SH#nm^~`rn8;`CTbx z%O1YQ1m>P77kVYOk?OHL>+m3Nh-0HYci~Yt>AS|^EUQyDq_v)snt3kY zE<1`!2MpZcj~p*e96JY?&35)kJ!^Oo%m$y@g}CvS{6^gDu{G~Ff>pA9Elgu)3*CC z8g|Anqxm_I+{CX1n+v@<%n8|ZTKnqYHoq6uXD@Yyd(UVMcSJJ`-qOs5cc_4l4zkbH z+Wc1~84m7m-g(3hqN&I}m9f&h86T;(mX6uhRXfAN`RtZIq0vRcjr*H-9kCms^D6c@ zJGu9l@UOXXKZYRqq$Oj+G<6_$y|71iw2itOhE zYDiqLQIqL^DcIlh*D|u&hg$qc^bA`?ABiNeTC(d{iU!fKN8FtKmUWtCqU`H{}w)wtDIj(5$Po&p5g*q3{8837`7&KOJ zmfQhRXHUKe>MEP9nF&-Te}m}2BInqf*X*8(i}I3e!8-SSXH)FMu(x{KxIyqB*BA(AVqB(yK*t_r zV*(*fHM&{tu>J6z^(Lle*dcKHc-SikH`?Uh+pO63eJ8*}Ime*1be82acOCVQ8!k?J`6 zmoJw7jP+f=o!=ME@55v>c!f3MG89E~cfKMt2H9s$<}tU&vahvkT5)D^S&?g39p#!< zg1D?^0_=tta30GEnM4K+@ZGT;F|m2&x>5!Jqd9ibE|R+nY*PylFyH2HvEK*0MIsk& z?95r4^d(%c?r^Ygq5ZFgSPJCWd40J>f4aCO=@iMDiyi25?JmvQVZV=L$D)JSr5lUY zHbxL*?~cXp9skUD80~*3w8ykJxuwzV{;=l5y)gTZxe$X3v>xP4s1Wr>0q%R#}Br zTpny#T2xn4Qo5=t)i5#BOyqOrEL>SsTvF-+7G8K!j{jna6j_jwca2qNiIz1{%J6}z z7ABR+Oe?j{@}BRtQj4wBaw|1xr8Zcppo^^35-YXTN?m28R)DAo;=c~6EUa?;gQR8t zbFA|6MT>&@5Q0u>v3!)vM^HW*C0l*n1Be5^X&`V!GpvlskqPJg~TPPxPeOuJLqgv8##)ZsjpLApQ)K)vrJl# zVm^hu93<(KeTx?26rJV34GL>gt)s*@Xg`>d|L*LnB?Sdh(Au*2>z#o2sph|K00&E5kedb>YIR7F~4JaNO(7h@T;zDKX8EntEMnMd7OD*WFxR zTwk{Qy3Cr|lA`ju^6IMP*Hz$Z0K;fdR9;$MQp+OnzsTKGQY#kHpDNI;|*eBugWp8Op2bkt|1s^FGI%CHyb1_3>8vgsN(9Rmsg2vgkg?PpkGB3rs0xlfJ~55i^$YX zm^J||z{v>3)H)2m^|e|busC(+lUmjcLsM(0Ry<)E=0~@EYB8De3Df4x9L$uH34)m& z%_1R7#rz@VfXQ%CU<7TLFfD8P%xDI&Z=n6s;mlGOBU3lC870{J8nXP;XZjR2C_Ej4 zW_Y9B(3d$I!M5w96TgK2zr0-iBLuS%>DYsg?^;^gzDbDfx)I(c|>+=y$+V`K2CblmbmnV9)z zpgU%bU?j^ksfllf^v)5CWZ6cexR+k*>zm<>b%O`m!RYdrPY;DynZTDfX_s#armD3RbQxshy@KHx*U{OT^6Q%6@Zs zeVMngc9oZGb*a}k%^O`GcqNUb%#08(!~aw}G%ri2bE-9Yns-(CO(k_&qR#2TO5=ry z6_>9nulLqhdkbr7N(yUTVwiYKT?Jp@ty&4c%j?tX6fG%cmC}5;EUrZpGQrS0U))a1 zNOPi4R2{_hS?n#ZifInYm(GQcSL<&w8Z2D|t7~H!Cwr%QvnCHK*QevGlqfZ>@}`#} zlP+jg`gsQb%P^U*ic?MC~~s=DJ-hTs!YPSvIOqos<`Ba z1&}pVVf8>-hg{kCp^RN~RH&%1q9|BVC=py)f@+npUhEK=vt$IxnjUAQ0fjJSP1la& z*zq3Ju|~hiGPk8_l{Gz{o%SxJpeMaBbC!-LL;9+kfpUyyV~(72-ppBp%xE-QZoEWk zc4j;)H4@5L%^lfFC}Wio*G#pPiWWIHj$@|CxsF(7+)0Yw>s^n=!6(arLG{C6V~nCo zh}AF~XSR#WIV2WmaVoCzq)d(Cn$ZoVocP4GQ#q_7U2)8u4Y!6~Iog3TYHE}b$BKa& zQ6kglk{Ed~&z$X=$EW;5`+czHlY(vkQxhHLE6qn4F4BFh5Q9 z))odSVw!duUc(&Gm?&dvoE9&>v~tCFVp^Q5z>6SER4a~|(Q=!`yIM4hT`gZ)oXe#~ z!Z-!SvocC9t9VzQR%oy?dD`NsZF=NE*FO0Fuh-bzUm2u3bj&x}=z!;;cBVIINqDpbB zSfJY~&gF0}t)t`}9x5~JfN@HTXT;K6Mk5X>8L=T{#KO{Ih2b=QBg&vroJNFEDC5L_#5OV2J@ri;u}ugQ)rw=r5+}ONMjR8Sy2gYN8;;M_aO8YwH&iq#<>U+KldU`#B12{PCZn{1a6|n+HujW0%tTLu---w-88OKB4h@DrM zs8$>^t%q--+f4eX(^8$A8Jf9!?})>&FSZ~XUO{IVjy^E(dE*$dG%$|mBM!s9*f1PN zhfOQZr4z@9h0!R(TT)wFjb~W@(aX8@lY8qye<6S*o`O|-D}zP)^s=&~s=m%F|DsLOzos_Nh>%@B0wz#qYpVaV+*AMPR6bzbx6&Ua9P`kWBYUF*Ejzq`hy@W-zrr&SMjsTo85@b#Zc)eMu$%ozH}OuQIFcb~b;FIWBGr^Z~^wsqB94p(OV>M0AaiI2#d$Q%*OXKmD zqZe;^dGQ`4CxCmBEo%-=>NxtO^#^7F$=;rnF@j-%?QwCb+U-WjUTw z)mlvv{B}rR32j#GxFI=9@vVIexEFY7ZApoor{f&o+^?uEl9UfA{c2jNq~;)1S5glS zU+otlTY&o7qRJXc1(+%hYHBf3H`kWei=lZX6j;YtClpkc6_hlT6b0)`3d%|f#m&}) z()t4H+X**Y500uTX{ax_8DC(q_Ku1^P_zC#N**s2SVu-hzuH!SZ_HT_B~})eS6N#U z%j*jC0ak(a-$^SA>q-jhs|$+pGYHhh`gxK$6HrKNbCN!cIbNQ{71Y-jR@LEwSEcoj zgc|Gpgp!6DJcE)5*II|P+>+XQ>%SBA+kn>36Dvz9E30oRv9>0n?$+~(h4t0t)_aNN z_0@&e$B98X+?JGR^y1RY(jO)!Sshyw!1r%WNI>hbdV#dzXVUoWRQ!4Q?D&m*_Uu;V z1^H}$5qhJv@E<1OTSL~yB!GL=_$B%5>{8=DDDuYy1axuJu}ul>iJb}k3BI0DZ3#UI zO{2R;;ViLjRR76swLJ;h?Fmf@J+SBicUtoMOn$$~ z@1&jlUy~EOM#3=iFT_g-$@H5^>4#lUQYS$wD|AE4{wEA zZ}K~7Cx4G*#>>gyqba5}e)xs2a1WaNmPtGL>wwG4$?r~oR{bAAK6m{)k(T=JpE|hz zHeoj%(f-hs@1&jb7t0A=PWkS%_}_)SW`x7=r0vH^3nuYfAt!jrL9U-WE%{~hP~lE7 z`JJ?2lD|z(@REb%cc&$P=aui&*DW`qFq*GQfEkD2(J*RyxH|dV+$;*$i zg?IXIqe(mSgY+BWJ66*EK9lZ(kjOslq)mHz+@ziPV4K66c)w)Q&Uo{>N!OH6?;VqF zH|h6Hx*wyzl=q2Ax8e8Xl0E?+;$MFu(_b{{4r70|Nv|j-KgFb-_BPX`z1UU&r`AO# z?OVn46^^~RzA}zUdCqvh(xjdKccV!=fcKV0yq|N+uzezju&rgu%KRAQeQ$x~N zN(|z$kQkJHZAcpbpY9<3A4Ad~4oQD9BrR)7Li9)4$E|ob;e8w4x8vQ6_ZqxIc;A6H zUfJKo$LHC4t%5k~W?js>SGondN-no}3|h_-IJ)pHz(QNst8&7>*w$OFb6t)}+Pw&t z^pKUZK)T?S6K6pz=dtA~Q@ZMnopQOW>7ZHWn}n`f&ABXHtI7MQVRv`u=GWmDMCX>_$32y|oXh*Pb1l6H z686j@E3QT6xhsR^6~%Su#w@EfesQj`x%rE$Q&(G5r^Q8s_@9&*Ge)6$p<AMT(FB literal 45036 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 diff --git a/ft_printf.c b/ft_printf.c index 8f6de92..a39a1bf 100644 --- a/ft_printf.c +++ b/ft_printf.c @@ -1,167 +1,6 @@ #include "ft_printf.h" -/* -** -function that modify the string 'print' according to the precision flag : -** if length(s) < precision, add x '0' bfr nbr, but after '-' if negative -*/ - -char *precision_int(char *print, int precision) -{ - int i; - char *tmp; - - i = ft_strlen(print); - if (print[0] == '-') - precision++; - if (precision > i) - { - if (!(tmp = (char *)malloc(sizeof(char) * (precision + 1)))) - return (NULL); - tmp[precision] = '\0'; - if (print[0] == '-') - tmp[0] = '-'; - while (i) - tmp[--precision] = print[--i]; - if (print[0] == '-') - precision++; - while (precision) - tmp[--precision] = '0'; - if (print[0] == '-') - tmp[0] = '-'; - free(print); - print = tmp; - } - return (print); -} - -/* -** -it first verify if there is a precision point, and if so, it execute a -** serie of action listed below, otherwise return print as it is -** ACTIONS : -** -look for a '.' -** -if followed by numbers, extract an int version of those numbers -** -if the '.' is alone, gives value '0' to the int -** -then removes the '.' and the numbers from the %string -** -if flag '0' is present in %string, removes it (actually turn each occurence -** in a '.') -** -and transform 'print' according to the precision : -** -1 if type is s: if length(s) > precision, removes end of 'print' to print -** only x chars, with x = precision -** -2 if type is "diouxX": call fonction 'precision_int' that return : -** if length(s) < precision, add x '0' bfr nbr, but after '-' if negative -** -3 if type is "aAeEfF": not covered -** -4 si type is "gG": not covered -** -5 else: error -*/ - -char *ft_precision(char *s, char *print, char *type) -{ - char *tmp; - int precision; - int i; - - if ((tmp = ft_strchr(s, '.'))) - { - precision = ft_atoi(tmp + 1); - *tmp = '\0'; - while (ft_strchr("#- +'0", *(++s))) - if (*s == '0') - *s = '.'; - i = 0; - if (ft_strchr(type, 's')) - { - while (i < precision && print[i]) - i++; - if (print[i]) - print[i] = '\0'; - } - if (ft_strchrset(type, "diouxX")) - print = precision_int(print, precision); - } - return (print); -} - -/* -** -** if i = flag_w(s) | -width is caculated -** if flag_-(&s) | -if flag '-', rm '-' and width from s -** print = ft_rpadd() | -put extra width as ' ' to right, -** else if flag_0(&s) | -if flag '0', rm '0' and width from s -** print = ft_lpadd() | -put extra width as '0' to left -** else | -if just width -** print = ft_lpadd() | put extra width as ' ' to left -*/ - -char *ft_width(char *s, char *print) -{ - char *tmp; - int i; ft_putstr("[");ft_putstr(s);ft_putstr("|"); - - tmp = s; - while (*tmp != '\0' && ft_strchr("%#- +'0.", *tmp)) - tmp++; - i = ft_atoi(tmp); ft_putnbr(i);ft_putstr("|"); - tmp[0] = '\0'; ft_putstr(s);ft_putstr("]"); - if (i > ft_strlen(print)) - { - if (!(tmp = (char *)malloc(sizeof(char) * (i + 1)))) - return (NULL); - tmp[i] = '\0'; - if (ft_strchr(s, '-')) - { - while (*print) - { - *tmp = *print; - tmp++; - print++; - i--; - } - while (i) - { - *tmp = ' '; - tmp++; - i--; - } - } - else if (ft_strchr(s, '0')) - { - i -= ft_strlen(print); - while (i) - { - *tmp = '0'; - tmp++; - i--; - } - while (*print) - { - *tmp = *print; - tmp++; - print++; - } - } - else - { - i -= ft_strlen(print); - while (i) - { - *tmp = ' '; - tmp++; - i--; - } - while (*print) - { - *tmp = *print; - tmp++; - print++; - } - } -// ft_putstr(tmp); - print = tmp; - } - return (print); -} - /* ** FT_FLAG_TRANSFORM : ** if i = flag_p(&s) | -precision is calculated before width, @@ -192,18 +31,9 @@ char *ft_width(char *s, char *print) */ char *ft_flag_transform(char *s, char *print, char *type) -{ ft_putstr("[");ft_putstr(s);ft_putstr("]"); +{ print = ft_precision(s, print, type); print = ft_width(s, print); -// if ((i = flag_w(s))) -// { -// if (flag_-(&s)) -// print = ft_rpadd(i, print); -// else if (flag_0(&s)) -// print = ft_lpadd(i, print, '0'); -// else -// print = ft_lpadd(i, print, ' '); -// } // if (flag_+(s)) // // else if (flag_space(s)) // diff --git a/ft_printf.h b/ft_printf.h index d7c9a3c..a377388 100644 --- a/ft_printf.h +++ b/ft_printf.h @@ -7,14 +7,29 @@ # include +// ft_printf.c +char *ft_flag_transform(char *s, char *print, char *type); int ft_printf(char *string, ...); +// ft_next_word.c int width_precision(char *s); int word_length(char *s); char *next_word(char **s); -char *ft_convert(va_list ap, char *type); + +// aside.c char *specifier(char *s); int ft_put_word(char *s); int ft_expand_star(int nbr, char **string); +// ft_convert.c +char *conv_i(char c, long int i); +char *conv_u(char c, unsigned long int i); +char *ft_convert(va_list ap, char *type); + +// ft_width_n_precision.c +char *precision_int(char *print, int precision); +char *ft_precision(char *s, char *print, char *type); +char *width_flags(char *print, char *tmp, char *s, int width); +char *ft_width(char *s, char *print); + #endif diff --git a/main.c b/main.c index c768725..d2f5dee 100644 --- a/main.c +++ b/main.c @@ -86,6 +86,12 @@ int main(int ac, char **av) if (ac == 2 && !strcmp(av[1], "test")) { + +//#define PRINT(string, args...) printf("(%s, %s)\n", #string, #args); \ +// printf("'" string "'\n", args); \ +// ft_printf("'" string "'\n", args); +// PRINT("%*i", 5, 123) + printf("sdf\n"); ft_printf("sdf\n\n"); printf("'%i'\n", 23); @@ -109,46 +115,48 @@ int main(int ac, char **av) ft_printf("'%lX'\n\n", 9223372036854775807); printf("'%p'\n", "dfgdf"); ft_printf("'%p'\n\n", "dfgdf"); - printf("'%.i'\n", 123); - ft_printf("'%.i'\n\n", 123); - printf("'%.2i'\n", 123); - ft_printf("'%.2i'\n\n", 123); + printf("'%.i'\n", 121); + ft_printf("'%.i'\n\n", 121); + printf("'%.2i'\n", 122); + ft_printf("'%.2i'\n\n", 122); printf("'%.25i'\n", 123); ft_printf("'%.25i'\n\n", 123); - printf("'%0.6i'\n", 123); - ft_printf("'%0.6i'\n\n", 123); - printf("'%- 032.6i'\n", 123); - ft_printf("'%- 032.6i'\n\n", 123); - printf("'%0-0 32.6i'\n", 123); - ft_printf("'%0-0 32.6i'\n\n", 123); - printf("'%0-0.6i'\n", 123); - ft_printf("'%0-0.6i'\n\n", 123); + printf("'%0.6i'\n", 124); + ft_printf("'%0.6i'\n\n", 124); + printf("'%-032.6i'\n", 125); + ft_printf("'%-032.6i'\n\n", 125); + printf("'%0-032.6i'\n", 126); + ft_printf("'%0-032.6i'\n\n", 126); + printf("'%0-0.6i'\n", 127); + ft_printf("'%0-0.6i'\n\n", 127); printf("'%s'\n", "string"); ft_printf("'%s'\n\n", "string"); - printf("'%.7s'\n", "string"); - ft_printf("'%.7s'\n\n", "string"); - printf("'%.2s'\n", "string"); - ft_printf("'%.2s'\n\n", "string"); - printf("'%.0s'\n", "string"); - ft_printf("'%.0s'\n\n", "string"); - printf("'%.s'\n", "string"); - ft_printf("'%.s'\n\n", "string"); + printf("'%.7s'\n", "strong"); + ft_printf("'%.7s'\n\n", "strong"); + printf("'%.2s'\n", "strung"); + ft_printf("'%.2s'\n\n", "strung"); + printf("'%.0s'\n", "strang"); + ft_printf("'%.0s'\n\n", "strang"); + printf("'%.s'\n", "streng"); + ft_printf("'%.s'\n\n", "streng"); printf("'%.7i'\n", -123456); ft_printf("'%.7i'\n\n", -123456); - printf("'%2i'\n", -123); - ft_printf("'%2i'\n\n", -123); - printf("'%0i'\n", -123); - ft_printf("'%0i'\n\n", -123); - printf("'%10i'\n", -123); - ft_printf("'%10i'\n\n", -123); - printf("'%*i'\n", 0,-123); - ft_printf("'%*i'\n\n", 0,-123); - printf("'%0s'\n", "string"); - ft_printf("'%0s'\n\n", "string"); - printf("'%10s'\n", "string"); - ft_printf("'%10s'\n\n", "string"); - printf("'%010s'\n", "string"); - ft_printf("'%010s'\n\n", "string"); + printf("'%2i'\n", -128); + ft_printf("'%2i'\n\n", -128); + printf("'%0i'\n", -129); + ft_printf("'%0i'\n\n", -129); + printf("'%10i'\n", -130); + ft_printf("'%10i'\n\n", -130); + printf("'%*i'\n", 0,-131); + ft_printf("'%*i'\n\n", 0,-131); + printf("'%0s'\n", "stryng"); + ft_printf("'%0s'\n\n", "stryng"); + printf("'%10s'\n", "strxng"); + ft_printf("'%10s'\n\n", "strxng"); + printf("'%010s'\n", "strzng"); + ft_printf("'%010s'\n\n", "strzng"); + printf("'%010s'" "__TEST__\n", "strzng"); + ft_printf("'%010s'" "__TEST__\n\n", "strzng"); // #include // ft_printf("Hi file\n"); diff --git a/srcs/ft_width_n_precision.c b/srcs/ft_width_n_precision.c new file mode 100644 index 0000000..01873ef --- /dev/null +++ b/srcs/ft_width_n_precision.c @@ -0,0 +1,153 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_width_n_precision.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/02/25 14:48:55 by hulamy #+# #+# */ +/* Updated: 2020/02/25 15:12:32 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ft_printf.h" + +/* +** -function that modify the string 'print' according to the precision flag : +** if length(s) < precision, add x '0' bfr nbr, but after '-' if negative +*/ + +char *precision_int(char *print, int precision) +{ + int i; + char *tmp; + + i = ft_strlen(print); + if (print[0] == '-') + precision++; + if (precision > i) + { + if (!(tmp = (char *)malloc(sizeof(char) * (precision + 1)))) + return (NULL); + tmp[precision] = '\0'; + if (print[0] == '-') + tmp[0] = '-'; + while (i) + tmp[--precision] = print[--i]; + if (print[0] == '-') + precision++; + while (precision) + tmp[--precision] = '0'; + if (print[0] == '-') + tmp[0] = '-'; + free(print); + print = tmp; + } + return (print); +} + +/* +** -it first verify if there is a precision point, and if so, it execute a +** serie of action listed below, otherwise return print as it is +** ACTIONS : +** -look for a '.' +** -if followed by numbers, extract an int version of those numbers +** -if the '.' is alone, gives value '0' to the int +** -then removes the '.' and the numbers from the %string +** -if flag '0' is present in %string, removes it (actually turn each occurence +** in a '.') +** -and transform 'print' according to the precision : +** -1 if type is s: if length(s) > precision, removes end of 'print' to print +** only x chars, with x = precision +** -2 if type is "diouxX": call fonction 'precision_int' that return : +** if length(s) < precision, add x '0' bfr nbr, but after '-' if negative +** -3 if type is "aAeEfF": not covered +** -4 si type is "gG": not covered +** -5 else: error +*/ + +char *ft_precision(char *s, char *print, char *type) +{ + char *tmp; + int precision; + int i; + + if ((tmp = ft_strchr(s, '.'))) + { + precision = ft_atoi(tmp + 1); + *tmp = '\0'; + while (ft_strchr("#- +'0", *(++s))) + if (*s == '0') + *s = '.'; + i = 0; + if (ft_strchr(type, 's')) + { + while (i < precision && print[i]) + i++; + if (print[i]) + print[i] = '\0'; + } + if (ft_strchrset(type, "diouxX")) + print = precision_int(print, precision); + } + return (print); +} + +/* +** -if flag '-' is present, put extra width as ' ' to right of 'print' +** -if flag '0' is present, put extra width as '0' to left of 'print' +** -else, put extra width as ' ' to left of 'print' +*/ + +char *width_flags(char *print, char *tmp, char *s, int width) +{ + char c; + int i; + int j; + + i = 0; + j = 0; + if (ft_strchr(s, '-')) + { + while (print[j]) + tmp[i++] = print[j++]; + while (i < width) + tmp[i++] = ' '; + } + else + { + c = (ft_strchr(s, '0')) ? '0' : ' ' ; + while (i < (width - ft_strlen(print))) + tmp[i++] = c; + while (print[j]) + tmp[i++] = print[j++]; + } + free(print); + return (tmp); +} + +/* +** -if there is a minimal width field, calculate it and add it to print +** according to the flags '-' and '0' if present +*/ + +char *ft_width(char *s, char *print) +{ + char *tmp; + int width; + + tmp = s; + while (*tmp != '\0' && ft_strchr("%#- +'0.", *tmp)) + tmp++; + width = ft_atoi(tmp); + tmp[0] = '\0'; + if (width > ft_strlen(print)) + { + if (!(tmp = (char *)malloc(sizeof(char) * (width + 1)))) + return (NULL); + tmp[width] = '\0'; + print = width_flags(print, tmp, s, width); + } + return (print); +} +