From 3c9a1cc633ff71c8bd52744b25320bf701fa19fa Mon Sep 17 00:00:00 2001 From: matanki-saito Date: Sat, 9 Jun 2018 12:35:09 +0900 Subject: [PATCH] FR --- ConsoleApplication3.exe | Bin 55808 -> 58880 bytes ConsoleApplication3/ConsoleApplication3.cpp | 459 ++++++++++++++------ README.md | 14 +- 3 files changed, 344 insertions(+), 129 deletions(-) diff --git a/ConsoleApplication3.exe b/ConsoleApplication3.exe index ddca92481bb86ddf79df87bc30c9febf66fc9e16..c17e73faf993f3392fd8bab76ff804905908102f 100644 GIT binary patch delta 21917 zcmeIae_T}6_BVcJ9B@>WQ2|jwKnH)44a^T_n4c&kn4*IsVE#Z;35k?+Q2aUQfH@t< z(5+o7Z&_Jc*NVan(_4cWppltzjfz`T-tHmkhDC}+&hy@9W?-=Ten0p1Jg?XD&vSUK zv-e(mt+m%)d+oLN+2;(UC;F8(_N&kdJD7b2vn_FC!Ivw2AQ?7$B^XccS zLiqHHRgrx9*(w3ja|c6KMj#zo@WsmYNLj^|RipVddL`v!760V<=dE6mPh~US%VK7j z*@8f3%8b#AJSY>xv@$}$Ai)rZIR=!$gN}F!sRZDnWs@f_WSBr&#N|sF8JQ=TI^^7^ z4AVjJ5&_dH*cUTAC|baj4PcnkdWI?57c)An0~r&g@Lev3IRVO1!=_qSl~{pQynq{R z@)#K?9HR;wkE{zY5pW#fcbOn->dNKT<-i@Ls?fGYfF`n37&U+qFbs5Mn#nGdpb}sD zjJzrwHH0d~Ksjb0(w3?#!pVaD{Ui%B@-xqxm{Wx}Obi!2l40^CCy~oJz%UDI8*ydi z@1gajw4R~$(X?L8*XK{B`8YmLY3a3qZMV1Uo)LGDNuucNeft=O{nwIOr@6tB?GEK! zCdPhFT<)@lRZ~54mo8${yX7BntG#sjv(cE-+?8!{hwiDN#6di9KYwD~K5|4fT2MpI zh@z$(=BYwX1%N_pZV5JDcNcfLLl5z25nBiOxl83AEaI+IkidWk!DS7I4f$p-<5gr7 zYwmW-+@akr@=Ach_SQ!`ZViuSnBYg>g23Q1>KQw3ZG+it3#|9-sCo6a+ikx!KKS7* zpn^~Cs2px$+|u$xNZx(~w0Z2=+PC-kGEew2hkco+eHkdg6YscH2TRzdTF32Z+b*y% zjCGj3EhM=7ChFg|`>3DtWp?+lwSX=%?ZX==2baBw`;MCSFWv4P zwU^ZYWpa^gPnlgd_zf0K9ui%#zRcr&T1+Wk> z6mTEl0l+9g96$-M0>%LhfKB^#!zxI;Ah*X7{i886Z19FYk*F`Z-7AHf&t-x7{FwJ9H0YGdb2mB z`8j}Wz%syUz&gMdKpDUZcnt6~;27X_0OffbP#bC*%JfWn$$a)x$C3`RwSSV0pM7G7 zx!Vy~?kWz-UCK}QMKl!1UGf_ab7#3bxa@Nbb?{pe)7keq^RI4qp0?H+gz1>)h$w2K zfzN4oW4fKXEr#1@Yc>Y%sAXCaPu_n+Qqv}Oq<58_FYck=N@bm_(NkyNXp;n=EImGg z_wJ)e-WV2qver{YYZiy|HJM0mpA9~F*3J#JhT1uSRg7ElkkZ;Ar8PGp|5`s}5kNqa z=MX*g$ot&f-`s9?N%te^U3rd_^+J1{kkbK$+V!lta|XMl!-T$R!|H=~#=6~Zxr;_P zbXp1}#*ZL-#V-dMkTs1Uh5>Jo_5pgtqsaqD4L!;mOoCV!;+FHlXu-gEo2k;otb7I? zVl4Lde8f}?;d>4i z%mfcLA8~A}tTUfr9NVfL+s@RPUC5ntY-^}9H_|{@XYLj{&0_YVbHO1CcU!_oM{${} zSme-N+d%dW3il0ZKa6L9vqW$$J;Q0fWO1e+;$8^?`L?TKl!K=O$C_JB7TS$t=oM?e ziXd+960eH@viK5bLo~T2sW%@$0A;F=jDj1n+YYeBN6K$lBiQs~)qi{W<;hbn-fa8m z7xqF;TU5Ub8Cl#D!B`BP>0)l!U^qZMo8Gz7fgBboehJ~Qgp5Z_qNXN=LF0w@1d{_n zlLZ~*-JmhT<2B^Vph)4~UF3F9n7~Cs2S*9Bb`jO!sp5Y_307I@B87t^`_pK7s^KiD z7_1UrI!hV`r{X5i%8MyFGR}_uHUQq@r%H|d26ZBd?hRJ3-s6Ux7$|2=9Y>~9LCdQc}4Y#_43GC^@Q`m5 zWw}GILKk>Yo?Xop$G%Hj2h!6ak(YU~AF~b3ITv)Z7rBRj!Cci-%5vBC2upr9RV=|n zn&tk)eoo|54^y1m1hax}h$TO~7IXtWbnfDAp0Y1J-Q?_Om%utbbFw>&Ef#0X-Q{8D zi-$W?1?V@wu@TrkW+TaxkV%LXmVCNLbC!1^-dPIzVHR65+@bAIGQXrA<5J#9iO3qs zNO=cE%AgF8w}5n(cicqc+Zd%GScK+QQ-gThTDOy&mP8A8*N}fo#@*%H0b#Oq=gL1= z%8lCTQN=f0{+%E}k{IDXcaXa!a$&oRtdxvX{12KBLtLlrdpB_zJN(+W^=Y5qfpwMo zE5L6QBj#tZHTC8$2w}3F3%U^8>dhUrBv~O^RC6#c|$8} z?vlINNY6MIk9rs8g;OoFftJ0=rFy8_W(pamfd0YiOn%#M)EOBV*kNu*KpP0pM1k$P zHm^Vk3-`FGqZmy?DD5SLdSw2zjn|;-Yj=- zAMRo2-tsb^0yCT50axXuo!%}E&&uD5COG1yaZ(y{H@wQ#)3E~}K);H-B=?cS!@^hh zbYzrwPI;*ky;PGR2;J(UeZ=e&If^^|y5%Jv=q09W2sM?jYu!Cv6T3*{@DU>^J$C^M zF6MFD8BnvuopQHxj(}K(NBY(Y-mW9O>Qs7^-tOVK_CS`qxYL;>%ByF7IPFa9S7#Ew z%O!i7hgT2g&5h=JtY?*E=TjM+&MRROyRDr~=dw91<`Lf|c*u~f{D#^zP>t|VW%K-K z%A0n3(+)mG2kGF@rv-kHeE#H{9%R(e#N^TKcX;0;Tki0_^mgZhPVO5@$NM1ft5I3` z994Jm7P5cn_yJzOxoZol89I6%KL{{?uhUrygotU>>0nWZxr-m}J}%d?*<TsPsqr$kz)L|p%&_=i;UOGAp*z_*yU4yUR;ayw3G=$Rpv3D)pOb!l(x4^YHb{oeoxXPxtW^)FF#Xf@%3;a?-I)`r%{74=MiASTCwnUS^ zhm04_EFu32iAmVlyQ9j=_6G0XtrUBU4K6=#onUWpcLdiYM;Ax3iKKMHXi0s4bl(?} z*trrC7Zz>vENxzQK{P9H=fBY_-rg?8HtqLK)Huu?&Kyxa705W2v}4)uhB|hR#4#&~ z6}T-T=PZhZbs26r7FrY?{kW0EV3;mq$CQ6=6?M2rOpj)_b^NiyHb>O&Hc9_la#rNq ztV7lB|Nm9RZob{QMO05c5!=O%0)bakEJ1J$8b?xtoO63roex439sN1mLMu2@MeG7v zNqwgdQ9aL|#1v!Ey%xfrbruQpSh3wD%qu@%{PUE$kGkB&9Zu1-49h$`4J3hut-WKH zhYpDSIxyn(p3U*^tW3s+O(jRd5>iXxWKNN(rd6n?CoJm{Zq!6s1Kpt%&n9k;sd_)ZyT;nD(azwVRy9i3v(fy3ake(r*)vLyicKYDovnA;0yG=is zj|T$wdY;|DuuH_e9U|B|r$rbXg{>7Xe|wz$sEgG)MKc`bh2Sc87mE_^bzNJOUkW;B zc@c00jDf_M6dwXYZ&-s(Cv9}5`o#w+-qcE>VsUm0kVRvzmyI5@DlKY{x z^uxZ!h45&$+2h3UVegC^*muf>v+0$NC``s+)?7WMrlw11$>8j83(}e!GG2qJK*vGi z*?W3M;*`Ix5zv+VWkgIQ9M#(}8<}&%#IS=G1Lau4xkGbYk(7VK6R<l zmZ1+=?$DzyQZ#a8BARiUuYw5%Wx!P5PXq;V*hSkHJ7$SllgKeW2rP~$cj#eCp5Dl9 zBd(DNHtO;Jd(+?tPmlRo=&|^U-fm|6QLMX#puw7hoEt+N#8#1&)u7*9QXk zp<|=2KGj4K^{JL$muwVsxB8RrQKLtB)GX~))7~EB9gU>X(Sjjl(dc+#QytkmI+?B& zqaPA}vW-lSC=tYyGZ6~}pOc3o#}HYhNw5_;g&-C8QN$G)81jz4NN=F8`YiH$fmm{m zj>t+E`7lZenE}!1(>e%0gBw}oamAu>_HSDq zGrF%0vTy+&9NWQ;VCRaaT*#P*9Y&*zY>s)TSI$o{rM-nMW0RE-*W)9x&a`pbhK-1W z%lK9*)_7V;8)yHj)sfuI*3dX;;Y!H$v9chp&cx(7W~8}8n_T3saT5lVXYF zSU72e@Y;Rkqe&|TCh3866rj$&_@A!byqjyot2oFVSJ-tRTd z<*8W^H0kby-qBrg_kO{9yt$y@*lap>NO?Cr;@a) zLdiwdP=N!vog>ks0ufeMn$iW7rr73|xX6~oxx%LwlEV|CX?y=kTq1}hv(+k5Bm9Px zWJe7wh;S4IIW~&8x5;bjX~J`L|4A1|1NQjGBEe3Fv1S=gOHTuElJiJw4l(81dAJ%uW*Hl$xRq~ulH$iP|W zToZEv5N?5o0zL%<0#EBGO!2~{c_!vfqC)#b{ zO!26KXfBP!Oed&)b9%O5F&Uhq5T2+b(^FJHZB8i>9&nM)l$j_PaNg#s`q(^GfPyfU z)@xGfu6$8yG<PJL$gJ?8MgEj(Iw2Ehoe_+_)#!FVVt&8Rju21JIQDym3`tj`YpLl&g><&hRSBk$ zin&?BCLQ7CY6X8GQp@gMTb{5`TeeuH+Rni9a0VC2-eheO_l6+Pp;AFe7Ng5<7j_7_Kb_mp2xQQSxF;HXkMrflh< z_sEI-_-Kk{oV#gK{7!Dow|F+y?Bdz`2fwxJ@Ova+b<9xp3BTAyBN9nm{df51&#Na2 zo+e`o)Pg*cT@WLfMm806Orv|felFiu?`-eG=Cp3@*`9~ZOZH!SA2xsKeb~G-k8_Z} zJJzD@jLccPYc!pP*CK=8s-uBt zc;CSD!`d)-c3{yr!}5FWG2h;9p$7T2=yK=}m~`bg*y6@wB_9Il;`A{2`k@B}BZ+0* zjPUWOzaxCNBYY1gudXu*Hj^LLr4Fs`m27V}QNgL}kE4T~>n942gpsI%STfx@OmIKR zvc?FelM?HU-nd?8rOW2`R-E(J5Op!#dao%qdlpR0qM-RK<8$n~;^n=3cWeYpedUQ+Tp9UfL#(eHp2cO7{u`$XVu@ddnR5_{mF2)l(!4?HlOfIGR+5_==MIqVgK9co3^JC!9_oQaIyG+9{WBB`4y#0u!aKZJa_DSOzh zUbAL+AAZs{pGB_+Z8?Ygr7ch4zIJP>ID+TOcae9tj_fUbxiz_0-o$OW!sJNuNa<*D zbenMuG|1pehtri#gxzc32ZMYf*d7`Z{ifga@jZM^-u_S^&x<|oc7Bh$eXKC<0Qq$L z1VIB4*rM+KuMTLw4JLDKO9c;*S8Y3bbxkbI5SWOgG$-}n_-+LYIy)o84s+vf^BJf4%xU^`d(F&R!pkog_j6hz>dhP_s5f7wTy^Fqrj$Qj zJAZ8md%^jT;1NMGmegBQE@sSgrZ;i@H{!jL)7(U6?;JI>$^Ol6+*f$tccT{Xyq)Q1 z$i|)8-VuL$=OTDSnBCHgT4VR~h)3-Sy;eSN&l5aOWMzvL7*Jp2yYo4y1`qRpM7!fgqY@`dbW3M< ziNMoJ>R2^9S5*dw2M=(Oz7i1 z3TvT9VXZg{Yvqr^swD{Go}(~cqUR_qteTv;=8?HE z)ytrh@3hhT2!6FIgAPQ2z#UpvLuwuwDLha^S{@m%?Ypf0S7*3H&pv2dhGn^)31jFs zIt}^UYMNiVq;@{eVsR81roFvxSl0XuE*6stUL$uc%0+E<0peTM5FS5HYcXepyW%zcCk ze2=pb@7E;kU|Q`Ev*}_-n&_HP?s|?Q=)$EPj6wQwPaa;NEObs0{6xx~b25KI19nVd z$}CE7UCYi7qNpOEZZhuRTLf8h5IA zeSnm&MPLt*d2Fdg`|pZ?pUTfCYiq16SfXb- z26q9G--2+Gf2oFizCU_6%~s>a9fGih3+n^Aek4Q42*HbFJQ*+8Mbe2@0g*u%!-9caBihGDIb{!G*|)FifTH%nv`Q#HpOx*1)ZHMd z2Ob^{G!;OYIJhejnp zwQG5l)E%mWS?KpGG&FX*L)9q8(+u59A>%Z+gGlBglOCTs4{SF-a`2Pf^X9plF)<7V zrZztf#&n08z*LK;zkCKGi<f$t)`w@a2CO;**bliNd{Tw)q3T51pVobc<337iqNMcJ zm-H*Vo9{zP*S~X6(H+~u-(CFOc7{)?`Fl5i@8a);m>=%g#r$2t-;4Nr5PzS@-=+LL zg1^V{cNu@T@^>|V*YS4~e^24>rTl$1f49)jRot>) z%B$CmyU#5>DZWl@JGK#^2*1y+YifmmsvZhmTV4qSTd?x`9&nxqS5L?e-dR+noRSHOYZ>7G-UrtWFPW4}Axv zA4BQW+imt5QCq)FckoImujFI!&hu;5C&1USZnW|(CQS8gN;%Pw(rXd^4RhOq(q8G0 ztb|v9?KQBm_dtM+d!9-tp%VU$N0dH2#7pD0{H?v*_Z$Liv5%E|fN~zCoUeE|>C4#I zBQRo*4V%D_(!-EM87@(Vtvo}4gtcLcakcmW3mfuU*4$xl6$F=IUqhqrZM;2gd;F@~ z?Wqt3mkst*{6=5O#vbNJi#AE0#Cw`NfF>{FqqXX8+E7TJKC$VNwuUX}P&&pSr0wrp z+_qjn=>X#sl+n@zM!HvMZ0wPG6_wj)Wf`q}m#>7aFoJE(HYyNK5Z(5HFKcRhc88zc zs6QAfcMIj-;p1*>blTEe+PWy0Z%`XR8VXW=bhts3Df}N`O7}21(<|E=Ku^Iq2@LhQm>QV>8sRpj6KqnRN5ITO}Oz_67y8VpurTwTmfb-NqZ{d{xpcH zb*5i!%WdqD*<+(>2z&2)U*Aq6SDiyye?xeLYP3sY@b}PDTO8!+yO3ik{Q*k4s#E$mh!qN@3vpa=%+_UmQdcFhT1_aq9omvWCqE2I>Po( zXi`1#6O^Mo>cMNw?S6jV4nIHBmiCpuAlk#Dl<@>*{1&m?&*XP_B_(U6WbgXO{O6&~ z69k(fFq7JZcZYi@Pa#&!wmm#gPY0;4+(j!7(aN=`?5U#Ra9B@OrmrntFaGCCZFLX% z)Z~Az)OHf(Q-Pg7LQ;9vYezEhd#CNT{1%4U4%iDg3OEU<0|fnxVI~6%fO&v5fSrKH z0F{6`Knvgopo2eiVVL{A01e=ry z4KN!rmLe?#YzCA8azK|4JcoQIK!@^9Kp^rJz%xq$78EX_&q8)d}Z|V!osyHmRnb^T?0e+)RBav_iC2n_jgm7Da<6?X>Jj-oVknH z%p~J}FC)WU!{jncycETZmC0k&j1-?RIF3F^W8PAb;3f?uYU*pWklzXjL|y5=m=N0q6XRk{%#rgZ#@<^9m*eaHiT zD^kXZ-x(pLbRmtNbQw|^@DnFVmrk8L#kgq6*2Q;i*%p_ij~O^vjGt9fy1mf(8T_UR zFt8Mb(nle@f_!#NWpjPd>j?|iJg{c%#x>EaN>;2Y@;Crvfv3=R{V(4SMqxlE1JHUA z@V1A-R~Lk02te^6;B?4{;=)mnZ)A=SSNT&>Y8h&d`EgQxt5H4&XhOf~CF>w-j)&>}$tZd@SUde# z`vE7ykc0sI*(sfnHa><@r=d228VuJ;zr2-iB(M~yLwt5l1+u=2swKOltn({VIxE_t z?Ecpw;HaD?UZko6*#>}50Us$9fAtR5Ca_ZaP7kXNP8S0BBUTyk{#PehDZS)6HJoZU zvdjL2b?Y6hlIxi4z{xzUO~@Yq6V`@1SY=?P^cD|mG-g59pRk6|nc{a@z)I;0J*%^|h=9)*di|bq(V0YpWCiN{FUn2%{)~rCh6dD2 zu#MoIKc?9$-CqhX9j(bg#m~#r7??9Qu}E`c_~jOPerD_78XcJtUppe(^Mk6 z8{nI_l$u`DyN?3ze_7E6rLXX{rR@3xPTE$-9h{Vd(jND5+DtSSd8f3m4a%v$14lV1 zt^alHIK!AK@!Lzl8-VWtBVK2iS%BSuQ-CRNFw6=-Dc~Id2ar`E!U5i?Vx}=2$f!?X z3jwGG+yX?ui31lvDc~i*CBQYny!k2fzbo&zF5&a%Qx9ET6ZOK9C3A)3rOHJ%3-scD zTQ6O?nyP4#AY?!7!#%i$;$%>-6$_(>u7r`CWa!%MEpJ*$X&4v%r9N=0=`Zf3N{TvB z<8h;@GTDl}`=O<;JbhlKG-rA;NNmiRJCGFX>WiCAg`ERVjC87pc>%>W_NBX*;x6^U z%}l1araN#H+05f?K7linrvus2myj3O+6QN$yv)_UIG&E{gUjUU+WX>ox(?tLW7VI! z4wkYl$CA;B9OdkDRZWWFb%k^{m~HLvb2QK(f{8-H`v}WPN29W zpLv#ZFHTNzCxG+w1qH>?M~PPl^zf=E4*!rLo1xzyP4)IJyaVHciOZK^h>joePaSA) z?_0l~XFwdtr1baatzNlaieI_l!hdd9hGgox_3KthW$_fXOhT?yjol{`4IdjoM$$-D zc-gZv+jH4Oo<0#eNLFd0gp9hGx~Gh8;?;u!iLF4>>j$K?QSloH&q&82rFv65H4?@9 zdS~^q4~XEk`*BbIr|^S#wnT5FFgcL7VUV@Rp6 zN^km>mzr8fdc{+xxWe}_4Mh{szN`PX-ac-<;wetPpZFRHYxSaOr)GcR8O*{@$e2^prXN7jcTwR~hoiumd`P72 z2l|$SQTFNB+}n!jO%Iy3B5L-uB5mednT?|F^0l%UxLzz4vM2kNzj~s#m5OGcQ}p*X zvM(kAGfc$CBOH#psq|)VO3NQSXJT3b^zzj=`qh7W%*1>TpqKR(Pa5>8N9k~+djJyD z(XBtdz{5$KTf#{ndlx_ZxTcxll*l ztjMbzvW(=fHWN*mV?fd<>bow}uMiID5;21yL>{ciVT%jLM_!Z_UaEJVG zqN{K_;1pD@_nHh`>8ct;TtC8lfb4Q%DEx2*z)3-uZR zYR`zOmNljc_BV`F)|hywnrckWvTiC`mAiUP-dYo$D*f;{QOe~{luYZbEBQJyr(ps< zQrOTi4)-S-=m!f|8lvb+Cwfs?xpUU8T$Q_SRZ$Pmopr0$to;A1zi;`92fWOX>93DR z_Ub%et*?$)&yR#Ad(TJV{_6R0ee{{PcC9sc4V3b6^_6Lqu2@@GxZJwRl$-6N@X4k9 z$y>f+mDNN~)e3tg_}Ayopai-1EnnYL%?LYd$h-^VG=65Grd+Xnz4ecp=sB|SR)YK0 z3+PJK#S2^d2_#kbTzp$#qpO5a)?YSMHdZ!47BADwvSqtvFU#JPeJ2|fKQ{i^_|M~$ z6VeiXOAyHq$q&nq$dAg8$&bsMaV!h)or)icm$Xq^gOkIF(GLP^ncq zl}VMNN>d$FjZBPAlqV)79!)%!n5oWDr)gGd)@xqSys1e^DoJ`WNv~a^CED+_Lv%BA z2Xyc0`st(fOZ6M{cKv?+3;N&mqYP6G>4y6Z4;Wa(LBrn--x&Bjqwg~n3j+r}@A zOf-T%w&2V_*?qEyWqV{tWS`5J`1$c`G;d>H{&G^>6FUsDEAEk&^Y*hSB@w(yxWTIq|8)Q;A%n3d3_Q>2=*HU5)O%PN%=DPd2n0!i=%T9OGK!ej{VSLJe^XWQ%Mv zyUZbb%Ij2>@)PoE`5FA{qjT~Gd87Q2yy(Fk z)crL3G!2?*NqdrFv=-gNx|ehpbkX|tdXZtMVTNIWfmw$25shw;mCFt$yr}3_3RRO; zwtH2Ds(q@DRGcaxF(&bz#8K+gnvqE{Nz;;EOd6~`q&=$rLi>zvzy4$W7{fh=7Y)md z?@@CXc`Pwrrj)7VX8D`S_mualW+i4O9su7y?Niz>we1+riMpM-7j#@(TFWk1TU#0wK9C)|_pdP1rEL-{C0j6$wR zQe-M}6cvgCaJ9nJ-Fwqcam}ST?EXI78V7$v{+hu&r$W&n40VNi~asD13m=KgO zA>posqJ$0b^E`Qp{5$ysMUi5g;t|C`g-uzmyhoL-TB%yAI-@$Tx}y3@6_$vf6{^MR zmFkn~GwM&&|5OjvjL>|pxvm+Xq)vJPs@+Puq`jhDuiK;x)ko;H`e}NbzC!=F{)A2c zp}tjrLmvR$WCoSNXjow=GdyN^((pIKX~Shhpm7*nrUrBM7i#t+*ry<1jg_fn(`6Rf zBH0Dm71{9ksCaq2G2RlN6~8QgO?*xKmH4004N1brgy#}|ObC#N%cXJ!hUo!$sr+HN zQ~tF4C3$}YDXqdbU9lKOJ*jwCaY6Bs;=1Cd;x|P<JWWt!5W z%u%jXKB!!$EP==GQ65$vSDwMRcPVcxMXG^_W?`yG1hOfr1eFFMELAlZcFI*1z*5C3 zo64a&ta?T@A<>dpnfOKG4~PY~5=Yt8QR+DLL`}TLsJU0OO7lI!!flN?DKlwN(!Qi8 z;7o5Mold%lv3&)jdPVzh?ax}3PN&*YiuxHG&UJOGqxJPHMSdnG!-C+QQ46ZR)u!ul~=zDNFs{FMANxe!jBsVGxa zNf9;&!NddYE@lTF^Qr?abi%SBrzm0 z9D|UVn3GtPXibb$%hYPDEsNEK>LPWCxYSNF&w+*)$=V zIE_rB(C9QK#Bdrfw`%ri4r`8UDm5<6IRv0q%~cJj>DB}#NiZ?vl4MDWq_m`*q{T_g zuw-pbDor|oaDOc6I3i?2Qe#qUQb$r}Qdg1$lQ&!&r`2gq+7#_#?K163ZHacbc8|6~ zdrW&=Td6&#wKZv*wJq9CZI`xNE73*kqzEu3U5YMEw^&!GE7DnYdvq082@mNG>ne3F z-8o%@u2FYMcU8y1S48@7Og@EPt+(hi_4)cjeHqr5Bl@HIWBN1tM*SsylfGTwfruGm z2scC+6b7|nHX_9`8u~BcsRN58V@b$CWGG2EjJ5E1LUlqj)Lcc{8lqC{z;EK!YBpd#@ICf1q6 z7A!y=i3)WZ#x!4TRUc3{shicE>Mo3;SR=s@Mqmil`~c3@STs3U@T{8MnhMQPei*AU ekT{)U6zFWYOeUKxv&s(1nq-|a3Axt%`2PYT;=Nx0 delta 19425 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 0x100 && cp < 0xA00) { + cp = cp + 0xE000; + } /* 上位バイト */ byte high = (cp >> 8) & 0x000000FF; @@ -226,14 +277,14 @@ errno_t convertWideTextToEscapedWideText(const wchar_t* from, wchar_t** to) { /* 下位バイト */ byte low = cp & 0x000000FF; + byte escapeChr = 0x10; + /* 2byteじゃない */ if (high == 0) { (*to)[toIndex++] = cp; continue; } - byte escapeChr = 0x10; - /* high byteより決定 */ switch (high) { case 0xA4:case 0xA3:case 0xA7:case 0x24:case 0x5B:case 0x00:case 0x5C: @@ -281,69 +332,73 @@ errno_t convertWideTextToEscapedWideText(const wchar_t* from, wchar_t** to) { return success; } -errno_t convertWideTextToText(const wchar_t* from, char **to ) { - - errno_t success = 0; - - /* */ - if (from == NULL) { - success = 1; - goto A; - } - - /* */ - int size = WideCharToMultiByte( - CP_UTF8, - 0, - from, - -1, - NULL, - 0, - NULL, - NULL - ); - - if (size == NULL) { - success = 2; - goto A; - } - - /* */ - *to = (char*)malloc(size * sizeof(char)); - if (*to == NULL) { - success = 3; - goto A; - } - - /* */ - int err = WideCharToMultiByte( - CP_UTF8, - 0, - from, - -1, - *to, - size, - NULL, - NULL - ); - - if (err == NULL) { - success = 4; - goto B; - } - - goto A; +errno_t convertWideTextToText(const wchar_t* from, char **to) { + + errno_t success = 0; + int size = 0; + int err = 0; + + /* */ + if (from == NULL) { + success = 1; + goto A; + } + + /* */ + size = WideCharToMultiByte( + CP_UTF8, + 0, + from, + -1, + NULL, + 0, + NULL, + NULL + ); + + if (size == NULL) { + success = 2; + goto A; + } + + /* */ + *to = (char*)malloc(size * sizeof(char)); + if (*to == NULL) { + success = 3; + goto A; + } + + /* */ + err = WideCharToMultiByte( + CP_UTF8, + 0, + from, + -1, + *to, + size, + NULL, + NULL + ); + + if (err == NULL) { + success = 4; + goto B; + } + + goto A; B: - free(*to); - + free(*to); + A: - return success; + return success; } errno_t attachWildCard(const wchar_t* from, wchar_t ** to) { errno_t error = 0; + unsigned int size = 0; + errno_t err = 0; /* */ if (from == NULL) { @@ -352,7 +407,7 @@ errno_t attachWildCard(const wchar_t* from, wchar_t ** to) { } /* */ - unsigned int size = wcslen(from); + size = wcslen(from); /* */ *to = (wchar_t*)calloc(size + 3, sizeof(wchar_t)); @@ -363,7 +418,7 @@ errno_t attachWildCard(const wchar_t* from, wchar_t ** to) { } /* */ - errno_t err = wmemcpy_s(*to, size, from, size); + err = wmemcpy_s(*to, size, from, size); if (err) { error = 3; goto B; @@ -383,23 +438,24 @@ errno_t attachWildCard(const wchar_t* from, wchar_t ** to) { return error; } -errno_t attachBOM(const char* from, char ** to ) { +errno_t attachBOM(const char* from, char ** to) { - errno_t success = 0; + errno_t error = 0; + unsigned int size = 0; /* */ if (from == NULL) { - success = 1; + error = 1; goto A; } - + /* */ - unsigned int size = strlen(from); + size = strlen(from); /* */ - *to = (char*)calloc(size +4, sizeof(char)); + *to = (char*)calloc(size + 4, sizeof(char)); if (*to == NULL) { - success = 2; + error = 2; goto A; } @@ -410,7 +466,7 @@ errno_t attachBOM(const char* from, char ** to ) { /* */ if (memcpy_s(*to + 3, size + 4, from, size)) { - success = 3; + error = 3; goto B; } @@ -421,19 +477,20 @@ errno_t attachBOM(const char* from, char ** to ) { free(*to); A: - return success; + return error; } /* Cpp code */ -const std::wregex FILE_NAME_PATTERN(L"^(.+)\.utf8b(\.[a-zA-Z0-9]+)$"); -inline errno_t getBaseFileName(const wchar_t *source, wchar_t **to) { +const std::wregex FILE_NAME_PATTERN1(L"^(.+)\.utf8b(\.[a-zA-Z0-9]+)$"); +const std::wregex FILE_NAME_PATTERN2(L"^(.+)\.(\.[a-zA-Z0-9_]+).utf8$"); +inline errno_t getBaseFileName(const wchar_t *source, wchar_t **to, const std::wregex pattern) { errno_t error = 0; std::wcmatch match; /* */ try { - if (!std::regex_match(source, match, FILE_NAME_PATTERN)) { + if (!std::regex_match(source, match, pattern)) { /* Not match */ *to = NULL; goto A; @@ -461,12 +518,13 @@ inline errno_t getBaseFileName(const wchar_t *source, wchar_t **to) { return error; } -errno_t getFullPath(wchar_t *from[],wchar_t **to) { +errno_t getFullPath(wchar_t *from[], wchar_t **to) { errno_t error = 0; + wchar_t *err = NULL; /* */ - if (! (*++from)) { + if (!(*++from)) { error = 1; goto F; } @@ -479,7 +537,7 @@ errno_t getFullPath(wchar_t *from[],wchar_t **to) { } /* */ - wchar_t *err = _wfullpath(*to, *from, _MAX_PATH); + err = _wfullpath(*to, *from, _MAX_PATH); if (*err == NULL) { error = 3; goto A; @@ -501,8 +559,9 @@ errno_t digDir(const wchar_t *source) errno_t success = 0; wchar_t subpath[_MAX_PATH]; wchar_t temp[_MAX_PATH]; + HANDLE h; WIN32_FIND_DATA lp; - + /* */ errno_t err = wcscpy_s(temp, source); if (err > 0) { @@ -511,7 +570,7 @@ errno_t digDir(const wchar_t *source) } /* */ - HANDLE h = FindFirstFile(temp, &lp); + h = FindFirstFile(temp, &lp); if (INVALID_HANDLE_VALUE == h) { success = 2; goto A; @@ -524,10 +583,10 @@ errno_t digDir(const wchar_t *source) do { /* isDir */ - if((lp.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && - (wcscmp(lp.cFileName, L"..") != 0) && + if ((lp.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && + (wcscmp(lp.cFileName, L"..") != 0) && (wcscmp(lp.cFileName, L".") != 0) - ){ + ) { /* TODO:check len */ int len = wsprintf(subpath, L"%s%s\\*", temp, lp.cFileName); @@ -543,26 +602,47 @@ errno_t digDir(const wchar_t *source) if ((lp.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != FILE_ATTRIBUTE_DIRECTORY) { /* */ wchar_t *baseFileName; - errno_t err3 = getBaseFileName(lp.cFileName, &baseFileName); + errno_t err3 = getBaseFileName(lp.cFileName, &baseFileName,FILE_NAME_PATTERN1); if (err3 > 0) { success = 4; goto B; } /* */ - if (baseFileName == NULL) continue; + if (baseFileName != NULL) { + /* TODO:check len */ + wchar_t fileFullPath[_MAX_PATH]; + int len = wsprintf(fileFullPath, L"%s%s", temp, lp.cFileName); - /* TODO:check len */ - wchar_t fileFullPath[_MAX_PATH]; - int len = wsprintf(fileFullPath, L"%s%s", temp, lp.cFileName); + /* */ + errno_t errSub = subUTF8B(fileFullPath, baseFileName); - /* */ - errno_t errSub = sub(fileFullPath, baseFileName); - - free(baseFileName); + free(baseFileName); - if (errSub > 0) { - goto B; + if (errSub > 0) { + goto B; + } + } + else { + errno_t err4 = getBaseFileName(lp.cFileName, &baseFileName, FILE_NAME_PATTERN2); + if (err4 > 0) { + success = 4; + goto B; + } + if (baseFileName != NULL) { + /* TODO:check len */ + wchar_t fileFullPath[_MAX_PATH]; + int len = wsprintf(fileFullPath, L"%s%s", temp, lp.cFileName); + + /* */ + errno_t errSub = subUTF8(fileFullPath, baseFileName); + + free(baseFileName); + + if (errSub > 0) { + goto B; + } + } } } } while (FindNextFile(h, &lp)); @@ -591,12 +671,10 @@ int wmain(int argc, wchar_t *argv[], wchar_t *envp[]) /* */ error = attachWildCard(fullPath, &attachWildCardFullPath); if (error > 0) { - printf("ワイルドカード添付異常:%d",error); + printf("ワイルドカード添付異常:%d", error); goto B; } - wprintf(attachWildCardFullPath); - /* */ error = digDir(attachWildCardFullPath); if (error > 0) { @@ -614,9 +692,63 @@ int wmain(int argc, wchar_t *argv[], wchar_t *envp[]) return 0; } +errno_t saveTextToBinary2(const wchar_t *source, const wchar_t *baseFileName, const char* from) { + + errno_t success = 0; + int file_size = 0; + errno_t fopen_err = 0; + + if (source == NULL) { + success = 1; + goto F; + } + + wchar_t drive[_MAX_DRIVE]; + wchar_t dir[_MAX_DIR]; + wchar_t fname[_MAX_FNAME]; + wchar_t ext[_MAX_EXT]; + + /* */ + _wsplitpath_s( + source, + drive, + dir, + fname, + ext + ); + + /* */ + wchar_t exportPath[_MAX_EXT]; + _wmakepath_s(exportPath, drive, dir, fname, L""); + + /* */ + FILE *fw; + fopen_err = _wfopen_s(&fw, exportPath, L"wb"); + + if (fopen_err) { + success = 3; + goto F; + } + + /* */ + file_size = fwrite(from, sizeof(char), strlen(from), fw); + + if (file_size != strlen(from)) { + success = 4; + goto A; + } + +A: + fclose(fw); +F: + return success; +} + errno_t saveTextToBinary(const wchar_t *source, const wchar_t *baseFileName, const char* from) { errno_t success = 0; + int file_size = 0; + errno_t fopen_err = 0; if (source == NULL) { success = 1; @@ -643,7 +775,7 @@ errno_t saveTextToBinary(const wchar_t *source, const wchar_t *baseFileName, con /* */ FILE *fw; - errno_t fopen_err = _wfopen_s(&fw, exportPath, L"wb"); + fopen_err = _wfopen_s(&fw, exportPath, L"wb"); if (fopen_err) { success = 3; @@ -651,7 +783,7 @@ errno_t saveTextToBinary(const wchar_t *source, const wchar_t *baseFileName, con } /* */ - int file_size = fwrite(from, sizeof(char), strlen(from), fw); + file_size = fwrite(from, sizeof(char), strlen(from), fw); if (file_size != strlen(from)) { success = 4; @@ -664,10 +796,86 @@ errno_t saveTextToBinary(const wchar_t *source, const wchar_t *baseFileName, con return success; } + /* */ -errno_t sub(const wchar_t *source, wchar_t *baseFileName){ +errno_t subUTF8(const wchar_t *source, wchar_t *baseFileName) { errno_t ans = 0; - + + char *importText = NULL; + char *noBOMtext = NULL; + wchar_t *wideNoBOMtext = NULL; + wchar_t *escapedNoBOMWideText = NULL; + char *escapedNoBOMText = NULL; + char* escapedText = NULL; + + /* */ + ans = loadTextFromBinary(source, &importText); + if (ans > 0) { + printf("ファイルからテキストを読み込めない:%d", ans); + goto A; + } + + /* */ + ans = convertTextToWideText(importText, &wideNoBOMtext); + if (ans > 0) { + printf("M->Wが変換できなかった:%d", ans); + goto C; + } + + /* */ + ans = convertWideTextToEscapedWideText(wideNoBOMtext, &escapedNoBOMWideText); + if (ans > 0) { + printf("エスケープに失敗した:%d", ans); + goto D; + } + + /* */ + ans = convertWideTextToText(escapedNoBOMWideText, &escapedNoBOMText); + if (ans > 0) { + printf("W->Mが変換できなかった:%d", ans); + goto E; + } + + /* */ + ans = attachBOM(escapedNoBOMText, &escapedText); + if (ans > 0) { + printf("BOMをつけるのに失敗:%d", ans); + goto F; + } + + /* */ + ans = saveTextToBinary2(source, baseFileName, escapedText); + if (ans > 0) { + printf("ファイルをセーブするのに失敗:%d", ans); + } + +G: + free(escapedText); + +F: + free(escapedNoBOMText); + +E: + free(escapedNoBOMWideText); + +D: + free(wideNoBOMtext); + +C: + free(noBOMtext); + +B: + free(importText); + +A: + return ans; +} + + +/* */ +errno_t subUTF8B(const wchar_t *source, wchar_t *baseFileName) { + errno_t ans = 0; + char *importText = NULL; char *noBOMtext = NULL; wchar_t *wideNoBOMtext = NULL; @@ -678,7 +886,7 @@ errno_t sub(const wchar_t *source, wchar_t *baseFileName){ /* */ ans = loadTextFromBinary(source, &importText); if (ans > 0) { - printf("ファイルからテキストを読み込めない:%d",ans); + printf("ファイルからテキストを読み込めない:%d", ans); goto A; } @@ -692,21 +900,21 @@ errno_t sub(const wchar_t *source, wchar_t *baseFileName){ /* */ ans = convertTextToWideText(noBOMtext, &wideNoBOMtext); if (ans > 0) { - printf("M->Wが変換できなかった:%d",ans); + printf("M->Wが変換できなかった:%d", ans); goto C; } /* */ ans = convertWideTextToEscapedWideText(wideNoBOMtext, &escapedNoBOMWideText); if (ans > 0) { - printf("エスケープに失敗した:%d",ans); + printf("エスケープに失敗した:%d", ans); goto D; } /* */ ans = convertWideTextToText(escapedNoBOMWideText, &escapedNoBOMText); if (ans > 0) { - printf("W->Mが変換できなかった:%d",ans); + printf("W->Mが変換できなかった:%d", ans); goto E; } @@ -746,6 +954,3 @@ errno_t sub(const wchar_t *source, wchar_t *baseFileName){ A: return ans; } - - - diff --git a/README.md b/README.md index a3312de..e5d498c 100644 --- a/README.md +++ b/README.md @@ -5,13 +5,23 @@ ## 迺ー蠅 縲Windows7 莉・荳 -## 菴ソ縺譁ケ +## 菴ソ縺縺九◆繝代ち繝シ繝ウ1 驕ゥ蠖薙↑繝輔か繝ォ繝繧堤畑諢上@縺セ縺吶 螟画鋤縺励◆縺繝繧ュ繧ケ繝医′蜈・縺」縺溘ヵ繧。繧、繝ォ繧剃ク玖ィ倥↓豕ィ諢上@縺ヲ縲∽ク願ィ倥ョ繝輔か繝ォ繝蜀縺ォ菫晏ュ倥@縺ヲ縺上□縺輔>縲ゆク願ィ倥ョ繝輔か繝ォ繝蜀縺ォ縺輔i縺ォ繝輔か繝ォ繝繧剃ス懊▲縺ヲ縺昴ョ荳ュ縺ォ繝繧ュ繧ケ繝医r鄂ョ縺上h縺縺ェ髫主ア、讒矩縺ォ縺励※繧ょ、ァ荳亥、ォ縺ァ縺吶 - BOM莉倥″縺ョUTF-8 - - 繝輔ぃ繧、繝ォ蜷阪rxxx.utf8b.yyy縺ォ縺吶k縲Yxx縺ッ莉サ諢上ョ譁蟄怜励Zyy縺ッaス栩縺ィAス杙縺ィ0ス9縺ィ繧「繝ウ繝繝シ繧ケ繧ウ繧「(_)縺ョ縺ソ菴ソ逕ィ蜿ッ閭ス + - 繝輔ぃ繧、繝ォ蜷阪rxxx.utf8b.yyy縺ォ縺吶k縲Yxx縺ッ莉サ諢上ョ譁蟄怜励Zyy縺ッaス栩縺ィAス杙縺ィ0ス9縺ョ縺ソ菴ソ逕ィ蜿ッ閭ス + +荳願ィ倥ョ繝輔か繝ォ繝繧偵,onsoleApplication3.exe縺ォ繝峨Λ繝繧ー繧「繝ウ繝峨ラ繝ュ繝繝励@縺ヲ縺上□縺輔>縲ゅヵ繧ゥ繝ォ繝蜀縺ォ縲』xx.yyy縺ィ縺励※螟画鋤縺輔l縺溘ユ繧ュ繧ケ繝医′菫晏ュ倥&繧後∪縺吶 + +## 菴ソ縺譁ケ繝代ち繝シ繝ウシ +驕ゥ蠖薙↑繝輔か繝ォ繝繧堤畑諢上@縺セ縺吶 + +螟画鋤縺励◆縺繝繧ュ繧ケ繝医′蜈・縺」縺溘ヵ繧。繧、繝ォ繧剃ク玖ィ倥↓豕ィ諢上@縺ヲ縲∽ク願ィ倥ョ繝輔か繝ォ繝蜀縺ォ菫晏ュ倥@縺ヲ縺上□縺輔>縲ゆク願ィ倥ョ繝輔か繝ォ繝蜀縺ォ縺輔i縺ォ繝輔か繝ォ繝繧剃ス懊▲縺ヲ縺昴ョ荳ュ縺ォ繝繧ュ繧ケ繝医r鄂ョ縺上h縺縺ェ髫主ア、讒矩縺ォ縺励※繧ょ、ァ荳亥、ォ縺ァ縺吶 + + - BOM縺ェ縺励ョUTF-8 + - 繝輔ぃ繧、繝ォ蜷阪rxxx.yyy.utf8縺ォ縺吶k縲Yxx縺ッ莉サ諢上ョ譁蟄怜励Zyy縺ッaス栩縺ィAス杙縺ィ0ス9縺ィ繧「繝ウ繝繝シ繧ケ繧ウ繧「(_)縺ョ縺ソ菴ソ逕ィ蜿ッ閭ス 荳願ィ倥ョ繝輔か繝ォ繝繧偵,onsoleApplication3.exe縺ォ繝峨Λ繝繧ー繧「繝ウ繝峨ラ繝ュ繝繝励@縺ヲ縺上□縺輔>縲ゅヵ繧ゥ繝ォ繝蜀縺ォ縲』xx.yyy縺ィ縺励※螟画鋤縺輔l縺溘ユ繧ュ繧ケ繝医′菫晏ュ倥&繧後∪縺吶