From 8f2dc27b7241b18eaaa3cf8bc284f31a2953de52 Mon Sep 17 00:00:00 2001 From: KikooDX Date: Sun, 21 Mar 2021 22:11:49 +0100 Subject: [PATCH] Improved src/save.c + misc Cleaned up src/save.c, reworked comments. Use one BFile_* call instead of a for loop when possible. Use a static constant instead of repeting the path. Minor .gitignore change. Change build.sh shebang. --- .gitignore | 2 +- AST3.g3a | Bin 178164 -> 178084 bytes build.sh | 2 +- src/save.c | 63 ++++++++++++++++++++++++++--------------------------- 4 files changed, 33 insertions(+), 34 deletions(-) diff --git a/.gitignore b/.gitignore index c1a2832..c608d80 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -build-cg/* +build-cg/ # ---> C # Prerequisites diff --git a/AST3.g3a b/AST3.g3a index 2ebf772cac714c59b60101252636f173479339bf..64dced195698704a7e340adc389cc88b08d304c4 100644 GIT binary patch delta 20047 zcmb`vd0dlM);NBjCjk-?AR#OP(QNFCd6FRDo&^O3WvxrK_Q}Gg=&-3+ZG!?9CZ<#qi@@p1Ql>;CjkL%scpqt+cM^NZUWVI-tT|E__;jK zbMJlbJ?GqW&OPVc^LXdW(34+=s(*LtPtN^a&)YBf?!&+M`@Vk{t~-Gq{D}67c?9v} zGg;7cz@E$q76q}$Gbazw|Kh1;QyR5uwpvYP_Y#YIM6Y1cSO2d+?-RZ6h8G*xyH(0R zDF0R>*YP%13@ZDnOVmYGArEl}sL`+cs9|JmZj8`zbIm$#Bhih#gic^f?9aHAc`+0B z>d%C`tf{-Kz@0m5Fzf1U9keo*h795Yv%f)KUDAW7wEY}GGzIX#j?_!xN>Cg@6dIBG zF**x%o)Od#Ku=xJGeSJLM^s7+qKIrLd598^!+V7=UK^rPTLX2tzR1GlHSQD+`VdO= z`Fs~)wp1wRm=78sx8hnp)J`G{0nFbg$hcJK z`G}!OYJoO$I1c5iiglSNUR7W7RA_>SnAc#R$&GK}_HxaHdDn!rm6v@F=v~86HSrYA*5dIouoq51?MB?@bPQR zp5_r^JyYAVh%HN_LYd#SR0nRNw#w&uk?IJ*1l?4BpX={#WT`${mZ{4eisPoBc`fc=pI~U2&t@i?u$^zykkuaYXczfppE}Li`SkRx6X|I?*Zdtal~HZgo|!mBdL~b z7(s_$XJ)l&toANe7t2m~Nrk{&GF&@qvGk3tuA0zH4z9?Vl&EtjB}Qe_*7}->>WS_2 z)nz)~w)O5pkCvLWOl$~gsn_w=a)yy)!6+eFJgn7Bii|_V;mwk)Ap~z{NYW)~BB{tS zrp=u!+a?p+*LhKCL-}_NL~KkG5sS_dRy!$4>#-xQTVt8f@mlIDzE|YgSyhai((x?A zZpt!Tez%Iz@v5a2_uW~FJO^3%okz>QkLAVKClfn1R@^VYFHg1AUP&29=}&!@TF$%v z$Uw>nt3L(qS_hIx4E>347cr33FMn1Jce4f*{fW=cIy7rJ4>4uCqpZ?Hkvg74(X$wF z?L_%qd7HBd_3J;xQ zAu8kpxUNSO2V@T~+|E}}$e*-ueH{gVdkwB1LGeJjgIGIn!NS6OR!u7k@wF-Px_|H9 zi1Bi5)WY8jb%)Ly;403yjOMqG7em4PS89#~Z+>R+{-XJPf1Uf(8}AzsRp zgbb`a#9S*c;B8`Adb2sMQVc?WDbu!RhIM(3$a3P!GA*yFw@OqDuUS~jp`Uvx5?4=D zG27}b!#ZAexRldPytHcLFbv$gh=0JeDAtB+Jia?YdhK<5HBT&u__T!8(~GaXrFuTx#t((eC|0!HI5^yp=a@Be82e^ zqT+xv$Ug?ew~nt9Ahh^AZX>me-`Dtmn7V#o-kJjD&HlFr;NB1Xn^VB_;BQkswTTaH^e&FYsKYvX=xV$OZWSVyIxYx zTbzEfdAZ2X%oToSF1N4-RxSq;KXPxAsPfxl-bPl%9pEcgHOn>E&*DWu_@A=)VhbyK zyn3R=2Rev}*ekZKLEOGM8;75Oif#1)_#9t*zjc1O<;2z8)5}1S&BiTTeOP?~@q^00 z!Tj7!oLu5T11SN#wh{$_R(7D(P7Z5N=OV6$7>v_Qwq=~2Dl0F&bVgthlawMDTjL5-aS zmDYoqGr+W%!5?PsX~qVoMkojYhmSLvPtPFgn8K%DB}B}fr_o( z*gg=qfGBPr?=p20$De5=9t;e_rh5_1G=O$hg_u}=LnL!(GGN4P4_0mWM9lkLI+qnc zZ`bn7q563X)RXiHl-X5p)9vp++#eC+DP=PS-ElFa^*NKQdYz!bC#M|unusfASPwI^ zty?M>q3G;C%j#6)x&_1as!Yu!EkX;r^o}6Q@F>t{n97+9&Tiq;23SAX8oZOWti0mF1aEy_ zrfQOIM+seekgZ!|`a!iT3(sd{(F`TFR!?kXxzeAwZy6rbSDn!Ew$%f>=6QFxk}su9 zfu-{900Zhb01P&u#;8;OKZ0Z>UV0N?3iIx$Vw90?eox$3E%6btj(CjNKs-+D$E!R? ziYO`QR()n*0Wpi#zOC&6ecA@hNU>?la5b0>+v;7a*XRPk@%rU=tSQ+&U?k6+rq5M;NUb ztuOy3KzinR+Z^H%#$}5oN|_rr1-WjF3EP(&)xUlz@A}q(b%%}=@akC$I15f~{0FmU zpMr>BcJ2Gc%umNrU-~F|)}ZHIZ^3(X#kW1Tya;RRo_>a7UqPH_R@w8dDlj8eY(!0) zpV-R476zD}s(o(<_M>dDHg@r$h@ntZCSx`t|8f?dwJ2n=4X(wA{iYzWk71GLKwTY; zs98~dYq7XUi>MhO`rLC5WU-rgjaN-;hKbjql8C?c$1H_yu`gy69g^sIBU^zg-(;TaCQiQ$s@fh5HhidDQ5bm$;wlz8>ywhXiva}WzC<)@A`Kt)VV@%TZ3rokV+H+MmpnJCRP-PKs6b)#ZrB6wS`Aqdw zDRDV?+(XJyRKy#J2AxosdCpO5nQ*I^m!DD+$xQ!K3M-IS0_bDL#QViGb4tMQ!3;Xh zoDD#VE!xE$Pk0MXNA1*>wE-!yv4jmI8QlAqrUS@=-?DVbp;-5tYbyag=*Yo6ZfUzwBOidvy z&29RbE}w%725rPe{x&uMNLbgDBx4`c#q$G9_yOjQp-Zsw1IYgE-#Lx}UYd?6ham<^ zr6)oG4E!JhKmx)x zl?f{gOblKwW!;CUwsA!5DMnQLDMWSh5w*7-QBQw_sP0Te{c<0oY~zTs7bEJKQ;6En zN7R9O7kQYxL~1h-m)HO+4C5aBsP~XVO^`zt=G^|{_)>qM&$JQN7PlVC{4BiZb41bF z|0HKMv}2NDMTLFqkHyo*H}v1Pcw)+!UW=EYF%KKzSX38-TMSDQ)!TD$15rNBn}N9k zW8kr-mkjvLKgSkrfCo2fe?IQ?cmZC_YGcm6o@{*rhS<4ZxmS6(4&+z)hpX~Id5L^u zd#fk!4Z9@m=%Cbw2Bj`3)=Og2CBfIUqp9TJ45*KDC+K*Ud)x_@J%dqrdGe0iqDqn< zL?Fuc!hUtR{Aqcry+7?}H@mV^$7}UC`|{p!eqY%Et&H>c305iq1O#n7P+%oW_CNs{ zDrtc7{4{Wb5my8yasceOJq!Q~2LQs|;TQnR9(PztG7fv_Knlv91{eMFho&3LJC3Kr zh$5Klp?Un{Tk!;!qm?h0$d>^QgHcza3VHG5GG03A7G39D7U_72JRIzD3lBvP3h`6k zK^r?TA?9&EmIMIOQML!~&zKU&m^Z80BGQ988SK zdO50=btUT1tp2D=QQ7=uym*3H|3;#<@+G%GNIaO0Kx`E3A6Y|T*2CxkqrmbLTDZat z;OSF4pe^ZLX!{6J$&+~Y1N`h*8^;}dkXt5n1*tNJJc()AjO+x&^B|Uw)cVJP@sxW9 z!vQJ)s*qP_xMJmx5^g?y{1RWws}urN2}~qEIXI&T>VqqV0pR=^XlhbCApmd#4~iw& zFT3nfbcszzy4jUNZ3am30|1ZV{%&AA9nX5*EvuTaOl%cE9EIs^a4ehD9|&=9i@%7up9yz z>59bTxFU@cjiFeFG5cQ?ThSoV#`2RgBMJhEpnEbB0TQf--h^$m6!c0y+|$4lgig?7I6hHEQ^AH2w5cXK)^ zBi+q`Lcg!&Y6%IOe*c`{b3~-wK$2+J7TmXvRmIZANm%DuUBr?!`(op!Hr?(eoVPRL>2@uL;-|}tIDMHP z3Z?ISF3I4QPI!?#^1P=nHG}7xT_l#5_obw9)83Is(u`I7AMsM_U2t%@-Vp6fcjEB( zRJ5^=4An1m9#>`7r~|{Rb`^0HkspeT^63d03I7DK(s#T_E6$2cOEVr%h&%6cCagDUa+6!NsYPN5YQ2+Xs9H{IUjH9&oMX2&_?<;ffKZYy~FFhLQ)* z>#;ot0b8HIwBmw`7(v>M>yHCN(gQqiNdC<1Cx_7R_v!*7bQI|psJ8TnBu9Efmdu>< zq%6xvx{ zPpdC=Ml0dw86#C~c5v)n+Ea?x(B8M znr3Uv(k1c>8teGx35n=QjwC88(i?2LP%}p-kT*Jhur`rbvTh){oqLTqRd?)ahB3i( zr2Y-Lm{vFx(zsTFZtvndzS=U;mvjR?1uIXS;$AZ*)EzU%%8t?^N0RipKp)%fU4#c^ zyk~{I=;twU<3w8wUQ8|LL$WQlk?o3<{S^c`5{&f6{(*-~iwiyE{NGlhZ3uTmVv0Ze zuiC`6Vat%7r<6mtk4?Az{boSFbFIY5B7^{A&|py=h|0R?ju=TTkslI+CYyAHdC_&> zK-l5P5yUi{Ot)qMVQ|cKHfZO4=#D`spp@%ny>7)PSWMt zXosr7cVN4Tl|;H0>p5e@;U+56Om?tL;KqUMb5lZT#rY7Lr{nK8E4Ye`gJ$_$H4V;P zb6<9Frfd@#MQf~V|H**$$D@J6<@&$#QX9*iMn^hF zw5bEBv`EXz<##rknyZr65Eyo*@k|yIVO)U`9qH`hkqgE`<-C>Guy4<`_vB|_zJl8}hb|%RczcnQ& zGPE3CPO;2+v(YyR43F9f#6lz{ZX0GRECX;4`(4z2DEpvvLFoXV1~vol!@p-;3Aau@ z7YiYAuJovp<>1SnOYQ0=O?x1;P9nzo8;J=^S5yb4`BCm=*qZQmChfBQFwMrWA%FyW zCm|A%;12m;f=r+d2SNfAHYUhYJwC*vLs6SwdiE=~dHKp}520Lzjq|}!>!fOuVZV|b zqe`4=LO*HJzLK1yN_3N@2_Loz`3U9)Oto&ZJRwnDHVg5hg!tK{ce8|<YLSkVzN^DA6(~Xkk?r>r9mia$BVY(cuI;QIH9&?VW`2;AmC;>kdEryi}@%iq; zzV2}>>zXYACFqqgRo!9FM^8z<`i2xBVfxTN5I)~_I*5hf8y z$T8Gug0KpU4uhi&!YY{VzZ{GwyySHi%9l5qm4DdOj88KU$o9(?i;qZy@7GVb1i6#D z1d`@wA%<>w|Dd?0SMpwU$O-ji6;qbUeDFg0Dm@$a{F4ul10#s5n_Xdx#RsCFjkZjv zCY6yjB8a%N-CS^bPHbo6GaO6%k)Xx99vEaKn~WlXY4CX2*^KsuS>Z(|0h1qp2M_lW zgUp+UEmqH$%DvKMU1occ@-S`ag2TZv)M4t%u+QiS;^bXRD8YQZ4)SDMcxwx6aH?Z)$}enJ=X^!E(!Vs=BDa$i`=MD)vAi+k?t^K zq)coJ@8jo4`}y6$MpL6t6WNW7nqefP+}tF2a%74;AQ2$L_n_c2;jf^)0_7AGY=Vtr z*~Z??#tP*hMi6EUSF-hv(NsIpN?x-jnnX?PWPo}Tn1rLDZkdOuIY- zYnNxGzhZpPAvPUUN7_jD3~aj^4_=9ry>1e9b~F)b^3SEUVX0lVC@a4t`QZasfB%R; z|0jGf5A+?9I{Rf((?R2V&`K=lCE~$ary8BtWUu4+Ach>SSTo&2R89|5`=cibBu5^sdC+VZ15P0Q{Aa^RwRP|ck-`##K1x^{;H|^f^ zr;N94(N`67PhFGF?XgKZJ1$GF%<{vXg5mz@QL)ptgD|~k?DJy~>&M`+_jdZB%)}^M z1{B`FC^%S~Pr3srzJU?UkUL#67od0C|0*|t{4{>>=HF$~{}V&YpR=uXkxiUOg~@VP zCB|kNmt{gvmJN9_+V(6HZi0ikoqRi4eWLnzRnNQNWW&;1$Le%%44cPvqm7KakUmj$ z0ptD2QjGVfOY3*nf1G*Frs>#YT$qA7BokEaiNM`SV|9&j0;GGz|6k`H@Fp{NDl%!I8jm zTy4QQ`{pv+j;QX+E3PQ3IlenySi##*R@r!0?k({TYXn63xzhKXP0rJ^Uz@F zmC`zJ`(f%%X3<|~SZ!b_zTdT`ub>rsOHB-Gaz||p~Yde4M z{G2wMn{w2)kP8{gNQoRy>l#;oZ7siTyls{@`l>bC2)Sug>a0`HKQ42C2_6U#z1U`94;>!MC61N#7?#TxdSBMYHEf?H{4Fs05>h@~| z5OwXX+gq?BGwN>|j6x%6dBYT* z?k^K|XMuF7uBiRewTxN+{!D9n0Pz5J=@`4e0O^kV)hFpz{H&F7o|j2Ge@}-s_^ACh z{*V0va&{a80AtL?BhXAhe}!M0Chqhc&eJl_v<9=f|5N;a{jm52RJ5POpt5s%9vJT> za-+$5$CYlGfN5ce8RcF|)$(d12U3TSvE4jDi_S*`@6vHS2@1Meq37zkOT*-;I&L%J z_*%9JJm4>B(V%tKm06}ec&Yu81o1VHq&>rwQ33LEypd4H*jcHO?ifEE_S_7)7KL#H zE@%ZD_W+LgO_DcRjM)cxgl4*?_{8z0?Dd~-SpLwZdck_k9~d$0gic{K%2FPN&GY42 zh4K$KVH2%4DElo6!b~Bd+By7=OH)EI+eTRkxFMY z{OVR5HEIv0MV=p|ab2~J3v@Gh{j=@zEeUYCN;o2vLms6n#KEU;56@NQ+Go+Cxk~EZ}OQkhmrHZR^oGFnA7-ARgV20JpXg64@@}9J`R@BXO`Q} zuRkMfUpj9#5zg_OL_l2!ET@2L2QKz(>-d$~5`EciykrvjCPBvA4j$d>_Om>8R>78F zw*M_NR0zivo~|T^$i%$%w-iv~%XlrEQ4S7^!TAY)dH{<6;x@e=sXJ6!R5j7?t7>pq ziCK{Jz<2((>^25rG5DD{V4TwvSY2!%MK4h9H5o31s@Ipu75b{?3tTr>As<3AxtlY{ zy}(U{S}=vo^d4+%!=b`L9H+pB7B;S4L6o)yuGr|h2ObVbSzTQL238Pud@iw-U{lph z;Ftj7;cPBlCA0tUvnq9!2;2kQeY$H6Y)s0?sg7(6tF98-*bszhdN4$w-Uv%!ih>jN zAE-iX{cR&?gVDguK2mAbC(!voEYes>3A(>SJW3phIMkV8un6lNNn~|}LCg@fwQT9zA36$>lvsGDPHhnN-z3ltWQsnj_D2s`S_&IS^smUY2BKf4H6Ye!b=+H@-^zeyGtBT+a_bQW>)l@m~h)mwl(i9~mg))=KU2z=^`(RHq?2hV$ zOc=)xv_Yn>5>+Q}zH!)@?kXQ8w!?D!p2fzm(TWtu&Fc>&Vqgj0P25F zqZc@CHA=5(Z?HB_Kny3u9yuztyj1mm5zn&1$fDa#q8u%!DT42z9ZB}iIh3+hNXN7_jEOR&<)Y7AKg0>zA&T!#OL8CEPK>IJnBrbU>1 z5Ix82Jqh=jP&k;JQ0F>X?7Ifn21KpA19k6C#cxQc|H?~d$AXTjaC1h8B`Zt7#)q@doA3bhG}K$WBOnutdc^7qBX+Je(c7UimWS*Nqi+U2U^VhJE8Qj!C3P>h#nu zhuAaAtk7`{VY2ypE_uWi59geaTpAk7idQ|WUce3w0uMJklNLSjNP)-#JKwATwI*O( ze~7Z`xMK-0#FMi5&P#gkSiEkbS>gHK|NIYqn49hVa0mfb_1H5*5qd3l#g%(KsmjAC zt>8yB9gLWCO3R9A#CW1f4Js z^!vo0!3eh&<)zpcd4f3G-H$@DYCx@g-?!kD1rg9l1D=BCBv3+?%H4%^vD zYusfyF%DQZN066rm%x4KO@Wt~1DoQU7(4qWg+Yy$RVs*X^yJ5R7%%xTFF$dUKMghRJG+$^CIDXyg``IQm zwFf~2h^yt^j7Z~p$-G#*W+=$Z?@Q;z67j0c&L{|$U#HufCTXe3M)S3qfWkGpU1ky* zJEKgHn{xA>{JHZX(u{+e-OT2NOyrV#z*R1+WJdf7XUPXl=6`3({S|(tv*ZIe=sJ92Qfu&o7vaU=MKLe_ zcWFZ5n|{895&V1^g`4^X>{z#ejAugsxX{Y}NjuN~DwjQl8O?zx-49rq^a1B)XLb~y zBfBT@vtPY%Fk}!KB8~b+A~6!qj{qPyt7?Udm7kha)X&mpSR!Gc0rgpa7LjiOCt*cY zI??5`FV3!Uu;y%M{(K};Z9~*q@?Px;I$#< z3z8Pa3lQyzS;M(dTQgDh-uCS32}`?yw+;JPq@$^esF<9ex03*Sk90J^)4%88fJ?8$ zK0nvat$UAg&dco%>Ns3;!dlDE-B$qVt359uusw5g9i$i4YVuxLF0`{HF~(Q(PDx@u zLl;WMQQ5O*wIo)O#~cjJt@wtBH>679%I?VKOXAD!=!8U?WX7ijpA=XoR`Oc1VHa+$ zVy%D}3hb}nm{}c%fQeMAj?kL$`Yq#`=Qh7@7cP9a?1vg_0_=kPzWFsL%I@UulW4a4 zl#$gJs!nY4K^|gn#l*o!7pB-(R%u)s3$tlh%bS0#DB3Q7eA;8qbM<_Oqhit^bMBj; z=QvRDZ@7DAUS8)h=RdcEtq|IiMp5-ubMKJ_7ESiG?ClP+>|1lQW^f5-;kC+pa}vt# zhR2qDm%k`4Bz|E6OkS@O=G5n0v-7j-mFiXBTo6mVlBOCUD&jiN!*o~8!)4##8l_q% zlz1-)?O(6@{({hXYtqChZLN{gLYGFn%{Rm1b*a+irZ2^{pr0CVqz9!WT=@aF` z3#o&t^0@=4LK(g1;8JaxHtzi5YSuO))>si$8s)t$pR1jT59(}4FRR)!9AVtEB#z#b zG&e;)Jg!?f93h*#l^7;0nnoi3vGWnJdW$B1=A*F&3#)}NtccC7=%(||3GA`M5&DG} z!Yk&&lh#fIr;za%!m8F8XT;926qyx<^|3i-g}&I35StpCi*38UAmIBU7Z8FIVXVj>#rARsn$T+XJCS!w}!x)F`f2=>^T~M5E*T z7P6voD6EFU&$0%`_l-nAVc`CKJfmTlUn7V9OALY(qvMC|>{W6PST`fSp|Idey`UzF z)#CWR!9PP_j-dj+dj>m2xp#O{dH4n*K{Zq-nPkdgTY#Zr7W^}fOJXSV z!x4{J`MSzVc!R|vHz6OOkaNwRiDW4}p2g21Ek2CWZTaq}J!P5fI*% zA~>diAEg$%SvWJ9j_e~X5U7;tVV>8ayxCDOj1J4-ENm|gR#_cu2eC|G7kPZE^GzB( zhgOhJjoqnLSPP%5smSdr5IVT>I`wu(h$>SBM=;c`fKjT-bY5>JB77bBu-Akr_jazJ z!_aCn9@6;$HSfLhrLwi=3OKUil35zDYSpR&Q`U_i?5t)2Hd4|c7$yt?`%PLwi$dx< zmcnt)E}EYb4&IQYV4w4A^)8cDKcYLll1_w^0nz`qQL6xeYI~4*mO+ReC&WvXH^KQ% z!&e;<&Ra(Qk$J<5X{lSeiF@f-h6@xbhq=X zSn$CBq`2B3yM#!9m%#>C@tt4JgL|4kkK^>D9mi|^qb9)oF!f{TKQc20@#Z=G4-7v@ zjvENK-l;XDlrzaE@`5%1`)ptg$Fy)#&~fbfsESJWEX#_j$7n(I=9(wZe>wc63^D5e zYO%V5YFM56nkTDSojQxIdUI8nF2e!_YQ+ukHqC((k-&LKjoGc+?kkb!uCF&#Klbca z>z$e>b-e4yycNV1*@FhUw~MsN4=m3+)|bkKO*|x?6KiZ%C8!fv@kD%XuBw$;^J1bkUFDq6 z2@a$d$_i!NSg$$bZ7y`2`;kMyiFZTt&~@Y`ByT7qN7(Mj>qzoa4TB@{pouRdF0`m| zOK`lKkK3HLYZwB~^GJduiG3_F#{OgwvEWUhIIP0SHcWYHgBA+DegqD$6^<~B_)Nf1 zB4^Cj@zrHdaB6keiIChHd98hwJa1`Gyrx#OV9u_Aj5+ITn&#}X%T_BoBU8I7ljyMW zL{w16np->f7&|^YGrQOkntjSGm#B0+eB^7#ef716o$W7Zvaxlh-dK|EQd_R=4P`*;`Ef59}u4^ulTW?r$&1-%r|Gr|< z&YHVV)mqDpA-%9#VQ1wmn3HNY51~#y9Y!(TU~J{Jb{gQ`Y$pq&%`E27^G}hFoMob3 zNDqJHET-%9k7@X)D=Bb#b{*nG0T;p5P$Cc0yBn-`E;rOiu8Y?4inwlO;i=eAQ%;R$ z`&m zF0s&tE)s4M>wmBS+Hl>2gp26Z>|#Qnoshp0?>yk8i@`hRSZ~xCa5kr9!W)zaAwCbJ zL1;PXK2B4?${kU`*hkI3$Rz$M)9O-TcMQki>YJsUT9&=ULzK3|rcmS|%G-zUUrD#T zFQ5BKx>#X+Nj5iKi1SM;@1>IXdO$ZaCI&N6{Kk2{SfouYgL(R-vNTY#j97G@g`X+D zY^`*Lm^Bn$`dwN3d6qV-FAnz*i-!26-P@5sC8?6|AbA^x7Zip1&9^C zd_`0OU#M9aBctP(NG88WpBCs2_Jvfr7v%78qgMIyaCC{hRD2WlMb{e66IY_j61592 zFwUMi)>hgb(z$0h9QRI37I+@;E~3_@`u^qf;i)m{l!x(j0qyTfwBERsXqmW{sO8m8 zTuHo?I4T9Dz1PA7(uy1TGh&ABm%-L6OB0B|P7bzxaVg;o8o?j)lN>C%RL~;pz`A>)0Sd_2$~yr7uoky|<>E<1wT7~LlE|`eCBm}1IL3q% zwOqm2Gc~eGSsxNYR^aS9kfXZ}9FldZ4CnZ4tC3|QF9_8+4)zc-kpmIAax!hTFgM4> zUM;-9&&}yZLqsXK$K77|OFBMJ^&Ldx^<}|=oh{b>0%#t5wH8* z$qiZ@4D*8+^?!mG=PL1kMK%p1o}zoQTr_-t?BDXaLdDPz6(YqBp~f9z7An$YDw7a) z0NIb2Pysyrd@!XIdOteHCYZNf^TKQ2F2QyFoYZRipu5OgsPo_ooZz~7ybW%rL+2%s zR_4g5tH@nyGCLO5R=79i#@I=-p{IjxcGuC(LxS8G2Z@d5A+fufNT3s_Oq$o_F|zC- zjne#?X2uX!%M{F16cx^-H5VSQYPNJ&!$*TlQ!UF3yqdU_8Tf-{#^p|vmAZ?6Hr}!a zFQh3vB4VRQh8BgSd7HqLo-m~&uxZj6lpXgJO%L7)r( zT`wfY#5rFdVqWb_Cw{~9_bs!U8+}HNlOBc)2v{Wi%`LVa)k`QuHRVmCjt{2+`MjK^ zxl3!!jy2|rzOA{*jvYorU&{?aZnCM_LF&`=aW};MjbJ6#L$E9}fILWjNUJp8ZmiIS znJWtHvLb_>7G16d3*#PE)s@R{V4v_cEYHs=E-tjWGhax-=cU z-)CJyi-=6R-Izcn;KhPLvRb8=bw-1#l@?7y`2a}gYev?=O@O=2)U1zlcHQ6{umEAN z8k==-&cPcT=CK zvz|4wmfGu@jfQ1my0A?Z`Sy(!MPb)wWE9b&v`q!}D#r5P)oY9Wj8e?o6qhk0_bpyL zJCxEdw;K%(wyBrWI)dlFY-1zN{3o)XHyTX6wYI7gh%+ahieF+kvUCfzcGom)r9P`yS7tS<3Ez2`Mp?HBg zerYd!nwHkTI$>GXkgrzZZ{pDDre^2U(iawE6{udqXO8vjLz`i{vp`Zs(>QaZf2rWX zqdy~QDRZk|%sev~VvVS{TMj1(W#6`N)B>CoBoVphX<Buj!5byX6JJ)97&Dy za0{dho@;ab3xXw|dRa|cZ=3V7JPuLK(LkoAaZEL!9&A>StwmV}nXmd|fI1OG3iIM% zM$$~|4|lQcQh;1uey8l->hILzvTsyPc9tZu$)`$?BwmPSZVkrd!(lUqlMhfrD`DaO#mkl+M&Uackv>D*|62gpMc-yvVou4IRD1HP&3ks0wxvXRCm&1Z_bxQ|4 zuAIKTb2$_8ekGCa@N7YMv@5(8r#`f61rDyI-FZ{e?&8)O0yXw;E$#VXG*4n^nB}}C zAzf_eHM}b{`E@K@k21Aas>$ZB7}u2?|L~0;F#M}~tUwHCH0nKsDi~Pv3T>z<&keS1 zo?^}Bo=>{iK#D3L#RjM&yJ5?nK2gBI;I;a7N3F|#zYOzrBYVstSFV-zvjURH9XdpqP~Y`H64w;8^-tiKz>rp@>pgcw8J-Iz$`)+IUf%(ZYU;>8HZ7jNvHcXZz09d%ny z%stb+>ISOo^`J`KBW2m8_BRj*f_jUpSXH7qq2R*&QYUmQGCw+m005D>BBnA14o1d& zh;wO$*O$9UH5V(M&D=m5!V1g+gg!6u}*_HHHx_#a#!YB zNynW=Uv98t%iNc}EQ}Ftj@gqO`ST1_P%iPtcIRJJPhbNv=HM6+lWmHRX>`69qZmWZ z-+GbbY1&Y(D=Sk&l+n2x0?FyPr}GNpVv;-3>ww^O?aTZGcg&t5H?nRX*fN%SS$b1y zt9@U}!TEsF7o2x9^s<~yWhMy^ zq%HyqNMHh!{ps@1?Z*(c2@Ha*rA*hS%XJSPf68Vh@@w0zZ$fJFgrp2I_f1;`#XL!~ z{}X}4VmKEqzvIQH;?Wh1=wBJqpXspS@^3EE0hxBhuKot=+ka&hD9XOi6^!|6o&e94 z=y^JzsT^d*y`B!s#HxRU6`Z31=)h1)+uU5_EehX$3~M%ci2~h%7}t=~N@1ge)(;V71}fQ+ zQ=tQa&H$A}f>+8J+cN|?gtX>7p$(E{;E+tYUft}-9qcSAY~R&e$RTGY5$C$uFs zS#=ywtS(MR=))d<=UkipE1l5!MWeP)K?5-!jHcsQT~bv--z<2E3;xAJ6CI&+gmVBw zP8m&m#^Ti5?SHJ!s1X%x9`#k3mt>h%%f;0jQ#R4fejOXSeKA-8oW5{8d2X^NmP~V= z1R$Evwb??!THqKJeIbFiG2C`o|D7 zw)V(JbG8E`Gb8B8x#|Tu4UV)?>){U+wT{AVZ39O2w(f)@@8qt(1X(9bQiR(yuEkHNjZ$}r+v@~6*{yD!uXDOHBl8fIx+0S36PKLn4G2czUw&)wz+ z_%UY^oB_5WP@WM!X7-JLOmp;nKS$?1#L+AL9If?pwB|oJI^ECF@+pp%$i%Dl73I0P z_Sv}_#~jSjPk(rJwhhV*=C0vO2mbyD2?1M$Y}z;=6RO+85?ecAF#W_ z&+dqe4IW^7RHlRWyB@-M3-i7GYq-0KxTR%fI-I0ozX=inRth8d%n{_m|9Jy*@-u4| zWQqrVa5^af6Bl$@;n|1k5+1rwWn4GsSsxuoNB|)lUADi8TG@)P5Uqa$%0BSa_d_`g zhx>k&2;bU#5NMBqs7wra;i`*JAOxhFYF`0g?fPSg@J&v%6y60@yAr2IwcvV0_m_^KEeN zZ@*X^%M^dH;7nc{$zz}Su!{^P&ph`E89|;o`Z5_rp7|!2V6)G3pTsqsFoGb@d>2Y^ z$TK(D`0w0j$kLc26hX4j%y|mG+WamN9(qRCL3Xjva3hG?*Us$z8+^=h#{En9;P}i- zzavA)GiU!nG&s3MOV(C^je}MkdGd8KH=OK?n>zOmJlksdZ zLQyCgEkb3e4(&$Iq0{Jp&{Z@MbmWUSNwb9D@(AerIQ|24YK5{3skKL;ylyBhI5KvM z{30C&j6f`qA^gMl;E~~5kSPBT-#17#T zQy?=GEtJ3y{>KSK<-Ixm_~RAVQ47xg_&j|>&0CMCMeC;@5taL{{~p&*{~o$O6@kzx z;adok?M$ng~+-i(&x0{G<@qlrI?G)kiX#i4;JwM5%>QA4{GuA delta 20167 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 Ji~n!B{{tMtFtq>x diff --git a/build.sh b/build.sh index 5f624a8..fb6ff47 100755 --- a/build.sh +++ b/build.sh @@ -1,4 +1,4 @@ -#!/usr/bin/bash +#!/bin/sh echo "making setlevel.c from editor" rm src/setlevel.c python3 compile_level.py diff --git a/src/save.c b/src/save.c index e9383ea..ee40d60 100644 --- a/src/save.c +++ b/src/save.c @@ -5,74 +5,73 @@ int retcode; int valeur = 0; -int times[LEVEL_MAX]; //moche et je le sais... A essayer l'allocution dynamique +int times[LEVEL_MAX]; /* ugly and I know it... try memory allocation */ +static const uint16_t *filepath = u"\\\\fls0\\AST3.sav"; - -/*savefile() write the time of all the player's times in the savefile -savefile() is long to execute. That's why it must be call once per new record only to avoid loading times.*/ +/* savefile() write the time of all the player's times in the savefile. + * savefile() is long to execute. That's why it must be call once per + * new record only to avoid loading times. */ void savefile(void) { - uint16_t *filepath = u"\\\\fls0\\AST3.sav"; int descriptor; descriptor = BFile_Open(filepath, BFile_WriteOnly); - for(int i = 0; i != 15; i++) BFile_Write(descriptor, ×[i], sizeof(times[i])); + BFile_Write(descriptor, times, sizeof(times)); BFile_Close(descriptor); } -/*loadfile() is only call by the function loadtime() because loadtime() set the value of "valeur". -It store in the global retcode the time of the player. This function is call once per level -in the level selection menu to avoid loading time.*/ +/* loadfile() is only called by the function loadtime() because + * loadtime() set the value of "valeur". It store in the global retcode + * the time of the player. This function is called once per level in the + * level selection menu to avoid loading time. */ void loadfile(void) { int descriptor; - uint16_t *filepath = u"\\\\fls0\\AST3.sav"; descriptor = BFile_Open(filepath, BFile_ReadOnly); - BFile_Read(descriptor, &retcode, 4, 4*valeur); + BFile_Read(descriptor, &retcode, + sizeof(times[0]), sizeof(times[0]) * valeur); BFile_Close(descriptor); } -/*savetimes() is call when the player has reached the end of a level. -If his time is better than the save time, it will call the function savefile -else, nothing append to avoid loading time*/ +/* savetimes() is call when the player has reached the end of a level. + * If his time is better than the save time, it will call the function + * savefile() else, nothing append to avoid loading time. */ void savetimes(float framelevel, int id_level) { - if(times[id_level-1]>(int)(framelevel/FPS*100) || times[id_level-1]==0) + if(times[id_level - 1] > (int)(framelevel / FPS * 100) || + times[id_level - 1] == 0) { - times[id_level-1]=(int)(framelevel/FPS*100); + times[id_level - 1] = (int)(framelevel / FPS * 100); draw_end((int)framelevel, id_level, 1); gint_switch(savefile); } } -/*restore() is call when the app is load, it will create the save file if it doesn't exist. -If the file exist, it will read all times from the save and store them in the global times[]*/ -void restore() +/* restore() is call when the app is load, it will create the save file + * if it doesn't exist. If the file exist, it will read all times from + * the save and store them in the global times[] */ +void restore(void) { - uint16_t *filepath = u"\\\\fls0\\AST3.sav"; struct BFile_FileInfo fileInfo; int handle; uint16_t foundpath[30]; - int size = 80; + int size = sizeof(times); int descriptor; char checkfile = BFile_FindFirst(filepath, &handle, foundpath, &fileInfo); BFile_FindClose(handle); - if(checkfile == -1) BFile_Create(filepath, BFile_File, &size); - else - { + if(checkfile == -1) + BFile_Create(filepath, BFile_File, &size); + else { descriptor = BFile_Open(filepath, BFile_ReadOnly); - for(int i = 0; i != 15; i++) - { - BFile_Read(descriptor, &retcode, 4, 4*i); - times[i] = (int)retcode; - } + BFile_Read(descriptor, times, sizeof(times), 0); BFile_Close(descriptor); } } -/*loadtime is changing the current value of the global "valeur" to set it to the current level -then it execute loadfile and read and stock in the global retcode 4 bits -at the place 4*level (times are in 4 bits) */ +/* loadtime() is changing the current value of the global "valeur" to + * set it to the current level then it execute loadfile and read and + * stock in the global retcode 4 bytes at the place 4*level (times are in + * 4 bytes) */ int loadtime(int a) { valeur = a;