From 45e3b4e50028ea868b2fa7dd4e72c7222fee845e Mon Sep 17 00:00:00 2001 From: Timothe Litt Date: Mon, 29 Feb 2016 22:24:30 -0500 Subject: [PATCH] Add parameter to dismount, better drive letter assignment, small bugs Dismount command lost drive parameter in previous commit. Under windows, limit confusion by assigning pseudo-drive letters for images more carefully. Avoid letters used by Windows. Dir /detail wasn't reporting rab$b_fsz correctly. qualifier list keyword syntax error now reported correctly. Include Windows release .exes in git. Improve conditional compilation in compat. --- extracters/ods2/ODS2-Image.exe | Bin 0 -> 66560 bytes extracters/ods2/ODS2-Image/ODS2-Image.vcxproj | 34 ++++++++- extracters/ods2/ODS2.exe | Bin 0 -> 70144 bytes extracters/ods2/ODS2.vcxproj | 29 ++++++++ extracters/ods2/compat.c | 46 ++++++++++-- extracters/ods2/compat.h | 16 +++-- extracters/ods2/diskio.c | 41 ++++++++++- extracters/ods2/ods2.c | 67 +++++++----------- 8 files changed, 174 insertions(+), 59 deletions(-) create mode 100644 extracters/ods2/ODS2-Image.exe create mode 100644 extracters/ods2/ODS2.exe diff --git a/extracters/ods2/ODS2-Image.exe b/extracters/ods2/ODS2-Image.exe new file mode 100644 index 0000000000000000000000000000000000000000..86a75a70c7676004f216557f5e80a91867422fb4 GIT binary patch literal 66560 zcmeFae|%KcnLj?0nIuD)a0eJ5ND5OOHIitfK}|A2C%`086Sy-W6D%a5O4D1`wg~qE zDuD@;Xl@R-WxM#P-D0bs(tg;kyGy$if*>ZqCZJX$y2=V$Q%miQleJN^AxM__zMpgN zOa@B3`~AN9`R|*&X70V`p7We@o?quV&w0+7nlJCP*en){9iMpIV(G$_{`~y=&wmZ$ z^^|!pPOlxLqt#c^H?ma zZ(G0SEAm$?7RT*)(T&d?`0U3g<o=@_7)iXZ z=(7blw2VyTp*ugpTmRKZzJ-j-ok#!G#_YQ}@Q>miFJ zdcxk`txS)!j4$3|XP07=qAg<<$}-0697=n)ynrbV_PX{1YHz2jbgFV)+i7`Pr)Vt= zT9ql$?zCu6TH9&md{K8SeNK1uOdMqvE{^*+8#L?7P)V-4ZuHm@mes*ALxg`{q>?!Y^6YrOm2c;^!(iXf# z8Q0pv`svkZU7eHJU!u-;xL^7$UT9_fNsP~Mp$gO(J>k|wYp28Cc1pRJe@t6pt&Puc z(z_Z*P^t#VT2al^+X0NtLj7V&{hlV)+sNDZTJjJ04+8srfpNmlQ3t*bQ~hju`)T=l zc1+uxtgO%1yU~S|lK-feZT{ zRS^=krwDtZv?B$!E81s|#wB5g4BACo#w|^aD;2l2J0**~sGF$N1u?hKO%fZgy#{=+ zfV+>7Vd?V|I&dMKfD2crEZ_?FVW^77k5chy*)Jp0!K?Co+_mw$>u}e>@1{q4ZPCmA z_3w3+A#Y>D@rsx&+M7m6jzkixb9Sbcl?yw*3ut9u7QWMoYvgfjsn8z5op7|9Iop?@ zm-Sj1zXF*#A!%PqcN|S!u1OsJsJ;Dt7vZWOuYs$#aS?<1!A24khid0-g}lsQLNGpK z1!4Y#Jz1L7xj0I!=|s>b^$xW7s+tlNB{2qkg&|(;qe5FNnv1S&+QJg`$d9rb=UPk8 zZzcu7!H@9joYAqkGE+Lk+i$j@YZZ#3GUnzDWQq$k2!+>LQED|Wo8#ziVTBhKLqjtEEy(OZ98FwCm5b)Mzo<8y#|k z$@&5#```0hpl&j8+l|}r7agn3KNhZ6>E#&ufS1CzzXr}?id$8NV;PVqrVO(Tws14r zvUZ`^7Z{>^@pp;(ki%|eDx0#lG&qqUXY}Gd1hv5#^;wi#fOu9j#@roHbs zg!+n}jC1`#wcOR2!F+AqaxPdDblQR%g`=~;Pn8wEW6Jc-jJ9s&e6(fABDDVsZBQGA zqQ`Tnj$^E4s68$}%_*622;MQHmM+(nA>*cYfT%60y= zw}|Kh*AbNQ-|-qvN3lq;N0~%w1~>ABwFP4QE$F2a;7Qrun_;P7mCh>JVbCo$m(_#0 z95jBcjfX^i$7Lvq6D~9Wd@0}0dI?RV%HKobM+3ulfF1J%T*8h$$cJ*!C8RJ|jhoeB zg!yX`XcCUPv?^;bB)yh`ELRG$u9Z1HL+9*b7p2^@6F5#SmP(049Vx}cYZpr}zIo;R zl=u8OYq_Q9U(mPOaMwN*WS_i9x-I`C%eDG)l#1v__Gq^~`ni3>$LvlT&7@t(CGDj; z-Z=~wBmDuQO|Iu-O#B@@vYPQmcD(3UEA^Lu2toiYYb{}|?p&yA7V>K~=hs@A)xbHm zWyLgeZoO6NLR+PNYCbmr7;g(; z_F2d%joee9Op0u^dKA+6ydKD>3C{qPf6Qv_qQS2HEGcV162sD&BtYP#{jBUX^7auC zERlOH?1IpK7uwOZ5(FsvRij@1tbu(_ap0?#of$pu654=sOL$^@l?FIqnR@;iTG{70 zR!P9g`y{7#4FQ5E4X3~%NoqI_@af1aPXYzrLw@C74J=$EYYIP~A8Q>tkGX@v5+~F) z?*N`)#T=T6HXMyOVK*J|p27WRKRGmwk}TOs+TvY@XUuIZM?DsvWi{H2BpTk2RvSr$ zJc(uRz@u92^|S1q#@!N@z00_(V%g6achxL=i*dJ_Wk-y=H7vW$xRY3RhjI7Fq3x)m zS>55?0r14X4emo|GEe$8k`8s456|GCs5|-YZ|U8W=DR)gkSO(2dY}=Fpzce3^9wu_ zol=*03-A%~S&q*Ne2RgnU3iJhbH?Qb<3glEVz+TQfeQgWVqVG2(b~Majb|E0mD&!D zTqF_#fu(gwA;bX)P1Rn;Jl>)$@%jOU=Q!d$j}*M6Oj@;fHC~E%+)0nrKp+~AdyTg% z0GRNE(!1%h#4E8yb`&c{3eDsCmUth*h2Ct|)+OvyR^wtby6oka+F*XKbS4e@0eLlA#8!D-?D&mM=oE^s!fgaOaa$O(^LK4tJL&OqeqUJ=$?CTBtoz3!1RTf2cd$h++hWD6#!w?P6naI^SwRDzpQ*_KKJUNC6I)m2I zdaE)cI+i9p`FlzzPb;lV6WY$=o^A1Z+T&XrE*vMc%5~8#Ubkgy7M}{xXk+J!AsV+P zv`M{WKSzTTtM+=?a&I1#WiZ5!>z6)ZsOQcrV$2#pU{L& z5WO^QYd%1D0fPEuOi4kdRo)yRZS?p&`6g+BS+gB2T8^x3Zptc3)k)lfK_Tz!f_g&> zQNzC1s>~L3*LMCOO3M=&2NihDNK8WdKX2hLM~|n;tHDHQmYgN6Nz^19X!CwRC_b>u z`&+smgplJZ3I~lB!JZFXllw!`W|RQ2&!9nT=LYqKLBQYT9l&EqYBQmESeus=Hb|a> zs=%;vFnYvWg-jN9#JdDn#kvfPk;`c*FH5#(N1{FT(k}DXftTo)Jl_N=O3&a;Y$kiP z^*50ShSZDntxOiLD1q(?ZQsj8eM`L6!omJfkM0tsJtzrk=b#;s3~;g3m8h_b%)O#h zJJ~L$jQ08dnyf&f{ZZVT!VAg$Al2#vxw!P1#Fb8%pqwTs!=D0pZ7J|N|2({Yz%b#l zUEX!b9FpGVaHVr5cy|K)9xrtR@VBJE|C>J#pZGq}Uj0wCm&T4n|6lkY!vmMOr4hgk z>C%6~3N(f~C>7Fn9}<``*j#V&8;{UNqo)W3?~)4s-4CmD0m^_NgRdi<+sA8(uQubU z8Kcw*^pw;Pw_w43ZzFvz4S;Xsh5pQ66Ki7#QQV?Fc^l{R3A@>W{3nq=*xTm)Ev^=B zLl62eVVS6?!>s5vvm!Ew#ng(}Mm{hw8I{S_5O%!-bf6?I=-5w$??#ju?0 zQOW4p&LO5b4Dd zys-b8K&?u?C{BRN!Hb~2*m%KVkXVNF+mV8j7=L)l>+y)b6Qfjt7oub7!c*VIL)_b* zQ{bm@ayOm~Y>6ll(uY4WWax3Eqa?jHP__=QgZi7s>sTY+?ZP{FJJP$LD4|1mUbqXX z_Fc#<>U(%*SL}A_Z9K=mAf3YnjRlQoN;=&WjY01vbWePsKgx?ZQhL;c6b^F)nM7U0 zBbwcXD$ybM>1J`%I^U<(6&a-mRlMZ{8SSyk^F*prawA7bpK27}&x<>|Xu3AqlSX;a z6sZt-MEyU8c@r!O*6F>ad>Xx!2Z zkUDzYF3&Uu{*ysI@SimC?i@Yt5Zaa@qx5#NbAOSZok@cGOVKkG;$McIsSy7%^gL(c z)eemayEkPz0#n}u*@fZxv#&tIB<5G`N1)YOFTJuIlfQJsZ+7)W<^rUd<~TItkt_b> zv<5abtLD=h5u|np_3J_T2{Zkwi4A6fFr{-a5y`Xl0dkoQ)+br%G!rS1AAFIVOPGnt z=`WHm2Hja;Jv4yc$?1pA;}W7u%7UV#8+5MrmLb7Q!&SY$_dou0&BW+=09Rmbxl?iv zkPd;aV8^eRNB;NOilH^S*zY-V*pVGh}8-p!7$#FSe$v(CQBZz;xSIXLl6XDxI2~5sx*IZ*w=dl9WtLkIgcBQKl9p z{t6{9V%a{!nBtAyQFfb>1&q*)+7g>fOAt~A?;&}1VU@vRN=|$`g^no|m7SSrT>Had zWh@FX8C3evs?3Cptj?4LX(tM!_aguoie*c?=&_AIiu&foXzUmPjVm`1fsiREJ;STx zzVcMuItNeTHPk~6%5!Ay@(zQzqPmOQs-WlqW!MJPHh~2o4F+oEZ;-zkNTJtQf^Zp4 zo7CH8r}A0;daQ?`_HjI5W^S%FL8g^CCfP!Z_3TuL$}eKGrS5At(@`Ivv96m?h4piJ zwsh`KWHUP<>OWq?>Fx$KccOtP2e$>Ws%7Ehr0s4uG})!3gQga(8pCTc&c~4ti%H2k zpjToZlhuQwe)oC~5Uc6GN$@L3P2v#J&pv{BX)1lfZm@YNq#!9b?biRgO5c(~%7rKC z)<4#))qoyz*6Jr8rPj!)b)i?|(FrZ|aXadOr1JF#(l>1pkgH!y)i)6&)neI$p5hlBVK+23-eepUX!mcZbV2&DuS*XjeqZ%Rtd%zx)_9rufRJ)J? zNao=T$mlmSn(IYGuN@d+b2{_lm6lil!R`XCN+vzYyL4`wo=K@}oHLV3COA38YM`(F!2G$7IyV*>5eMQr8)SK}7${u)p zXDY?eNgHR7w>NB6^5N~>=pavTMVc}fYLOg!Yl8Zk)hS(VuYgvLO_$E4VA6irj&=c$ zYeM?X$ZW7xj;OyPp`=XiMEe9&wO-;%$S}D`1L=AHyPz*Q-n+CPrEVE?LJ1n9C_y<>l;7 zzWBG0B5n{Yz~iAX$WY1YX!(4Y(881se{1mbeQKW#`3#or-j6!o8(FfrG#D&16d zP=69>L?D_!>$iN3KU_@`68fc&5TdI;m>`N1xF$YLAX>(~p?Qr3zl6O9TInMCI)U$D zB#}H{vFyiR{A*5>^@ng&JXzZzV3K2Ef+CB_!?q0AUPmPO^VY0~})mXyc&-b|*<7CQ2k- zFfsuGENL#a7*^j@ASqi^3)zgZlhbZfHLTUnOcK6o>TqmrcoYqaJ07)b+sx zO-<`*$HRuC!om;ge+Z#53C+{~o1`fvJ6bP&cVY@l`t)&5RICNMTb4+}sc;iomE;jx zmDXWMfC*zl^c6IZ=mv%D^<5UWH{f~jc4&J*%4sQ;+`mm};Z=~nZbGWnXF)@Xl0PLc zsf}?|m{1!F&Ag_5ZXMbWq)zCHeRx7-lc6pUv*Qx45MJrCpGX}U<(4bdhIg%%+XX-+ zWN^)UiP@c-0)@T?`G>Y!4XO}g_=-2=I|mASGt|Z-ob#`?r}7|t7{CVWi3Molki>nP z4M4Djvsd+AAsN5Ck*_e_8h7mB}fI3iblm`+*RY&s!zwtRRX^J zjaa5BQAQIgzy-;d_tK~gwsTwMxuDe+uoH(Wb)gkt;%>m>t#KHI4~Y|nm4AvMkY^Lr zi74$f8|}Qp|3S<{4g#08HyxqU1s8wQ#u>eiKj;Y%z@R0R+|*5KulDj-K!!5|$4$#`qE) zs{ZeW?kng28o1lE*Mafn4q!TS!Wha~!8iW$*MdfVm%IHfLw6y>$o7SD5Z#lt0^8BrQc!}T5I7_1m?I#R}iKqn!UK4 z`=%&TduEG$M4YoCE4eb%}TA~Up5)d7xfJgDN%AEbF%p5TP%3cAETmt6W=;VnCerUc4ed%nVERHci9hk~>hlvx@gFSoTgpJt+wSpO z9>(Vn_;~T0m@f?>3QkqVublt!;Jq=((^@P$glmaqoj^@iJpITtgoi`JhsDHvPn1@q zbirw|?u3y3nLCod7ME3-2d?b%ySd%tci6yqh_^0wAh35cKw}aZaGOj^iD25d-Zq&w zE`I}2Cz~Du*LL~+WP$_EUKBFJw~M-|G$o!i5>4O~AvE#s{1xv`q7MG9#@Scy$Utl8 z$p|6k>G2?{YQ|?fK0h=+CO#1l?bIr`fSGN*Inh?T@YE{+hNhk@_gm0$i#%N#Le&YL zL1a3`L2q>E4?|u!&FPsUND=MGqne~{h^YSdTgmP}@ned5O5~09LJwLc>H)Cy4-?sz zSIKj#;ArFV%YEr2NC1>9XQUt@C53qP$~>HVQ}S?DLko9~0|z&vPeFWsfX_eRW8wqI zXQI899SctcYiWogTx-eiMFj3gx07m&@~BX`4w<8yJr;Qp6FnjQ+aA1AoWjwHGG^z| z?-&!|Zm<`fjok>Fi8e(DN0*i%wGRf)ROkl$ald;k{V;3-T8JSn`>#zToz4#@FzqCV zbHj129~Y!wr5}OtFk6Q}$jx>b3vi2fOd@plwU0p(2_yP)h#uOkwhtqP{Jk@p3|tuU z_zxQly%4#_BHyWLuOTSOm~W}KBTx#Vq4HGYnKHO5C|2}8>2?wYEaOIbx3=hP@jRhT zOvAW-KE-S{u}!rgEX^fVEcCn>{4| zZk6|+yue{VVC|HjeSs{QqIk(>`^GzpMp<r(4HO#bcy&cq#w8y15rCAtStrE4Igg~d{?$! zywK=HP+E;zPzrKmmWmjqkdUO*#DojOfi{G4`Nv=?V0fc@{hLb@dd_FG*3fnn3*HlEVNt&Yr9|nGR9-EL zgQiv7KfM1XqKj~J3NsiU(%>-Y61zSr5i_|!Je?4T3BIlLU0Qzxtu?xWwj+MnYSzrP zbi&?fqw3$$U%CyvK6V4dgSIZPY}#tUX3+K!5$eeD24w>rZM&=3~JezhlGgK?>qHd6%6Ck4yt8Qb(o8FtD{Jhr_Uq<_} znabQ^VQ!3SKZVU-Jr~aK2zqEFHn$$~)<*HU?0B>n4ly+FhSbeckGwQtz#D1 z>h}f4H`>Vfs<2bqLU=!^71 z3R^f5<`4yF!D8S;bI!5R4{9d&Yy(2?D;7DzBQ@iXkRyG3($p1le2p{k)1rp?Ya#qJoNX zkt$eaRxq8_jR)D%A#kBinLtq&&`D(8N?T6$BOfT-erod+gXE@7X}`)i0lkB?n}Drz z)fZt0;<)dEGK)d}?7s(8vk-#SsaP%hbxDg;Xx|5{u?)4v;p>yH@D}?54kEIHEzZGS z7ZCXa?8V{w5vuADPG6QWp@Q;{fg!M_G*!x_$|&aIWjkQUZq%xat%&K|I8`dV^37z4 zf;V~AN;VS>#~z(xp2gNOPMrs*gU!D$`4i<<8f`DRM=s?015whqn>%;rVSJ#Kvp?Fr zbCbDw2b*m_2zyG$*B`$w%8@Ewd!-BI?<|_kHaYBuTW_$pTj6iKF^W-$zu8~ zm-xULGfgMHQAtKTCT+IlZ8m$evj~k_jL#-~YVmmrpYP!_pE$q8<<+MCg)z3yZZg1JhJj>){sI^fo40zD z0)zfwujrU<%OcF7qsJVfX!m8YR)3YF(Al&yS&y-+>!&o+#ynec4gxI+PH9?c7_^)u z)0s__hNzv1*Rg4AvKW-?DMhfJM!Ymxg!TF@bd2)^?BwjVFu-c{YNL8Kr)$ldV1;<+ zIR<{O_7#&Y7h`uPCRjU@>uXViJZfOXpwBnq zqM`L)Wt{n-d$Ab9{qxEEC4rGm#Zah`5{o=%qL!2`ch^x}zk|R4eb`kqvcXMzp_N;) z7uuB6|IHf4u+``;R1%h|Qjk8ea~a$%O5SU~+F-|;S60f#w#BYP7^y7mP1KlUv^R<{ z!0htqW;;Tl7e%{sl#jthzGGXy;Op7uG3PO)Bd{S9;*RZZd_P^+I@B0T?~-v5r7hR2 z-XH?--#X+(t+nBz)6m!@GiV~ihWWrHJbfG*Tx}nL@`p{tzsVj{+iAnD+HS|Uwrb9; zYP*9!JNdVZf4lj24*$;O-yZ($<==VyyMTWe@^9K!rnVRJ?=t@F=if{CcNPDx=HDX! zUe3Q)@b6Xpdo}-F!@ni|{RsbF$G>I%y_tV+q3=LM4Ya9&4mGet4eV3{yVSrlYGAh- zcuo!MQ3HF`zzb?%pBmV&2D;S15jD`Q22QAflWO2KHPEjH-c|!JU(Tt40X1-54d`lM zNDT}Z&otu2G>woJ9mL$kqhw$T;*mcmEg)By9#>?Vl@!la(kt#b8}miu9zpvL&|TgC z61B1tIH&w>;@{4U(&KU#%FQMi$}oqKjWoU$lQ{H;?WcurpF?r2ol1-KM%BTP{@gg% z&L&SpKSwpsQZa4I$E!BmgM~T&x*S){H*3R~NM68XD&VLu8igJ5(ioo9Uyk4#tEs}bNf&61 zu*YC7%v@_Vw){g~gUgWxlOW8zG!DW3{Zs>kjlt4K4sH3}X(0^s!@vhLD&+MpGr#-$ zA<6j>bmFo!16a`3E9wD{#j+UksmXU+8E=fQ!Lem~EJv~RSit_jQ4}sb+xD9!MS^pw2Kv8!X_R7KA@5gZ+w%+#B+dhNi3GzfPqp`FN*<`MC zyJ!IVBDu^QzH{UnVW?Dt`6U3FD3~=9NIu*C*CDt(G72pLpV@g&hGQnQ@_%+$6T>#)R~z^ zXEdWTQFwpsPzO`UxoII^S5bEpys{GcT+A~;hJksE+1cn~W1rQF3XwxNSYK?bFJzgl z%4_5f1@#3-L6sIKAI~B8YGzxHJiobQsY96?*_v%pa&VueOhX(VNDipYB~M-kIC)xM z<|+OP8{Rn`!@yqk6lfD7HS)Lq(7thO77kktPyy^paY+Z5wg^K89`^NO6G)>YTC{S@!K~))MunylvA&PJe z*obiK)QyL4&kz8b%Pl&_jRbZs4QJrlLHwmTy{>aqC#z$fM z5H%gv)aGL0sR7($IWsq`ZHo7NoMs!fk=xHZ>i1*%)VQ*16_@~2z}`SDobG#NBc-`f z25Hhj9j%X%3s#JF7s8EyFozmQ6IL9<;A~upOvKS|6S$x&@Ik(%=IGX3 zYrPU?6@{YSH5GVSS`cJo`aj?ny3RHx=faN!55g)SH!)NWRaaLuIK9+}V zKP;HX7UlMwbotJ#zfS5%>6IM_qvKzixacT3SScww-5wX7J{H1x3}S6i?}F+Bc`+9! z*X=K;HGy1q7kJ)r;r%)B8!oBE&1@-=zS-wcB&tcr4_bK3xosx!hs&)z|zwEe%~wGykXtXr*HOV zA6FI1G~r;_?yGajv*A>uU4Ai~V=_+KBZebR#;FgZfpKhdqccbxB*?Ug`}gTY2b|e4 z4!)!=rgDQZpB{3Nej({F)gGN8g)p5fA8~42hdjV%mh`MAQT`st72tq(t(tQYE~T2i9CHBQNg>(=?2-L09JI3jo{y$PKeq`_ zc~BtkeR@fQA3esX8w&~tA58!CoMzO+qK5OiMY@zo3q+m~@YJC2t^^skYvIr{h%i;@+2d^(({5hTPb3xtCq zjF9N`GQuP1Bf4zoZperQpP7z5*(k>2+uscb=gH!^66ZO9`z`^su2}RPaWFWW>3`;KG8kZ)< z)p{@b+N?I+)n_GLh+a>vhZ8G6gG8T&M5ZX7m^kPqVqLzGjqC|q66)X(e5qATnzXiJ8{TU%U0xt zxf8#D#A0&}tMXJvy9?^2eV~_GGsJBSa3<75VgPZlIJWoG0YP$!Il-azMWHn?Mn+fV zo3W+J$FVsmfgH0qekdX$)Bk47*SmfMCGjeMSXBl{k$exG+sPUbN=W91!#5^GcOr>P zblq@B3+SNG`CxsmemA$da!H1tB<$k!rNFpv7#0j*4IAZQzT9J)FFX;vRCk`$=&)ee zuX}zwsn#%HhW67~KtT@o0*19=EWg)w+0bn58`r{^sKxPRQ?(W8zDrFjH$9kt@;&1t!Rat|!}QMS~}-kjX;dsBAs0TN^Nq>4N~+AEoT6<*$q3T`K0ln}%EDuEBv z30pd`9-V9x=ndv~kqw2R_a@j#*M|?q0S0{5NB-}FuKVCFw0+usYTIYc>OnGU8`0&p z*0r?oc`FbAbTwh6*Z>K5)H&E45RYP30VS;5-ds|VtK3q8^J~1U!V6;Nu%!!FI4_7b zz$Z8ar`dMc#tp~$jKFLm;H_O^3|rhNhWB+clz?HZHyj7b_pOFx`{$*pRUWmlP_;My6!|dQIhN+0tvar{-))CU#6fhv>6*=S!1Phs? zGIWz#7~SfzD6={%?Hv{6(5+eI%-?A5tthvujUK92zQM!~8DPpZlGPt%a{`+9i7fS7 zqg%Zet-`C6z+D*B!V5y$*1UQe*U*Go{fSYqq-o8|cd~ogvYeh%E_G>feu%gs)G(3yDmYu~Q_+&J{`Z;G9yiTJu3>HvfAjMyIS(K} zV5=SbyLl1&Xogizv&DJz0ak_(#?`g|i>AhlZnayqtz_>|V}vK)#<#KFcQ1x2T2P|W zx8O)LaL@IkK7)=JKrf9$TewQCv`1F^FZWf#Z~_IEI)b{Gg_}w{6d9{pz(nlUv%_vs z>qfxkH$(hxNH994d?{Rx^WB=&ePOjG>Q3a zGV+s7?elwh3j*W*);?0<&>lV*LE9;;lhoaI#Rt!l||lLGSuL6P{d${9VKN(w61is&hR*3~y*^yfNlIfssB?6wO_* zo%J4`4-G@^_&ppONq@Y+V>bD*US=BhXW@80QJ;+h2}BBQQ9HuFQKQ9}?_eg$X2I+W z@@YD9AO6P)vae|!50mN<*4*G9`>4OQJ@0dIV znq!llhStOTZvw1L9-5PW_z~2_Yxt>+Y8Yt^3=<)3}DXbEWL zJQ12%L^RQwKbUjMVX{hohzzVTPpen}VNX+wIS!jk7CV$jB2U13)QtNqWp(FbXK5gg zd1SY;ywiqxWPld!dN$qDxtQjWcb6`@Z@a!$AB$04m`6s5 zRTWn=#uW?AB8L;R$YJ7snney9v&dnr0|K{XZ~M4%20?}mv5=Qw+Rv&IgGTYq8|O2T z1`V#aIkWzfdXveYOI8$bD1js%CRaqP(Hu--Z~ciOyur8sM7(!ydNP1e%aZd|1 zre-#yJl`!Ee$3(rOgzCfoKgh`+%izzT*JE_3Cp_9T6#*vAHA@!AX#%~{AwjAu z;e1P4PR7mi%dtP0WsCGZqZ;34fROln6&`{tdkHQfHp7n#g#6tUvUnuRixJnv?_;ji+ZX!$h3|XbGadWOFGf(mUN<>HJzvc z-?=(hZM3V64z2H#Pc7>YRqaC^srU_=8uLOYbIC7w>i zZ(T_6BS0;o-h%TITgHWN{}bMaC-C12ty2yY=X*$Io9wDGR&ozyGZW#0K+!T+NeK>^ z+)H>hV*-Hmrd**tMENh2G`Z#C*kp6;CI3VUJ;OxL)2a0IgP!ve^qgtZbBaOF3Gkrl zTue+5H#!fo2b`wnOJ~vO;OpoQ3)>OjlZNQ2uwBLU@=Cf^xYV53BSc<~c92|6i>LGf*FbzT^y=WMJ3V$y8}VkXVJC>n4u4K8zcf z$XCEJgcxU&07I2trSnrCQ|d!STQ^sczMv|%@R7m)V*;^|6zrCC{SAtg!YVs&3FO*w zJVmafEl!J^`#h-wHG{VRL&`}k?yGlF8fo+yT#JP5)JnWOrWUGqQWD-t`mq#P6KzKO z;^{Q_7%r}&dOC@GFFI%H3`~Xdx8{^Iy3ibNYICr1b^``LGD4q0cFeiqatj9$wnj%i zz*%5;5Fh&j1|@APP0Q}B zmOD<%HfU}2b`{#frmk@HR?M|P4Bux(XlHv9BnYl}VDnCRGpH%;XbM)t_{u|+dLVi$=2`V9UXt5S3wygt z(Th;Cy5#P%+RA$UD?b7w)C`#Jd;~$mzZU>@ht+T%s~b@(3Y+>WJSbvOmo8Al#l$06 z>BR1!d1i&?tQ(2oCiIUlwx^jdjSg~p!NzpK;on_G({L3*%BQyaYuOj*#Pa-JoImf3 zO-}3|2W^C-_QH6LLpXX5PF|3L8@MSj4ArNV$?+qtHdpe8%UNy_Po#lkvgQ8#Ew zybQLO94T{^%ISVz&-(v_BwqNpIj35Gvu{1NlSn%^VCstn4g|Wc24Cuvd5{np(9_|4 zT1b+jOz(2gy@0%O@4S@Mj`AFr0*Gz;9GoN!Z!@pHMoSx07%gaITTNT`1N@D zX1uM1)kJh9zb)LU0jHLmiKt(8L2YpQE^WBUhMQ8e}J^?Z0BF6M39NKSmjZ6hcj zC&+(p-MTsXY9+AB-pPNLud(O9i6|czd=k;;fC4P4%~w{^UW~h5CW{K|&x0LEFZ0RW zW%K1*%Wjl!DO)MeE^Clyl$FX;ji}85Vp_f*W;%RLIhdjFf!stZU~g}Pf*B+aB#2mc zD`vj|2Oi?KPasde&otRE3tCp}7ULB@O)m!qhtSc048c8^Bdm0#mOL2js*9ZjOt?03t+3jgjI-LPdT*!V*3w9=IO_$7}qs%|Mzzu?PwV{%pf5=#%m~ zdM88=qbT+8)4@5&o?-xSdB}~YlK?@{c_``<{u}Tb9a=B2Kwh-l5goXUZ#aE=12Fr2>&mnUmVs9++5-h@{^Pk&+v+lC3KfkB-bDGg_%N{*u#ezZiR{P#e z`DHL0t$~o!@gIM0xZfMQ@)Fz~X}Q6Ip91lmNHGW2V)j5`Xz+X9EgZ~vnSeGU_{J?9 z*qW|wxjV!6{(5X)E==>C**H^jT&pOi&b(Ou=e|DS+udM-csi*L;lKl#@JM99j=GS z^?8^hEn;AyZwSjsdT?2NNNqW+}|4m6d z4NhC(;9@)UH&G(m=aBXQ<)X~6sYy@*@i_^$a^E)5jAJ6Z7kytmXr$tX-m1TOfn&E56T@NkqQ3JUc z57=;Q38}`*zF{SeU8H*Y(rGaePBP@s_Y;`9T!doO>)*vaSfq;}HmjMw%gSwlliz1M zV;ko7r<=RtL;AtL4_+M5y9 zFT?UcOQXlfVzZmA8Tqf8Ky1frVYLwqkgl246tKEN+9*6ZgsA&k{h!Woj)3B(HiC;j z{w=jJ*JMgkD_ox-ejWxT*HczLD1#voIFeq^#_}&l|BxR2JytQsqjAT^TS%MKN|L&eUEqzEH#vV9~)z zIKz_Tiyv^}8?uZ;V!>8DrZHpS5B6}5a1d1XVhtNELQ9y!)oR@J!hy%qkHQ|pij3Pg zwiQ29R*x8rV6FZoRKtxvr|@ zPjovuB7uKehjyc2stJytqQUIVU8}Zl;W~*9VTz}dfd@Xz;kyu@A^(}i1MHvX!S=s2 z0`GaSeajx-CHY>&V6lyMt!7713p@v%*%1tdRVAVi@}s-m2(d3|@KE&I4jG>2y<~6o zwNrpT`eTU&*rTAuBrUK*)astY>V1b8_r( zmO!z`FSOkU_+>W=ZRNQ3@tAq45D|gv5#qGb0j7Nu!Tfuom+(6a zG|MPDT~g;k_?KGOhVyd*ZSi!ncroePLqUH#gG?hVX?4$#DD8gNyYuvgD4Ps9d{(XyF@;BL-%6AiJvd#MD$C$+4%mU9C zEFtPYeVs(^ID_L+bZ%jecrjHbzZuvdxJt}qJhVFuU*nc9kY z>?eJJJ%qiY?$N+rtIDy7trSAr-vA~m+=(Hfq-KxsR4tz213Ru10-X&WEwB?9)oPx> z=C(bxBIArkNLa;r9kF%1WgB7N#u>0e=);OIuCVb~{*xW3N7!T?ii*Il1`Or}VTXqI+;QZ=#zx4UIZgMLZph zc4vs8dc81#3F2vGZhL(57ky`xj5u#ovM<|9h}m)ulPMpY+85YmiNxc)b+q#O9PyRV zMg|Pfr&N>J>!64SsHqa#&LbVVLxS#L%5DhfA#SUdI5yo+u{^tlgELvpPHo8@X~u|4 zywD?TA4Mcz?7`?Io18_67usfV@}wy*0t(5UTo(Isqsvs zyH@u?IHczm5n0=yrm=^JDSL4ksyv4ibp}{TXuFIutY(j|CRd1lO80f9FoyKm=Qsyb zH|L`n@xUGmih70|T1PQCAIw1_1(??CWOchq?F3oPGvN?>n$!-~h;-V}VOj;;JrTJB z1!(df*ugYX%Z#gNNEvAdl-^BJ2T0F^P31+J>(eoU;w9UHLn%!_;W~u{I#^94dd!ZZ zyX#RFdXKk)1IkT-a~-H2JyDQ^^XctIYry5{FQY3KLrGm5ASNkB(^4Ux+dhm!(Tff8r0B(ag!T{c z#H(+z^ZFmTvUsws%gx5i4^Zw0C@QlF8yPnS2s{>=HWXR7R^uf^0{K^WIwpB_U{?L z!3h7}_=JBiX{ixEAWU`4+JfEb_#IU{{+s*!pd9zmkkb=!T++Iy$gAhV2ujoDZl|ah z>BOw?>&dea$^>(k!aMzW&4?EUZct{Z1~v z;We5aj-?fyVuhmWz+w^KHP3nxw-#%x=MS{eA&D8|2JoXp;uXdvZDxfi(4OC7+D2J( zM*BHcBWE360~`;o$4D?*;lNKC()w2hdf;HglpufFj$FLeik>$`Y0zzH?9Ic_n>bfB{ zj71Bf?RTiMq)?tJtxEbtcmaEJv}M4q_#!R8vnY3Jt<+tZWcjUIZz{x}(0(Trb7bp$ z+~xDTeB6DJ-xb^@w9mpFs~ez|C(+Xk*8!sCy|hGy^>J7462}b0poHDH$DWc)JeLcW zH!WWY?Ptk}6-KVC84ZK4>94C~)3?5Gb9b~abdVRvC2&26i2;n!LmE|$Fp**FH*P}aFl}(3u*#5e}>4L5VUvB2;r_H zh!s!1;9PTt4G$im$o{)%sp}L<5;AR^Vekuhybmq_F!~_c2UTQ7>??kbc|fhqFvwA# zW%gWqbf#9bFDQo9%3S?R6e?A-k6}kb-F|hM*LD&+5Nxl|u7tWSby+dpVkg28b(tTx z%c|J2T(!Q8)pe5@QHk9POMJ^*+wKS=tnJ8rup03m)_w-max|#!d{bky8Z^#|F~{sD zDHlfm!@Cg28Y?(Vznc)7(|U=^cYWg+}sM^QVshzu`D6i!lz> z!F2=I2P;zb0e4}W z0N%Hft@z;%sAf_diSzGnF)-kJU!GO+L^Xa>EpSp)TTbfJjjpLrR6`nAU_bfrAk#az z)q|7RgtqN8SqpR{)O0oryS19P>HQ-U?;pZ@$&arDkAe-MP<(v~wIO9a%3`(w%dMO3 z>Sl+!*{ODUAo47GH^%R1_sqV)YtZ9ZmN-E>%UinGyR7+m4$kIiCRo_^bS z=#FKvvZpRcKrn{pclW%xKoP*uy{0(Q%6x^qJiUWPhCZ@PAps47FTZ_tL^+vJ-gurUg> zK) z71`A-KzjAlZ(D2dqu?CJ)|wNyw7e#COhb9#-^-ByWd7@&_S-u$mQ`Ts$X<3M;%ox_ z(JCjzWZQ?Ta%7QO*A@LdUD#1fsunIQMTg^D!J##Xkkg!n>H~$gH`E7;)h7yA%P`%N zv_DWqagq-#K@-(l$b5hPE76{h)Wvz~2Cw?W0&LdoTfCekaCDK=4spZ-+T?q{x$QC5 z(jU~8%|wjxPj7;j#*Zs5#x|k$e}IC-D=n}OXMJduGvN>WHF?yaH25zBKTKhq`ee?~ zSgoYZq1@090tk_czaHXq3B2yIPYBhQ5;=(6uUsofwwZ&~?PH5Ph_r(SxSj+2K{ERm zbjGam*Ebqf0+GN`v=7tZ!dZP0GBfC}FG2$({i(`HwdFN1`j&Z-EqDLdZAuOjV#ELa~7X}Nc+HQoBlhDQbCT>Eq&kJcAK)a&7f?n|t< z3P-Dp&R3CvE zdJfd#Qz#yDiWmh1f4iP19V#5mvZa&W^Yy@=+XMG%#`C0;+5L9tiF#DY+l93=p{*BC zQV*Vgi4GXSnca1JQw}?B+56c~;5?qxFs43D?}-iD>1M6v=)g3%3Ht*3Hv^EWbgLS7 zj`F#MlqwFq8?x1$x7D1BUQFAHKzu`!qW2fD!vXl0k+$S1(ymBjuxD%D z{xS7O&8E(1ZC0uahSqM7LcNoE)T}x>XZ(;@NK8wKMWyi??sFIDU6l)q3437NY|#P= z`?zts$6_(Jy(E#&X_7(%K7JQslH-6Ch=4J-R)yb!rsy#kQdMQxrH^skrPd7Gr?&K~ zb-Edw9=({p>E5_k>;9e}bMg`N$P)V!ZpfyK-Gm$1{P@*4o9IQE*bL?`@bzz)+|;$V z6|*zyGuE1Fg@cWr*5ATC9C^&~KMZd`}8beGgS(eYHLhJ4!viGeY!9BtTEry$#>;FnrACLilN>fA8V5CYX5GzlDSLd03o5dwdnHjbCJebBRU6;44(twKApE$X|3C2dyw1z84t5 z{`LINu;h-`@nHR5;0mzoS7TQ>nDhZ2|6pBOUX~>nlsOTlFj>CE%wCp_?OJAd$EfmN ze$9CP8~LxYPX@aIBOVy%JAQFX$bA@>i3~r&6ZT?SHT%4uXDewx&q7VNcez83fc#_FESH7=pq2rfQcnEjVC7y=>`wg7 z#hC9h-d(0tKZSYCKtxTw?bV>|n5d7=148S@AY-<7ZSUt_KvlpF7tnyNIcH*X+hjJJ z|7joa56Xvam*9dqQ?DOIIoo9vvnpdS0By>+?bjqX*oitp9qVEu24D0L^%Eyaxeb9H zL`Xsch4;MLGdRiiCKl^B8(9z|j*|ehpyqrv`i7DiTpbU~U!pbMx3OMV_?=HXPEIvo^`6WI-#^(im5(3HPFOQqtP&Lf`G#9@R zJXVh)qUXB$5$>DS1+yVh&`32SJNaHrol6R~E0|n%-lkyBqXRoH{a)Y6 z4UPFdNiKT@CxO(1%L;9Q5%@mFY{x}?=NF($3T*4VK*3-Gbg^$;0ZxU)4Gt{8#E2uE z#$PMj-#i4SL_!u{QiPO&L4)-n{l;FdD+nb|1BW&U zU=7GMP*O9pJ|o&Pj?SMV*e}KQ_F+{OH z=t&$Z7@zTdzh(V1eoGdv58`?QK4th2Pl6wVJgAE{&N!^$Uu^b^8n&Og$6Xk7)y_|#dA2mz*bv&iq#@2)+bucd-Sp_{+)__8wYkmI?3Jg6uhvlFjNe~ts+#M9k$_!K~C8A{ZR4DuVrU_ZZrGB)U?u{mSzGqtCA=^_dj3q`0?T?vi@po13}HlVI(!E(9oK9_ z_`<5@)OD+~_T7D!1K}hAp$nfAd_97Th(nXR`!k21X94|@v{=Zmq>#z6ko%>OOJX5+ zOCed&kkdY1D=HOG>}mQi9QOJ_oC{xu(b+=xZ)0ktshQDV6Vuw+<5mA^6$apz!o3T3 zA6h9SrAB|r{2^uAY=kS}>~M{69=JQ;gtWA@q_pI;w3M_|;3KAtbYNp|`4|k;>z0Re z7*;m)syKEQV=uy_=ZKC{akVInhuZKoKnv}H(Fw{{c3?(B&Uby&tvsv~iB?a>pJAiHl!%>OY`udnT3dV`%uVmWCti6DV*C2(l@Of*Io)H{ z+fOgh=R8lu6a183->qvf9>wf-YbEZHH-472oa0~WkqoPX_Y$cDjV z>Osnc6qq`3Iu3_GtI`A4k$I+KPDsVt2&=}%t{f~wyll%!!+k)otbls}Sad&P;A-GJ zwk4m({d1=gVF%Algd)kJ>>x0c%})n_CegV~;wRlB*0_C$4Q7_|4Tdg6cj58b@jKV2v z^HBha!}LTVOs{EZjLfGFMFD#GVLP2V#x;wqCm4&Y&G+K{84>?lLRAA0DMO2owS?~? zRSL%DzVN+s@YGu`pAlMoD0~-F&FnBm-%F~QvJX3a$QTVPv}BK_YXwJo7xzIx9YBE} zL&}Dda?@XUBWBX*UrJ-g#?7Av2n^zLe60^9s$<=^pAfK1oQ!*yVnqOY+4$iAebR_1 z|Iievn89I~I2^>^yGKm%@rYtJ3||s*^C3A#$USaIzM4L6NWRbc6=C-u$0PgE2?K+> zrUrrNZ{U>TxPkc#;Cg|9nFHGiko`VvZH$c#ke!Xq#Lw=*HmmJl$jVw}Q1 zWg|h00(a3!@O6RMAbd=NP?nC}21Ab4{eW$6)klZzA5Dc?hT}|Fe!T+5RjN6M2BZXG ztFhq?LgZbf{$l1ngfx#zh8Q+z*TATb6!`X62W71~F3}Z)i|}Bm3uMH`Z1G@iWI5Z2 zcv+-8N z$Gh7+a?FaONR7|nyt?rF&R5a@+mF$%#`Km)ckhoNvT4`GX*g37m_hoBF+HH}#tzo? zI6Ct=i-0V6%&}V6T8=~!GmadBvFxW8pdR+pzxh4h1H7^1VQVTvpO-?Jz7O6qLRR8i zvp2mw1~l*gB(t&m<>VJgPF4N~;|#`gYwu+C7}Ds@LuyJVsVQ8XPIt24&a$+pqJq7xB>r6%HQDq+m-iJi9nQS{Nu}S0Gfonvtl#086=^h2T zZSHGq7-d>qASdPa?9lC*xVs;>sbGKKY5FRTB&5c87K8U3ESZLJQ?qgmcN;;)B!vU_ zy{!U2C*r8c#&LYyY=B)sch|A7%j*hhM?vYW)r2PXWYvM=@ATZl`Uon?7Qw zcN$vLS!~Otafx7DhWNPPKr$Pbe|v(B3(g;tX#aOMG(+K6F*M=St-YCB>E6|<5y0us z*92w&xw2_ghDgX@XpH66KG^UGBQXGP1N{8HH>^xojq?3I3^fmn!)oObWV;p!n6h9v z8ynX$AQj*s!uzF^^*XlAX74GnwX#% zqD25oA!6AZpZl^lXR)z689vN}*E@T2Hi0~Gy&#}HZ-At(s*!EbzQQ20L3XC9`>=@Z z<)?R{DAG3145uP~kj-On{&mY}FaSYZm-Y18LIM~a(a0uqLM=Pq5nhCEUe!hp{3hOl z08AgFQ*>CD596w={j~E4_Lm5Gbf|tkZP%18#0z?9OXa29R8$+eZa+h6fDd-GsxvU) z*w7q|SJn^LFu55_X{6genu-lvBUxLt6lMonV1!OV%N?SXsSloJWzeKE#dwD*>xWNZ zP-3@#klc+O;`W)g5Oi$H2gNfaLtbS41 zchZ0byqpB7A^qjzBo|)xj`i4*sSa$C=qXM?HrPdBO;3L|2_3;Q@+3q)gSi~f3r)zt zpoWbU7KGDIU6Qp^e?>!-&39Z}hT4$7yRX<08U7{pFcSm48aI16dT-IJ7V9GKWTG87 z=0j^zyzXe-9Ovo2me3}`cG`@0h-`e=^_L#XW^kD> z1M>L~lOLUT#H4&4fXVEIg$VROl#UBM9k9D@VR#^dn}MIwrhMRR9qmfH=Xadm*r(92 z1%@`XWI{`#bRms{P3)B^&D`1 zEPfBakNdBPr`>**u6B8yq?oGFI{o^b!1SzrOOvwpElQsECY}tK!j124xRtaUGHR1W zjxGr7T{NxMim!*H<0~H``yj}oNEWsi;$nWHJ}Vo}vuHI=MbHFOP zY)9D2kK2$ib7J=@_Q#3n%CTQW8_Nz^;)Ym!-yLfk;oDE)Dz?VD)?*k9$kNgEp_%Lm z&gOl@I_M78pVI?=-QjP|^!U$Q)1q&GXMmhG!k8ZRYK;P##PJv%cP1N6_^O=}>04B&T41{P`*AUr_d4-__?ot4|C5}B>N1HpJW4q<)g1I#0 z^&bkC!TMEg3peD_!3tQFFd%lAr5u;ws-biok^$qd7W+Sd(6}LaERz3oHa=v5`vHb{ z8!oH44kC7RzODQ*COC%9iz66u%r=pCfqtaUkg9@RK{O5+f08b-O4^&cHT)Wc7sf!| z`~cHq(z!RT&1UCjBf#A%kOSJ!?(;-1(t8#Gd%$QfA+D>8@eSM<4!GSi9AJ3YXiYZ?&KA!L?F2)PnPX=V>z)4#m@Es=y*LlY+hg zO(HLl83oWJ_Xu&TXh8*N6mSVJazKDN50hQ*2HXbA=xxfQQ4no;4^t@WZ3@g}_n5I6 zE>h7qHr5dNkjbI!D`#`=6yM@A7@d93&JwGpcq#-2meIa z0vgCn!R2w;bd+@CbUNQ3UEhXqf)y+9>{(g!4$gbAC6okPC2V%pxPCNze9ISizDJ+s z;CUo`MTun5rH@*6A5NuPoP>F!s3T`GRFZ7p<<<&r5LmX4{B}YxZxC-!I!@k=5sj9A_10FgO zDEvJb5N?h764@mAD{J2s=iY=tAK@tndy=bd#r>n{#&dW6wRic~S^Jb(`)vSz*hTBUwFKJmZpyp84=M^$&ZKg#FJ?TBARAy8o-J@QeMCYf@eepYin7y!1cE zQU*LB#ZJFug^zps>TewzTl0o1<+GH5 z{r8umH&Wi1cN94?!UO;NRAtz}atChX zt>%Js;_VjFe3^J31YLHKj@890VE@6zi6AqQ#7Hl+Lx4OI-Q=~o3jyJ`fBUl zENoI)`0IJ!bdROok@f-+Pu9~_pEUO7^a9QTHnoUU9~K7Bp?K^nqe`BMU=)pC-aZe7 zUC(O-z9ch%qPCQyWr)18`^%&|X5i5Md#7oEdec}o_Ni@1dxktZM7|Y);luZz`?757 zM%Iq9vG7+D3QIYP%OobDjJJnxL0vbYaOyy(5#VA~V>L_y4?)gWTa)@t*I>`{$(uCFC$+v4>Ix{ z%S-RK;_{P|$Qw-l{NU*aF@qc%%NqfoZS8!{Dn!E2r5-+hsZBVXn!5vrz%lhPyzHXK z)*kwI5B=LrG1GgH3sU^9?RW#vPhXuLc@&^sdT@1iYxyt=n+kfR+q7EoLCN6Mx;mWs z9Gk8~E_^A`_3%t;RVO};aO#C+NC35VY`O`NI5&8O@nzus7iFQ~sp0Ha8n3bGRzwZI zi@=AMAT<(XtiC3qruv4BEC};*en?G`tt#}gbq@YTZUas%T?*J>Nq|0&G{!#keELtQ zJEVRH4Ud*~Wos^Fnnjt4Sf;~iR8}%l>X)AiVx}LPUWzv8uWCbZ;EGoAB1-@-Dn6rb zbuv0fVGk3W!k6qo+ECJ%n%>6L1hz3X!7cKa9W*Cq?%IhL{Z-rWKd8k?V>;ANvRZn0 z3byD#UTaRFrXLKuVd@!TsR@=W{bZ!y#@a$%z_G3AImj*b@L?)AasmxIxWDQq(3l?G zvEqV$e5*$NunCWw_EUhv4qM3ZGgCn!E&86B2nqhFdw&4_w6!OcNAx`rJZAl*Kit1M zX%|&HHvOqStFUzS*w}Ox9>SLl5^AhKmv_0S-+K`lN`H6{i#vh1P`bjX3@EGQGeAgS$*tIu{ zwpHz+|I;6%|5xp%|LTY6zj-JAx7;&*fO(f3VBS?bn3uMld3oEIS8xx!oj*$JgBP|7 zyPjfx>aP9pA+7E@MDJUMpn>6hJD%xo&4(#+*HZw);k3u_e@d#*cQ|bio&Z07LKoi+ zN0x_&(3{YflXx7PE}}cTMv({~)$}aEohk=>$MQDgVRcSxD-r6-WKfuz1~IIjh48VrnF z29F_V>97m*{S(5;Zufa9HA^?9CKRB@AzFv&wV!ezS6EFrGWND3ax?M(-*Jp%EO=_{ zZH6mj!67_RJ_%_fSZ%>roQ%vuQx2l0Yp5pPZIl+N1vJ_HM}tetvCD3(VZROy|2_S~ zNqU?n$_h^=$px1l9!`bH|I?;hSSl-}qJI}nHI}y>4JCPo!x%OsPBlqHF{sOCO6lLE zW7P6@yQ)A*%t zN_a_n${+E8+6;U+ZjSM7Uj!etp=+*KLDD}~-s*2!d(iyWrJx$u!vK=tU>}`rWOA} zoJM6(m>JHX>nQ^MCE-T&hRA=gm`q~c4fKl~LclG!v7DFJJ(A7Z)a@P>2;=J-U#R}b z`rLD%6d0ZYmu$gBf#;6zB5EIY!)`hXTFpdnVd_@~N5`g@<5_tIr)nfWhxugk8Jj+n z(%H`{?Pru{aCOY&-`Akz;p{D+<7nf{mt494>u5vxszgXlT{!o4NKLiCe18OVyB~SS z@(!^7eeC}s_J4r=KhFN2VE+g4KM|i6^;YJl&KqEthz*1ff{GX2DH@ zi(tKK2<|A{XLzUId6bd*3Ce_<0hbGx52t~%!j;3-!rcVtg6n|W4EN7)pCRua_)o#T z2=^-7yKoV>Z{RLNJy*lcfiu84;9PJWa2w!g{p?=2$KalYi=e#s;7-6Dh3kXc2e$`q zC)~YocfoCd^TD;kt$=$3bwz&HZoi)j5d8sX zAn2FEOYJ3P6_s|myjT>eKCwV7b+@?#ZWm8bVk;@PH`SHbG>TS6y)z&NyrPSh9`C+O^sZd(Zl+uY-c%_MOX%@- zi0fLZ)lxpdqSNPH%hj011Wx59nAzc<r^<$~l1>zZ9nj#_&|6i^ss zmKPm&`J2TycgLzgD{#dtwt0cXc|pWR3nUz+LQ7e9qTm3~CETgE*VPviMx(yGx}|mX z_Ns!ig2vj4`pS|U^BG~dQEc-X(e3kjeX%rk1&y}4I(vP-XkSai+0y1*C9ZS&MZY^h zbwTkL44sbq;8ylugDkd!+B`VENwU}vY-2jYpPFDr1^Q2Ek)vC|2n?2@WY zh_9}xuc)r8w^dg1<~dgqjkW@-*psIn6zvz=gZ_ZH(v4vN2DG)IhQu~i*VHX8DMzF7 z#cD5F0aRYgS{AFPv4E!`(Bz}7JQ4AOcsbEDrS^t+5|?|e2TaPj*6C@Z1|`&6hcauc zY^b!u>uYzmQJIX(1lusQ?VVsF7~1jWSJl+osSS0khIX&d&A6IB5yoXGx1y$`+*ZvJ zRm`sun_Hb79qzVq&4~4_te~O+ZLYReF4*@pdkCLgU1*A@ zS!{Qs&s}ktAbn+}y{rT+$EdCX5Z!V7Yi`4+yM2kUX)IvSvo9(s2Rbu;?s1_44=QpJ zxPgmkEzK((!SFfoKB}5_86h!Gjg-D3b2Qb5la}a-n)FUZRV?k|walUx%;!1I4 z7x0l!aeP*BlGuX&h(Sy_*Zaklpi_{U)TY|Ho8omz+5Dc{04v_++Bz_=Xj>qN1ls~m zP`E$fBaw@xjJ3PEs%!$IL%qQc;21A!9M8gwxRT9HXj=S*FqxC5N8-OcZ$()}yd5!o z;3O@v1Pt>WB#VP4T5nl3@PW;M=t+FkV(l)gM!Wf7qITZoXkI(@-@U%m37M1x64q^+ zt{8Crmye;DS#_sjTqn^l}b- zy5wN=6{|qEw+zB}!QTm=t}0jopKeI7!lw%pa^UZVfA*+VpyOu;;L{}rJ@9E?{R;T` zsJk3K-BvdXKHa4eIbs!Z5Z(u$zR7nF{AGA|!KW<)`S1Z+;rxJASc3QC@aaodyWwv@ zcmRGY!pq@r$9pb(Iw~f>e~i)}whH^O89scX2GY6okw1>3UnjH0Q|XGNDn_pM7i+kXr>iDeV-^Bel#DF3z0+U z7y5Sye)JdRp>|15sj9<(MirfQj2omN466%Tg-o{ueFP5%c0-cps!?80^sR-mL$V^2 zr+oHz1D6UHce=pWnqKBRez!=nFR}_`E+sRnqkL&a4Hw%hI)F-$eQ#qd ziA(0SsGdJHLaO6pJY^T^I^E5lmM$^S$^{$7qMV)%Vhv83kk*Jyq9auZ5`;886|%hc z!c~PlL~QS(q=g>87cn-`<@2nC*y@HF1?3Ks0_Ao3{hn2jKBy?Fj+I*|ii^>mK&vyr z%9QdT2~#+uX&XQ!TtX!J_Xk&UsUd*ownK?@G35$61t#4I^Bt;{nv+L~Aa1shu9w(C zKjW<|TF7fQ2zik1P*!4lS!Ahityl-mw+vD!NdOrI1qC8Gz>ykX+XzUgFc6I_R(Yc*U7JMt`!3l!j?OubT1)9UjCr#N6ztjUg%Grf6 zBG53-2kt>&1<2bym}x-=(6=cM#+%K9(L65q%HXP1jQK-5!({AfX7ViQYSFhUrWy0n zCDB}9gU{<`k5c8)XaOh?O(N7m!(h|6z2066d4e>Ka(gAN@xffthFVY#sVZErjCX>f zof4C#w)>gh8SgK(kvipX^{%6M`+6voHKlb0xV7!ppojIdW@P{vEVjDaIz<4*8ATFG zPl4of;)>@-c7*Z#m1tf9gNFneg|Q!fl+;qBFM-a0c_bD~$lB^fUK$R>yF4^alWdFj zb2CDGxG0{5Q8}G7kZcfJeBO3m2ns{BNG5pNNlCjvI%?L0I-5}z<&o$@kcbAVkh_hP zLz1URGg#Thp+aeSB(*n6?aVMCWu=k3a6X>EFW4Z7u8Y}l&>#sTYC77`FBVDYO9;oh zCq*-y_96|np_Fk9l8+?jBh`-5Vra#PsEKn3%EKi>K_D>r16@!(+fu3m{)i+(5b;!Qhj*>p2c}5R1yQ1jG8*DPVBuVyry=uW zY+IZVsuF5vSRNBk6Y(#GKTWaLG1?Rl`E zu2gQJI7e#T4Zv6AkiW z$-YDB?+3S{L93j?CmcDul`;`1!p-AN1a65JGwQx6)5& zxz7#O-wYyV)Ra&PQ(_B+fH&TNiSUfifgpF943>Foo6d#T4@RE!=F%5;y0i?h;_%tmP z`#kOzV&P0$DPRNOhe!y6DRsr|o6klKVqzR?R#G06QB1m}pOjvbni-u4^g`{B;s}44 z5roi++D36wARC=xFKS{X(5T0f3o8*$X-m;g;y7(ivR68rVel3tkH@jTLwf`YQN__G zmXF1ODrm|Z$J{F6c3BXX zSD;X`Xi9?jZ~rJfgBJlgnLp%<=m%gtA90kM8y-RsQ+kST|}!8T4@pd*ZI5c<4mXR9;(joufuc~=7B+#Urn2c}LbQknwLN=gR}D9pktkb^wZ{r9|IK)4~dEcKVQ)nFl%oK5rYcTrfNCR|e~7$9OWopt1~QO3x*=@qUaO zI0Qq-rP&bp<1d5WfN6q^kK?MOxRPiXUlq7u8V77;q{5S2j+U}AQF?(N# z$DmoqBqxJFZG=iJ*x^dy@_ZLV=V7`9)MI7?v+17A25!x(@n#US2{OHH%?T zF7XCo4koK1%*L<)aT`G_o!G)ue9m|Hx@SUMbDI~|5@rY;7gtB^sGubhaB1j(n2%^i z#0wad#D4SqU?;J%CU%&}VSK-_TxM^Sz!rn6C{13(`!8A+B7H2rqRIgyIv_Z)Hp(uP zuod4p6ed81#)-9v#;B|erI2T@wO7|O6AV`;qDr>3J}#xLD3FwMGM-8Om&Q~o%TCLw z1RzKj(K4F(T5(=p{Zfbh!mZBBtFzl`OUl0+E5K9de&-L<8zv$KBdI*XQGlzGR^nLC z0T;fgz;FdNfHrqK7S8xGKVYAb@1nRZrKv#KRknJp*uWCr0fmU!z%iFQ16a6W`vzj= zU1Y2PS9>LFIp}wFO@kd4?k;bTuk!jO6Cz{>&b8@pb0-$HWfbA;b!onPhHtb94v3z*pk%!JL zFI3T(k#t5rVGl_ljC8n_l<^jdQz#4yxk0I?=Q8(7QK1(VGPwqFOV9&Tfs_+?g2uCs zB3%q6SHW;fGL|%nQvc>lwx9yZNFj<7G<^x8kU=Cor#&#>eDxJo00?IpQXFY5-j)`! zU&ZYT%%BimlZBio@ugUsUX#)(njfdHAW04bV3ak#|0d;I06pS4^73vq)iL4(I zjPmk$WJLk<3FR92zKA@zqEM~?VUQ#P7K*k>aLDt=_J{~o%r;8PqDaD28J>t{4{kp- z6i`D*uE;BZpow2>vGjvWSEJS4&fS- zUF?->DAL4=GGnzyP2EfnqY?wHz%a?826>#|fi`hV9OOylC7T{&gPglW5tG3sZll3w zB3ix}7fZ6u8h6(^Y!J%F05a{4t!{Y95(%;*&A%z%hHKxE4RCX`xoH8$ zPpgCwd>{k1`{z@3FlRrJg#*UG4rj+2t1~Ds^sH695nOVG~ zrmD(TUCN23126(_CP5f~&JM{|+u`EtE(9&WosCp%p9^ZBaOw;BvHnC?Cn=umbav7! zOR9kN7tknUX`oNCG*M+CS|H^?SuO5$0+VmZCjIMT12d;drOY2&eMn6EL`)|J-1T~NO4=@MndzRx=b zBeoJdmKuc;!?MMs3@w9p4O4}CS*f>~!(!P2PoO-wa+%-LjxA?x{$*Io@Hw$Yjl{4% zDwaXzBMe=}j0hF99jma@1yOX|Z|U>nUSltGjE7#1OFq5N#(q%^9Q~s4#}eWxeC~5r z@?!CW3GvSzunMoj4Gps->|gEQ;PqiGcO)LR_7m_7gk9+OkNv$D-`|^@yucl(bov8q zk`sgnQx*l?zOGWQpIi8CST!fnht>+}y_IC)j=lGATG}m)r9COdx`UqgF5wP~%tIU4#qdh6hCO_=9? znASo9MwR8pp&B9x0$W5Ci1$R3zGXRK#cm)@=6-)Q-jQ#s#e*HE)ED&M38Tg%$cv%C{7UmiD|(M3yp$54BAdNExv7OeJ;+lw zVad6PuMdBXbiP0nUlexxnp&~z7kj{yiegOGYF%nuvg9VAH?=9)fg0BcH=`7w1!h<3 z>JL(ySm=?ICMo1v>LD2vo3Ibk)#mo8cw0Jz{nVSa-Zk!~bS`Za)4m{cj5EkubLdZXeuRaA)D@gCKIa8n_NPgP~B6 z$rVbKTBFtJvHr8rR$WkLFD|IE)fU(sweXh~EL>a-S6N_Nyr7`Y?kK1!sVA!eH2f0M zcZ9wx-?~O3l9muZ3x>;;rL7Zbt0^l!o|c;L8wPqC51-;B}MBf>>@uI z#ciY(#D6mpmdV27Vf1w7k5(Z97l%HD;#?04S*npINVq71>QzxX~gRtFF`iXHn5I$kJgbfI5lhRL&b0M6e z$wp2#>jAfNgjuEZ*$7Yk=_n4B{{5fg{mn*LDy1KvR5j1z{Ka^+|EjI#x`!T`VaJzgWK>Lpc-swEld{@T4%JvB?zm8o7k^t{Du5dq@P%CF2Y2(iSRuCru9Nau&{}6(4})YoJAfghqcuT zJ}iY_te{g;9f^JD`;K~_lHwBkupMEMrIB zg_C`shYu#B4AfDHuu?esCAL#XY2h}ScpSycB>bF%@G}eJ;R91`LMFme;pmrG&gkn% z3%A0|<0w8I<2Zz{K{!zp54WQI`w{jO+;M9>JbQ{w*oLspa6`6u_!5M-AQX? zWMZ^^J+hMNq7o-H+pu2+|IM?V{t9M>@y!;49)7UIJiEo&=6BDwnC8dI9-lc@enN_G z)oz+UuB|3)@RK@??56oqcv>7bhpn`YK*>}A;>Wka%$ zWM9jYz<+J5C$nElK`3iZ9e7pQ5`5)wO$v>8#ktZvrD`qM36!R1cg-&5rlqo6| z9)(wNQ1J)FJBsU+g-V^$qFkhGRNkWWDmN&9s(eKGnDQOvuyR!SjWSzxt*St!RF$g! zN%bSuPSqo-Csog?UQxZH`jhGt)hzY(>PGd0>POW_)IZRy(Hzsfq4`RaqMf3ZYYkef zc9qtz-LAb~`+)Yh+7WHCE?YNOw@!CJ*RMOQOV&@-U#6d_U#VZCzg2&?zE{6n|4aQo z{Q>>^`j7M@`p@*28ZI|nWiT7+3@wJWhLB;0;Ss|g!#+cw;i%z+;XOl*X^Cl#Dcvku z=2}!1qovWZ!qQ^dYpE(~C|Xt&D7vjERPGHsse*vb{i;V*PpA&7-cyaLE>mmO7IlUC7PVXLRrjbL zRzItLQ~ek9S@m?ybsD?Ir}?2Kr1^>FVa?N;mo*=1zR;v;zpuSPYtdF|S88w7-l+{~ zAJ*>GzMy?oJE;8}kh@eT0(N#?y{=j3({0fGO!sr$?{tTBuj zsDDHMXZ;!dSNiFOT!Ye3Y^XG>0`#^Rwi_NW{KkOq9T}$@FEh%FdSj8X)#x*BFm@Za z8GmVf()f(=55`gBOw%lrXv#IsG3A?Vrsbw~(+j3s%r3LX>@{yP-)LE6>9PFG@~oxL z@{;8hi@wNNw5q7B$XB$XsHf=OqWg;OFM6fut)h{l&x(i%odqwNCd-lCEOX1+WVgvS z%ASx7$VO!I_ z>JD`P(ECa)*DTa5)2!3{Qq!+_U2{3$^dms(9o=7aU+6OQv-QjM&HCTzpVN=&(+u+r za>H`N9l)IX3||^%7tJ!W|XkKJq zZNA<7GxG=LGv;i|42#U7v6w9-mI})wmS0<5v%F>b)N;=9jU}}xqsUd%ioSOO*VY$3 zS#-GQ4@H7i5GsLZS+c8Svt%2$wp-<@+tB{(CiYq z9~c;x|C{_b@&WlV`EmIP`Jg;sVF9JKEBuPB1RLdFl*y{;Dz)lH)x)aCR38D$u25g2 zHme=#f201L`gwJ(W|5{zbE{^aR;JZxi?nuarM6bPMB4>eZPPxfeO`M| z`;qnw?F`-3x?Ej}&ZS$eyI=R9?nB)qy{MP#OY}?hcL9_BU4L5tcYTs!GN^FAL1!p8 z+-z_fHW=;!9saxFIm0o-aZur);iO^6a2{ASiQ&~1#;c7#FwQl~jXL00g>jkDWxUJy zhH=pNsqvgK%{0|yV6g8pZ8C*SKQ_H>`r4FgHkofTZ#4hJ{IBN8mT8t8%l9qCfVbel zJu$$aCfR+m`(?kB?UnV*4$Hoh>EvGd7WotMr{yookIFv)kGo3ItXQYmso0}Twxmnq(d|mlxWr}L4`l$MhIz=1MPSdT>wdgc@lip$2ZG6IX#Ppi! zUDJoAQggYv((C}H2h8_beqll7D{zJqo<=qq9QHx^TEzy%SIR)CgAJ-4+|D=zA5~~a=L4UoVzh4^~jmwSA#=DKbGCpm5 z-Z)_VfI&oIDg&LlOsfHtyG{APMV)z>IS35=!hES^rsZnOQOj}5+m^2^GmEY+sw-Mr zbVt#1Mg2v8D*CYK)1t46gie8-Elrb6lU**mR(6AIzRV7+^U1p8cgpXU_ky=QkNMym z`K1cIq6M^ex8gp<(~3bwr*e<-N^tmml~c7!)vofZZd3hG)uY;>GO0uAW9rG8F3t0r zcQsdO=V~9*>U0)eh0d?*(rwo5)IG0zS@*W?r0%b}3PY`7fw9WiX?)6RiE~dc0hYfdt7@$`>FOCUA;9liHD(yE2WJ0^X=l+RMZ#Xr59Z1h@-q1<`HxvIvQ$@KRy_JsNmH%atl6sh7tMp3$2EI3`!vsK`ZO(%~P`%~?M+TGeGv@fE!uW3KjMzo)Rvd?3_$kI&*eVZ|3RAbIqrfb#RrrV+m z>;6smsBSN2;1_kT=w8S8{fBM{BltJnm~OKE68#nWTz#>=TwkrP*WaXHp2aZ1u?)rPoGDq}p>QCzbs{dR+s!umuV)&ln3UCPxpu5Fzui+;c*Pk1n zF}!N{qv7v{$;L~K)y6twz}RKnVbqz-rW(vDgzKM}&YF_USDV+EJI%i}zXgo{1UUbV zIm4pFd|qa$wA5ObSZ=YnEUPV@7FtUWU^qm1zFa0BLEiJ=9hv4F^DJ|&Ip3@TA1MX> z)`NOn<~Gpq2J>d~J?8D^o#x%c_#ELFBsCMa?gGZpy? z8DxcW#WKZu#XX8`irtFG6bC?MBZ@N$L7A#dSBgp%q%DWirEGo6a*>3j4$^$&r&9oL@%S39qtX_y81 zVvZr-ATy{8RzoS~he|`7&N>YN!+OjXn+-jfF}4|Y8ynDim#8pvn2hDdN~6PAkNIN-W{_568|0LY#?6pac3=b^GwuQR95fC= RUZJu0$L}8y`0o#a{{ - + + + + + + + + Level3 @@ -49,6 +56,21 @@ $(OutDir) access;cache;compat;device;direct;rms;sysmsg;update;vmstime;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + + + + + + + + + + + + del $(SolutionDir)$(TargetName)$(TargetExt) >nil.bak 2>&1 || exit /b 0 + @@ -65,6 +87,16 @@ $(OutDir) access;cache;compat;device;direct;rms;sysmsg;update;vmstime;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + + + + copy $(OutDir)$(TargetName)$(TargetExt) $(SolutionDir)$(TargetName)$(TargetExt) + $(SolutionDir)$(TargetName)$(TargetExt) + $(OutDir)$(TargetName)($(TargetExt) + Copying released $(TargetName)$(TargetExt) + diff --git a/extracters/ods2/ODS2.exe b/extracters/ods2/ODS2.exe new file mode 100644 index 0000000000000000000000000000000000000000..09d08818d3f92c886d367242473ba66a84204412 GIT binary patch literal 70144 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%0Dv<65J~xECDuw6Vwdvhkd8 zz7OqDwo+X+W3B(p#nJ z(oDRkqLgZ+WzuG;N7^aRQgpFkh{N*$y57C7n-@Y7<= zotjpSNAn%cPc^^R^lJW~833(=;H@FeFy!70?JVuh+S|1AA%PWIoz|i)(pG96+E(oY z+BdX+(tZY6I9Zpd)9cnj8va>#UN=X7r+&5Gr~fy|zfbhT`Y-i2f#Xb|X{T|gakuda z<1dXL8`Dj7CLj9gFHO&wo;SU28ZdENplgC|)1@})8tE?Sqtf3<4@qA}FTE($%8F$U z**aOftW(w}J1zTMHbZ`ce4ad0zDWLCc|WArpXGmpH2gw7MX^v}QY?a0tWvB{v?#oa zyA|Dv2NjPfo>cr+(X04_;xCGCDKnLFr9rtAefA-Y6hBw~R(TLT_avlTQ2B{+SjnlT zs$}TBxhkt_2_&9NwL!HRW65__4?+690_m5RQ<7uLsmob|F=T7bZ*rbx^6zX;f;w4! z6Zp7By;{AUaq?00;i;P2G%G;mt(xy?9@0Fn`Gw{X#Qrfyamn})a=pz zNV`|7*A?h&x(y>#+X9m5=gxo$UV1l zvvHU4apSLyM~#0pzHc0a9QZF#a*ip@w7{e`6`9IR)fju)OkUGHru$4gOg}LF*z~07 zi0M_+8Phwa4=@ICz1V|>;&IYx(izfkOEaW7(mZJqM)z8b@Ac9qX)C0|c4@ctLFr={ z=li99l%A2kBOQ=_2uU$4{YpAXHdU4^yFoTrHea?-riaWZmX*tv%Nk^@=o9zKz9V~3 z_6X?upRyNZaq?;M6#2~<$ui|8d6m3Q?vr=RACjMu{|S<1On$4PAN}Ax#Xl7@ls72v zRc?b^`FG`4;QBns6}ReM)%~jPV7xk_dR6t7>YVBWRS;v=uGrCXu1>soYP-95T( zx?Q?Gx<_?Sf{PC5UeF!Yoz$Jtor4Uy2)RD0i`6IUQ}lE6srpR4Qs1vXsZTT{gSYn^ zP8lv5hRB$ejJ<-88Jsj0veqCqORJ>Iq%G2R={D)((gVnAve~k9S*A=1 zS-V2E8oam*qyCe!ec=5wva=ZbW99L3UapjD1u}|>=32QbQIJ~0dJdgRzrqt%-NN*JLk!qeK{{cY7aqf$E)Y4HR>YB zk`<68Thx1?K^;~1LxUPoCu)+RJ(;1OmS`%V6D)&tY1Xu8+BIIyJ(?|=ZJHgLU7CkA zk3!Zwsd)+-!vRf?=A`D7<_vl true + + false + Link @@ -54,6 +57,23 @@ + + + + + + + + + + + + + + + + del $(SolutionDir)$(TargetName)$(TargetExt) >nil.bak 2>&1 || exit /b 0 + @@ -69,6 +89,15 @@ true true + + + + + + copy $(OutDir)$(TargetName)$(TargetExt) $(TargetName)$(TargetExt) + $(TargetName)$(TargetExt) + Copying $(TargetName)$(TargetExt) + diff --git a/extracters/ods2/compat.c b/extracters/ods2/compat.c index bf2ce64..16ad669 100644 --- a/extracters/ods2/compat.c +++ b/extracters/ods2/compat.c @@ -7,13 +7,21 @@ * replacement until very recent IDEs. * Microsoft doesn't like fopen. * One needs to use a M$ call to translate system errors. + * + * Finding out about drive letter assignments is unique to windows. */ -#if defined(_MSC_VER) && _MSC_VER < 1900 - +#include +#include #include #include "compat.h" +#ifdef _WIN32 +#include +#endif + +#if defined(_MSC_VER) && _MSC_VER < 1900 + int c99_vsnprintf(char *outBuf, size_t size, const char *format, va_list ap) { int count = -1; @@ -37,10 +45,9 @@ int c99_snprintf(char *outBuf, size_t size, const char *format, ...) return count; } +#endif -#ifdef _WIN32 -#include -#include +#ifdef _MSC_VER FILE *openf( const char *filename, const char *mode ) { errno_t err; @@ -52,7 +59,9 @@ FILE *openf( const char *filename, const char *mode ) { } return NULL; } +#endif +#ifdef _WIN32 TCHAR *w32_errstr( DWORD eno, ... ) { va_list ap; @@ -71,7 +80,32 @@ TCHAR *w32_errstr( DWORD eno, ... ) { va_end(ap); return msg; } -#endif + +char *driveFromLetter( const char *letter ) { + DWORD rv = ERROR_INSUFFICIENT_BUFFER; + size_t cs = 16; + TCHAR *bufp = NULL; + + do { + if( rv == ERROR_INSUFFICIENT_BUFFER ) { + TCHAR *newp; + cs *= 2; + newp = (TCHAR *) realloc( bufp, cs ); + if( newp == NULL ) + break; + bufp = newp; + } + rv = QueryDosDevice( letter, bufp, cs ); + if( rv == 0 ) { + rv = GetLastError(); + continue; + } + return bufp; + } while( rv == ERROR_INSUFFICIENT_BUFFER ); + + free( bufp ); + return NULL; +} #endif /* For ISO C compliance, ensure that there's something in this module */ diff --git a/extracters/ods2/compat.h b/extracters/ods2/compat.h index 3676805..558d6ce 100644 --- a/extracters/ods2/compat.h +++ b/extracters/ods2/compat.h @@ -13,18 +13,20 @@ int c99_snprintf(char *outBuf, size_t size, const char *format, ...); #endif -#ifdef _WIN32 -#include -#include - +#ifdef _MSC_VER FILE *openf( const char *filename, const char *mode ); - -TCHAR *w32_errstr( DWORD eno, ... ); - #else #define openf fopen #endif +#ifdef _WIN32 +#include +#include + +TCHAR *w32_errstr( DWORD eno, ... ); +char *driveFromLetter( const char *letter ); +#endif + #define UNUSED(x) (void)(x) #endif diff --git a/extracters/ods2/diskio.c b/extracters/ods2/diskio.c index 9305b62..6705f19 100644 --- a/extracters/ods2/diskio.c +++ b/extracters/ods2/diskio.c @@ -63,20 +63,57 @@ static char drives[26][4]; * the physical device. To keep it happy, map the next free drive letter to this * filename, and use it to identify the device. phyio_init will check the mapping table * to get the actual filename to open. + * + * To minimize confusion, under Windows, try to pick a pseudo-drive letter that + * isn't in use by windows. Avoid A & B unless all >= C are in use. If we can't + * find a non-conflicting letter, use the first letter not in use. Under any other + * OS, just use the first free letter. */ char *diskio_mapfile( const char *filename, int options ) { int l, L = -1; +#ifdef _WIN32 + int ff = -1, ffa = -1; +#endif + for( l = 0; l < 26; l++ ) { - if( diskfiles[l] == NULL && L < 0 ) L = l; + if( diskfiles[l] == NULL && L < 0) { +#ifdef _WIN32 + char dl[3] = { 'A', ':', '\0' }; + dl[0] += l; + if( ff < 0 ) + ff = l; + if( driveFromLetter( dl ) == NULL) { + if( dl[0] >= 'C' ) { + if( L < 0 ) + L = l; + } else { + if( ffa < 0 ) + ffa = l; + } + } +#else + L = l; +#endif + } if( diskfiles[l] && strcmp( diskfiles[l], filename ) == 0 ) { printf( "%s is already mounted as drive %s\n", filename, drives[l] ); return NULL; } } +#ifdef _WIN32 + if( L < 0 ) { + if( ffa >= 0 ) + L = ffa; + else { + if( ff >= 0 ) + L = ff; + } + } +#endif if( L < 0 ) { printf( "No free drive letters for %s\n", filename ); - return 0; + return NULL; } snprintf(drives[L], 3, "%c:", L + 'A'); drives[L][3] = options; diff --git a/extracters/ods2/ods2.c b/extracters/ods2/ods2.c index dfc7caf..3f56090 100644 --- a/extracters/ods2/ods2.c +++ b/extracters/ods2/ods2.c @@ -1,6 +1,8 @@ #define MODULE_NAME ODS2 -/* Feb-2016, v1.4 add readline support, dir/full etc */ +/* Feb-2016, v1.4 add readline support, dir/full etc + * See git commit messages for details. + */ /* Jul-2003, v1.3hb, some extensions by Hartmut Becker */ @@ -51,7 +53,8 @@ * Feb 2016 Timothe Litt * Bug fixes, readline support, build on NT without wnaspi32, * Decode error messages, patch from vms2linux.de. VS project files. - * Rework command parsing and help. Bugs, bugs & bugs. + * Rework command parsing and help. Bugs, bugs & bugs. See git + * commit history for details. * * 31-AUG-2001 01:04 Hunter Goatley * @@ -174,7 +177,7 @@ struct qual { struct param; struct CMDSET; -typedef const char * (hlpfunc_t)(struct CMDSET *cmd, struct param *p, int argc, char **argv); +typedef const char *(hlpfunc_t)( struct CMDSET *cmd, struct param *p, int argc, char **argv ); struct param { const char *name; @@ -207,7 +210,8 @@ static int vms_qual = 1; static int verify_cmd = 1; /* checkquals: Given valid qualifier definitions, process qualifer - * list from a command left to right + * list from a command left to right. Also handles parameters and + * qualifier values (/Qual=value). */ int checkquals(int result, struct qual qualset[],int qualc,char *qualv[]) @@ -254,7 +258,7 @@ int checkquals(int result, struct qual qualset[],int qualc,char *qualv[]) qv++; nvp = strchr( qv, ')' ); if( nvp == NULL ) { - printf( "%%ODS2-W-NQP, %c%s is missing ')'\n", + printf( "%%ODS2-W-NQP, %c%s %s is missing ')'\n", toupper( *type ), type+1, qualv[i] ); return -1; } @@ -340,7 +344,7 @@ void pwrap( int *pos, const char *fmt, ... ) { /* dir: a directory routine */ -#define dir_extra (dir_date|dir_fileid|dir_owner|dir_prot|dir_size) +#define dir_extra (dir_date | dir_fileid | dir_owner | dir_prot | dir_size) #define dir_date (1 << 0) #define dir_fileid (1 << 1) #define dir_owner (1 << 2) @@ -358,12 +362,12 @@ void pwrap( int *pos, const char *fmt, ... ) { #define dir_created (1 << 12) #define dir_expired (1 << 13) #define dir_modified (1 << 14) +#define dir_dates (dir_backup | dir_created | dir_expired | dir_modified) #define dir_allocated (1 << 15) #define dir_used (1 << 16) #define dir_sizes (dir_allocated | dir_used) -#define dir_dates (dir_backup|dir_created|dir_expired|dir_modified) #define dir_default (dir_heading|dir_names|dir_trailing) struct qual datekwds[] = { {"created", dir_created, 0, NV, "Date file created (default)"}, @@ -405,7 +409,7 @@ struct qual dirquals[] = { {"brief", dir_default, ~dir_default, NV, int dir_defopt = dir_default; struct param dirpars[] = { {"filespec", OPT, VMSFS, NOPA, "for files to select. Wildcards are allowed."}, - { NULL, 0, 0, NOPA, NULL } + { NULL, 0, 0, NOPA, NULL } }; void dirtotal( int options, int size, int alloc ) { @@ -496,7 +500,7 @@ unsigned dir(int argc,char *argv[],int qualc,char *qualv[]) char dir[NAM$C_MAXRSS + 1]; int namelen; int dirlen = 0; - int dirfiles = 0,dircount = 0; + int dirfiles = 0, dircount = 0; int dirblocks = 0, diralloc = 0, totblocks = 0, totalloc = 0; int printcol = 0; #ifdef DEBUG @@ -509,7 +513,7 @@ unsigned dir(int argc,char *argv[],int qualc,char *qualv[]) while ((sts = sys_search(&fab)) & 1) { if (dirlen != nam.nam$b_dev + nam.nam$b_dir || - memcmp(rsa,dir,nam.nam$b_dev + nam.nam$b_dir) != 0) { + memcmp(rsa, dir, nam.nam$b_dev + nam.nam$b_dir) != 0) { if (dirfiles > 0 && (options & dir_trailing)) { if (printcol > 0) printf("\n"); printf("\nTotal of %d file%s",dirfiles,(dirfiles == 1 ? "" : "s")); @@ -643,8 +647,8 @@ unsigned dir(int argc,char *argv[],int qualc,char *qualv[]) pwrap( &pos, "Fixed length %u byte records", fab.fab$w_mrs ); break; case FAB$C_VAR: pwrap( &pos, "Variable length, maximum %u bytes", fab.fab$w_mrs ); break; - case FAB$C_VFC : - pwrap( &pos, "Variable length, fixed carriage control %u, maximum %u bytes", fab.fab$w_mrs ); break; + case FAB$C_VFC: + pwrap( &pos, "Variable length, fixed carriage control %u, maximum %u bytes", (fab.fab$b_fsz? fab.fab$b_fsz: 2), fab.fab$w_mrs ); break; case FAB$C_STM: pwrap( &pos, "Stream" ); break; case FAB$C_STMLF: @@ -1251,34 +1255,6 @@ unsigned extend(int argc,char *argv[],int qualc,char *qualv[]) } -#if defined( _WIN32 ) && !defined( DISKIMAGE ) -char *driveFromLetter( const char *letter ) { - DWORD rv = ERROR_INSUFFICIENT_BUFFER; - size_t cs = 16; - TCHAR *bufp = NULL; - - do { - if( rv == ERROR_INSUFFICIENT_BUFFER ) { - TCHAR *newp; - cs *= 2; - newp = (TCHAR *) realloc( bufp, cs ); - if( newp == NULL ) - break; - bufp = newp; - } - rv = QueryDosDevice( letter, bufp, cs ); - if( rv == 0 ) { - rv = GetLastError(); - continue; - } - return bufp; - } while( rv == ERROR_INSUFFICIENT_BUFFER ); - - free( bufp ); - return NULL; -} -#endif - /* show: version */ #define MNAMEX(n) #n @@ -1497,7 +1473,7 @@ const char * sethelp( struct CMDSET *cmd, struct param *p, int argc, char **argv default: abort(); } - return NULL; + return NULL; } unsigned set(int argc,char *argv[],int qualc,char *qualv[]) @@ -1555,15 +1531,20 @@ unsigned set(int argc,char *argv[],int qualc,char *qualv[]) /* The bits we need when we don't have real VMS routines underneath... */ +struct param dmopars[] = { {"drive_letter", REQ, STRING, NOPA, "Drive containing volume to dismount", }, + {NULL, 0, 0, NOPA, NULL } +}; + unsigned dodismount(int argc,char *argv[],int qualc,char *qualv[]) { struct DEV *dev; - int sts = device_lookup(strlen(argv[1]),argv[1],0,&dev); + int sts; UNUSED(argc); UNUSED(qualc); UNUSED(qualv); + sts = device_lookup(strlen(argv[1]),argv[1],0,&dev); if (sts & 1) { if (dev->vcb != NULL) { sts = dismount(dev->vcb); @@ -1893,7 +1874,7 @@ struct CMDSET cmdset[] = { { "search", search, 0,NULL, searchpars, "Search VMS file for a string", }, { "set", set, 0,NULL, setpars, "Set PARAMETER - set HELP for list", }, #ifndef VMSIO - { "dismount", dodismount,0,NULL, NULL, "Dismount a VMS volume", }, + { "dismount", dodismount,0,NULL, dmopars, "Dismount a VMS volume", }, { "mount", domount, 0,mouquals, moupars, "Mount a VMS volume", }, { "statistics",statis, 0,NULL, NULL, "Display debugging statistics", }, #endif