From 7b55e994ecc2ed973d2c9e2991a39636c945c44f Mon Sep 17 00:00:00 2001 From: TomCh Date: Sun, 29 Aug 2021 11:39:51 +0100 Subject: [PATCH] Config GUI for DiskII card in slot-5 & improved slot config in Registry (#975, #977, PR #978) Change to using Registry's 'Configuration\Slot n' for disk ii image pathnames (was 'Preferences'). Delete Registry's 'Configuration\Slot n' section each time there's a change of card. Add same functionality to conf.ini. LoadConfiguration(): load from the new Slot-n section (or otherwise the old legacy key). Only update Registry's 'Starting Directory' for s6,d1. Update help doc. --- help/cfg-disk.html | 25 +++- help/img/disk.png | Bin 35119 -> 33156 bytes resource/Applewin.rc | 42 +++--- resource/resource.h | 15 +- source/Common.h | 13 +- source/Configuration/PageDisk.cpp | 136 ++++++++++++++----- source/Configuration/PageDisk.h | 5 +- source/Configuration/PropertySheetHelper.cpp | 27 ++-- source/Configuration/PropertySheetHelper.h | 4 +- source/Disk.cpp | 42 +++--- source/Disk2CardManager.cpp | 2 - source/Memory.cpp | 2 +- source/Registry.cpp | 62 ++++++++- source/Registry.h | 3 + source/Utilities.cpp | 25 +++- 15 files changed, 272 insertions(+), 131 deletions(-) diff --git a/help/cfg-disk.html b/help/cfg-disk.html index 67df107c..0cb4ca85 100644 --- a/help/cfg-disk.html +++ b/help/cfg-disk.html @@ -9,26 +9,35 @@
Disk settings

Floppy Controller Settings:

-

Disk Access Speed:
+

Enhanced disk access speed:
Here you can choose the speed at which the system can access an emulated floppy disk drive. By default, you would want "Enhanced Speed" so that data can be accessed as fast as possible. However, it is also possible that certain programs might depend on the "Authentic Speed" to function properly. This is the speed at which the real hardware -would access data from your drives. +would access data from your drives.

-

Disk 1/2 drop-down menus:
-These menus allow you to select floppy disk images (.dsk files) to -'insert' into the +

Disk 1/2 drop-down menus (slot 6):
+These menus allow you to select floppy disk images to 'insert' into the emulated floppy drives 1 and 2. This can also be done during emulation by using the toolbar or using the F3/F4 keys. Diskettes can be swapped by pressing F5 during emulation. You can also eject images from this menu.

+

Enable Disk II controller in slot 5:
+A floppy controller card can be plugged into slot 5 by checking this box. +

+ +

Disk 1/2 drop-down menus (slot 5):
+You can select floppy disk images to 'insert' into the +emulated floppy drives 1 and 2. +

+
+

Hard disk Controller Settings:

Enable hard disk controller in slot 7:
-A hard disk controller (or interface) card can be plugged in to slot 7 by checking this box. +A hard disk controller (or interface) card can be plugged into slot 7 by checking this box. See Hard disk Images for more details.

@@ -41,8 +50,10 @@ WARNING! If done during image access this could result in undefined behavior (eg These menus allow you to select hard disk images (eg. .hdv files) to connect to the emulated hard disk controller card. You can also unplug images from this menu.

+
-

Path to CiderPress:
+ +

CiderPress path:
Use this to specify where CiderPress is installed.
The right mouse button context menu on either of the drive icons allows you to open CiderPress with the image in the drive.

diff --git a/help/img/disk.png b/help/img/disk.png index b720b226ff972c34a9272b11b9d8f578ab5c6c5a..322a728cee6cb9d7203bb55181d80717a35db62e 100644 GIT binary patch literal 33156 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 O{8LlXf|n~=hyEW|GQ{@) literal 35119 zcmYIvbyOQ)v^7wI1&89aNU>rG?ykiOv@}40B)GeKaMwa`htfjP;_j|3?nMg}C={13 zzxUo+-ygGPZr04?&b{ZJv-dgsM!nTkCcvY?LqkI&P*qXTK|@1_qmD5g4Ad`BcELK- z3EfpkSq|;n1l<9ufoUnLA&Z7qlK{Mj0Z?sRCl!5HG&I8A{|@v)$IoVHXpw!Y3bOCK zjE~!~y~veY8YEjSuZmB^TiN^%v+dRSsMH07x`jj#QKX_Yi%5LD?ay>?<$_#ff@Dak zgK?NFlR~HiGvu z1Pd+S-H)*)Y!4p|5_-jI&A%2CJf@c|J=uoLKRMQ2Jx$F#CD?~A1pL;c3I-)a}w|l<1GhBMJ!{TqhtqFC<2p20@?aOf5&T*vB;_FwlKGI<&+~9`9 z8~$sxRd~XX9d=dHcY4dJUiXxfv(Bwg0)~O*kDAjot&3T<@JHA@8eogNwQc`4sf0sr)xZ(E+X${h%C-u}sTrwYj`q^h zHfeL`1l8eHHr94w#9Vk=Y|7y}lZ&iprlby0&Chl_ zLT#Sy!AP2pH*Ty7=rd_3@H+XJ@c)P~warFGYBDp61rjgrgbd9qDR)YVwb;t2HzvT> z>B#Qp2Av%fj4mdcu01!;&Q9XA_QBw@2US%`HnywG)8#rG?52U{(K*2X{IpLwM-pAWyA7|fcG)b_lHCd>0%t3S4-tXf;~zW(^$ zuaC#&dS!9cGd(MS5|2fkk@prY~rlw@gLk z?r3wh1U9cBiQ+ECm#5A8@_WQwSmP?#9QX1%qO3lE(u?fmzmH~6rt-VcSMa{3Yhh{Q z3sx#H>z_CxQxl@dKRwjoXnv-)-s-7KdAVf*{RM|pxq(RUO6+mluty?1CzJ1>)bgiAiMl7M_0|ns}*zPIgL* z4mOgG?GA4rRw?M+YR5fWWn+Qgty>oF3z|FUm2>zRwN)aPN{)4VAdVYq!UemUe5pqh|HQn%SI zg)MA(-j^a?Ow6C|-YNagQ1?2x87raWOAknHzHp(qsjDdYkWuwv#*c%FJ3mKF{|Bpq zRC@D;`flwkwRIWaj3&rrp`*?*J-&>`pQPUE{Zt`Ba5+J#k40Pa?1HmlU1DjofGt-Npt6`E}TV=RzA83(*$yPH2IVR_(lgmc#_%OAs~FYP-lwn?61SyGXeQR}e_ zZ$f6P=jOf>kSzD|aUtPnB>-ut?LvEiDl6Tikr7m~qHr zNx)Sk%!T6q#6O+Qw!bnnCn~o|NK`z$g=5|d9d4f+5aqwZ$jO_*9ziW;3&BJ2!>|s1 zlYQ}Lf!a!;y%@z-(=Rjn>7W27MhL!=K~2z1bT>XlZ;vrG1(r_N5QofXo}$7Q5TuQS zc=cZq)wam$KpzH$L|uM191g#VLXb;T?hCquU7|Z=)oua201hb15Zuyq$Hg9z!i~pXFd=29&MVRHR+l4v3N~fkcOdpXvqyoo|`nN z)f6#b#rFd1uvM3WKn28@-CcO1I5Py>ltKL}U2x;Mjm1=5hJt;vrh3ZSDAnN;O?5v{ zKPJ#LLF_gAr8`^!UyRLEp^uZ9ia9)(#4leqRz_*+4G7LdYpxQs|7_A~!;G4O z0WgCXsDy_kkY8e|r0RppW++-=k8t%Qc6KeG6+aK^w=F6HVPJG(at!proI>rfHb5V@ ziixX{wNxP-GSx3tNa|Ce-AXS{gQ&~-IJ^vC(pc0SSPYqamI=m*WM~kp;jj$=3uUv9 z1-e<+OJ%B|jbac~76~EDYx1H;id-E~viNG@ourI0)lsmb5j=6?rr>1SypeL=w7Jh; zqa5*gsU9hsP3%gp8Oxy+E1E>*`kG@G{~WNZrV36^DXe;>7??)x|4GyXo=?b}O0NV( zg$7=>e!re2(JH~1%bK)bQS}2wxHS=E@JYLsmBUXBT?+Z(QP=nOz{0J-t3hSE&ZkCf zO_N8LIXFh&3d>=VVE%{vuL|br`OgM-KJgfI&=ac~)bM-neCz*;1bVPk!Fgnw)jez5 zy#-eRt;u>xI}8a_#@50IeNma*DY%@TE^IUF^gWy&HcI-Jm)Cy1F@GBexzmmC26uaw z_Z`=SM8rHf>-2_T6Q!NnqAb<HKvmAGuD>45{bgYh?**Y zDtYg|&!6Lqn7ShgdwUNq(7_nb;%@A*NSTdky3nTchy-?_e%<@1OJAjwwb`r-xCKDL zcweKJ{n8f1D%3e!F`otw6pkUT-v@UqDQrBph z)l_*?{!A)KV^|C^zP8U2JGwa@g6J0n3UWweMgH`3Tk%x5!WKWwj%(m2xiRP_R(HVx!ap4>~D4|BO_ zQca80OQGo7+AE^W=eQ=fy%8}SC9yBTE|k-%GP(*_PRCd0GI*X`O_TC;F^G*rX0rN7 zcyM)ZPK$=)_j$`yRH%yFA8Qp~0aDvyx0oqut>`-&b7fJnid|+q0ckbyY)?X4P$xZLQ!)K>NYRI2!@cNoD{v| zS5@0{iLbiqnF9dM5wj6(*|htM@gI=-#TMG4hTTckvE1jgLX7CLX<*569OhJ2FjaU( zA5|!UOfA-=x^m+IZT-aqM~w9pm?yY|)VT_~&+P^M>P?6h2;+e)HvgQ2%C6^tFCsy_{F{G;Z5;He5K&*;~Xk$7zy?>#_;PA69xrzGy z)>*sd8#Mk9K5-+=O1}N~??3bE5-BF%gq)b8$AN?KEYC5#MM2JDJH4Sl`iyrL5l4CS zeomUFo1)!=yO=NY$oyO!PRpBRE%&f;n6Zta@wZM~1{Ck0ABkD?20j`S#6Y`IRACn@ zy-p}$tl;u$5_h2Ga*S|MGE2|Mxcc`h1usaQ95acd;QH@no}l{54WYFwhhS=6+WvOgFUZ1#+A%xaW>Yca&7l^b3o^&dv?g(%)GUTVQc!wHsPEH zfIQ48f=XenlHUqfxJg%KMZYJz)`!yASZ>lLNhf#+iq{pqNy!QuB$|J;e$@3-?gi@a(we3>BT*A7OUsK}gM_{u|WVhj~b01O;J_2U??n zg0%-eI@GFc)v$F)BpoX48{$-A>r8eMm$=3(QfGfw~&H z$F+nq2B5z=WdAEO6_?VCx5g{+Du6;v{T8#w7kD;RP}?Xrg9<0>IXX^Kp%!rxqPHhm zFNmCvYu~Q_Xbe`zA3iyZ$w0;RS*AGOHG7C_$PJMK?dDDf=8&_;28;6bxQKED;nP#l zkztSU7FThMvy)G38_NfRMZJA6Ti7MSp8o+ABPi#_9{QN(5dYKDvd-^3Q_*>F}bydV=YKto5|7pc_F?oS-F zPx4pdUMdL#i=#=D_u3lBfW@j)t;Wdxu-Ab(3sQ&xXmQpbGB7iV^%O1a%uH*$H48B8 z#wEb3cNqG!Oexy|I@Rbytz@Lv&xyM*P)xwx`J{`y3*kl5hG`8@*+iq@pWQ5|8)E1O zrF}%LdIm@kIUU9MP|=EF!b9c!55f}NwfiBU&5Yr>$PS)G5q%Xsau zP?r5d?XSqDOB>{SR(Eyv9g@|OQ}8N9q4R6SfT1)3q(JB+kMQ|UHK;^0n>8ZMaasgE z;>>P1yc#)ni1s#_nUCDbERdotAn^W(M`+nLrS>wovj^^_Sj5QG|GT#DllWFzIvgLv zY0{_xW--#T5n9OM3@}Z48@dyhoi1r+q4Z>3-d=`5rs`-q1-6*BRbf$5^rR!X896;o zkBDe|Ni#fj6#h6AsUNSWsX|q{VZq=bh8DqR&G;{arre30zaZ8jBtKag@Rno2IO0{*SG&lj zMrn(5wZXvZz;Ur`p0VDVn&%xND%u1OUpbkBLaJ%t9PGwWP1OriH)3h z*Jqg*Y}ozyL_H>dkp14Yaxdmh*{r*1+_Bm& z3ol)}6lu`Y*dI?>`9>&-iwnFyoU*#&4BuQBDT1SB6V;@(#V7g^!2w%fy`HsO&T!!uE z3SH~*_+O~(#L_vy7_YAlZ2u{Pc{x#x-l)WIR8K*w$BQv5u9%&mK;4WC%W6n!NVK`e z-mXex_&IK5w$JG%ew@|Zv2t_`eo^vIbE-ewa&k$nf)cJkB}ARhT-Ym8)&b?pdv-Tb zP_R_ciy3hzRaDliOJSbqSBoEU$h*R4Xkf0k)v2ilR3ZZ3c)@21k&Xp#0_Rboo8~iq zvjQoBWKM&zoMf;leK3XhU)-hRw)npV~ z9$eexL5i*2ZW!MsS0kS*UFpT*C>u;4gy4w9@rkvlp{a3FaarN>2@yU^Y^3IJgG?Dg zXgHuWAt1;pXX$-mdG<$QE-wpkmRIl?fSIxb1T}?9a#Ig(i=ZC9aMeYw*xtX+$!7n_nEJSQ#;p z5$~_e6^yo{^7Hi%XT@*{G*!RxH-`% zRbEmO2hEf&*%?_r|1IHSE~g5c85LTN6xhH@;p(vmg(bpjIi8CdBk|PL?nTQLN?gS+82 zc(ML_AJkEt@6k4^nY{e=$rm?e~hpM$=(Jl$HJ1pl{yN4j=CabJgL5=Rc6?1WX27+&V z%e8Gr2MjGWY|jS+#rzL|gg7oeG(CNthe%@Pcq0}6v*GXrk?qNwEa8YY8`_p_$Yw1^ zgQn`DIh*j2RC|G!Gq&NpwrT6%Z}x}T*>!h6!dJg4FWMCiU`6NK+w}a=J@h<5&MwX| zx(xcHT5~Xx49o0%tBdi5{XS9=po%Q1{oZrCWmaM3aW?E;0n#xvjTkyU^ib{|$==Wh&Y8{aX7oqn@B5X<}+gSA1iKd3GBrs~W*zu{bn+k{Zb>Xt!R*tu<7 z2*$|VFV|+AdCPXBHQ2=L!KJd86)suqxu+|HuFjB!d=nCX9~9QiylYOBo3W`C63?>A zhE8@iv?d-e_nKtd0Rma>?u*n5v1*d_#stG(nD)`-DhnJCxGFiJR-c4279|exBnSv$ z_?#ja0ca(}IM>YzQq(o0c(9oHNhW3}D+*{G%~F}pbl5kT@)$x~%F8bk75TO&{tF_n zijO|(`!kQp0cGk}Mx{^Vk69=5sH(jj;TV^xJcv_Y&QcJh`mS|xahxR}^&myj-B5IO0f$vlSB-;>VeJrBWrAGN zFboMZJkNTEiy2OJ_P1tVHVaP4`Cit&+WAK0cc0Ko$;NBD?x!EIdqAIQ>1LICZgajv zpH+3V(3Wp{UKl?v>}JeR`*-0d?IlRv%2nC?cMQK+h2mag+?d3tptWgH(JTm*HlyYlE>4=c*(P!W zpjW0Y6Do_YN+1f9>~wWWGm5XnS$t!eR(T|r5hd189^;V%1qiilGUtH5S}i2wO{qtf zkcS|KvhX}B=#+jeC=CO|52uX>G4WFMsgO86&(BSWj8$fd7t`vHNR{fH?r*V8XeSAddioqjL(zIeJ|QK^Cp{ zWw_q=2tt_}z2>Vou3@sLg`2WxE6j+D@28HxJhn@G5pkO4x#R$^eBQa*a9Vk36{y&lp6+>=xLhgk(MXuFDwY}^(QsEK?W7(= zGE2HCH;9A`fMpl^3L>YkL&r?yk?bZHXO1BDsk@tO_}rdn-W$4@YnvnuC*mW~Ph>yG z=e(Wc44}Jcoli3QB8_KhFS8%-?@k5g&N)n=^06p;A|PkgQ4jOBK=*_4 zh{I&Pv1^F}G%&3di;QQjaO6=%RC0)RU5A@8)+*Lope8U^7avKaQ~#nZf1J4ZIR=G7 zG|A?Fa2~-IGfl%K6>WZ{*Edc1e*cGsM7Nw6O!hxq-|aY9s8*J$Pt2RB-}Mkhsg|VY zWK7IuQA{Xn0cL()Of>-Op24%n--;whP>KctIynxnZ)|z%Pa5Dxi%8K?rOA(UAb!Pj z(rfuk%9NKA27K&Lv6HXt43E=eB|UYagI1bG@5PRrBQDJ?Ev|g{%jUDZ+tAEqfD;;Pa@{{!Y+Ai)SmZF5U=St- zd*u|XHH2~B$;Bv14-LbsSp^}-$kdQzEk**3rQbBbU@3vU6U~DGa8dL zjafB_f5ogI=Njf&_x7WDue}fFG%zSFs(xL4F|RNZ-ZWoUcRXY*WU zpGb+fAgiL3$3RlbreE1DgBcid{5Y#~2ki@f2e-rUA&(OY4{M~Q3%__lpPW-yT!W<( zwdQd@RZ_P zCCrx3H33h4KB6+A{u%nym3Bs;QWcX{UVjo95eLn)HDtz6kyyfH{vGQAN7RJrtOtuS zJVrV*xsm&I>npnnY?TQq$Va;Dw;~*+P&<2nT6 zj$@FmNXkKDWrJ|vaQe*bhp3xi70i}k0`X<2IIht`q2S0Qgb6yMPAI(T2TY{oIUU6X zV0M~8Q6NO|=rC2kkFnXymFtdg2-4DvSdH)J13qAu1p!()VgeUa`GARt*fES^28ffc zMUq%(5*(?**|(^{1V{#=0|V$oStyV6Vl;fUZsG`Oz(Q6x;ScA!(WU+0@S`Uzje|S8 zr#TU(_z|E(fS1A8n@vbBr_i6gpM~8?Jw1grMKJ?$#^Me?ZqJH@;$MFE-uhfgrfi=j zV6(TaZLX{I2bZpy*J?X>gXA=61E$RRD`cDGE=1{wfTr1UWXNb+yCkLjjGIi!K8P)_ z$$KfaT`gI+r|_Ato3#H8FjlY>tTYDsc>gIjYX8W7$erxNk%C-}-FWWBmcLtm!iXYM zd-Cf0_e~EX{|3Nc=f0`>EM5+bE-lKoxI}e~@H%;rT2gDr897YxL>3|#Fy>Q5=Gt!} zB;N0){NU4|s2OI;ES_*A-_E~TBf!GYcv)#s*X}odsdM42;i%4;Ps^?&9~>TP&ZPlS z+PN;FlI6-UtJ8=sR?AK01u@YLo5V8AekH>`^Mjo;dMqLiKH)wyuKAwZ%IMpBJ8Xv; z45L|n|6DqL(vpd(nBpXdKU;%f5~9=_UBiFy?X;G<7m`@6b@6Tcy*L?@RPCZvcB(FE zT8;OkUF@b(yvplL(ujBP9c9=N4Yp2HqWM17D%&eYT1!h7rqhhrNy`fvF&M5=^*ISt zp)SCcBO(7CT&RWTrL(}1=r3=fEg7P{^1ixN4rQ<1)pD&~v_5g&+|YH_(Q2>oyVWks z^&OORYbLi=Ot2jv?Y?uN8FzA^=ZvVo=#VE-GFxm+25_(zR5a!oD65j89T6~%<{R(9zvuCLdude+c^{K}Z500;yx%_mS~poW+|k5(N4BeG zTg&@l27(DRhAP=w;<-##j7hfhU145jzAy3i#&xA^n{ARk==e2?=gF@`9!$coJBLp8 z)B~1n{9x`7H_TBI3TKHE*NM4AmC*9qgB_-fYZO-kRoOTiUh=+{F_3N4Cbze2cN1Ur zc;Dpz{I;k1okt*fokw%hpIjzeXODhupuu>R@?Sh3{TA&v!mD8O+9td5#ip#3MZdb; z>E~2}T}OmC9-X4%mDT-Csvld=lh?O$_|c+z>4<~Z2gfzpE7m6+;|u9v$7>hxpid4J zrs~_*)8yp} z>-urNHFcy=%s4@IpbQb4($o(A@B2w&1`%>hW*iDsc+_D7@c;ZVY5TkEH7cwAhJ67* zE_6Gk0{%)(>(5Zt9Ztf9k-A(&?fK>B=T|F#!J%F_dN1LGtFf=!_Za zw7IXVK7sj{JEqIDzfP>g85*uCcx3Tx&mHl)>efX_-Mzgk3-y(Fc$;AP;?K<(vt*us z{k&_!rNb%YBwXvl`r2$=N$b-7-mQ~W>rU8vp!1+^Z1SJuE!`ttCj(x<*sYoLZihzR z@$B~ET3p`2&;5g3f;_*@%@j!*iRp*t!FB)38qZvB%ol4%&0+p6>GY!M^@XWa=(Fc! za}(tX$(j7|P6vtzK@|;Ea17A_T{)PANOBUt6 zabTw69_4PMnhiPe72j!-j!n?|nHAbh zLN7vvu^Ta=R}UA~n{rQNED+@SQXDiV1TnOP_qq1P7Yt}twFUNnF>jU zqE>3xw0cnjg3pi21!7idDeT}V(d0K7&UH+VbOeud!eot= z)>oI*OkR}m>Q~U0tqP+5iz=C|A-7a_tfPWH-lUD~Fj2@lK z;1L1?8Zb%^8D>g|%_yp3%^FQ>lvk@AGizzvrO6u|5#$^Fh8PqV^|Vdmd_enGg}sFd zn7}kWE_4n|u1NAxh(VIrJACtMKk zHg*D#^2N)Vk5{2X5?&Gyiuzvg)FZ#ultTBaAhtoI1dBziG|Y=sNi9SV+ERN*5%CBD&D(6|QzVMe4@aGSNk0XA>o%g3$_widV6j}AvRa=~4 z!)mUAUif~32;{tI|DdADj&D%!WAhPx2K(~j%T5vHb}UjYh)RU}yU7$O-62&d^K8Jc zUWi{yhZr9zJ+7%QsL=fBhWB>do>1oWjv12y1zXqdQ!%AE(UqoDG0n&ZqM|%Q4z_p1 z-To%m1Q7`1kSX9W+OEHoFD>)zAcO6G(iBJtd6=G z?<1z6?A;3%0W%6WMJ#XPP7>f*KYQld&VR>gVf%gP;XD)l_0BMq)XN)?rlPL&a0! zjG!dBI(0l{l-NTgRFOr6L}L!D&B(!;1qO$qF@l-8p?v~zB(s!NIkFL)8Q(QybcOl zH*ZXP{$fz<27sioe{I6*X0c~eT+;vHzBv%&IA}kMa-12CT$q=NL@A?x@4z;XBSIUf zo2q{X0o+nbFmaNUF8~bJkPrgljoeUNkH5)M=V!xO?U_V$efjd8U5uKl`{kI}*ja#7 z5Wl)rx=J|-JsF6qk1RU8eFz2kzrroZTArdee&V<7j}9=531Cf!GrG-Ucf+N;x;rgK z_<=qGX#xMgONFADs27aJV*maWc*MPdP!@Xox9A!4u^WKJa-hYm{MdrQW}UWclM zb|JzUp_r&i!-W)MQ1r!!9xz*!&Ef(rZbAWUVT3WiQ{=+Kp6P(pK{{4QCsjOX4};>$ z>tfPW4I~u`I#HKn#@ifs4ea+ewf`P93@pXou8mmP+|SFAOR&h&YFnU7)135|pBPKF zJXY1njEk6Zwk68y#jau={S=22$Vwjz_*Z)r$+hWZ@!AajN{eum9k-~nFhVUSTU{&v z7X{IL@t*BpY|DuPY_pl!!u=#y4zsmm%U4w;Wk!6ulUiI`TD1y|gAnLz$)zl5hDIn{ zy&LoK?aJp*ZH<9+xlhguE^gNea<0-JhdPSe7%VUD>D(T*&+C*YiUvzg56`cI3acdQ zPWWn1=*{pmGs2Sq;p0Q}KC`ntDQB=qZO?hIb5%n8pTFoz)JKnzjIc_qutMJN`_i3Z z>k=)%EKT|93)xt~1(Yk|f9}fbQH9w$z^Ed-h&iZ$(>l7GCWuyr@B8PsO!gkY)F( z=UZ;AW7rg#Flxib-oASwZy6a^{a8;EgWS5XA}T-6$P*R`#`#Y;6Veaw%l1tODif}}dw9t1W zsJg+7V2nZ6M5#HILJ1Tp-LZlKS{8!y&vFQ%h}?4eMppI?kVpYeUK~H^{KWQT|Hs+@ z9$zyae5WCcgwH$v3El@vwU_$_G5UMtg5JvguTX8u-JFcuI)}L$?$s=HttKO3Nqv`@ zCF_-_3u`T+AEi2Ui^CYt+o7}In#|rBBBgV$4B$)kAFY0BFG&j+Y)?iP>Exc2_k+*@JT`Vd- zcbGHJTa9%oW`)W3Go}6K{vm@Z7||pC8Jhlb&i~~U$jyM|AG98+anPGMHTR5ii}|V_ z{XA<{Sa27eSmVH8;E2_2*i~ps#*#@umvq|JLY~I?RCX{n{A4m;RyN@PpKM?}{XQP| z;)!h?Hx(@V!wU#VGqK{p>XMDkUuI7XhwAr);sfc){DOL6-IKO>I#Bi>gH7ZZ^=EdG zFQBsPbiWcdi+DRtL2{j>T}n(;u&6;uwP76 zZvL3Aemnf0ndrolQyC9s3aV}|S&QloQ({C|ww?$JO8;o46AMm4bTehEBN<|{5g(~_ zi0SE4QuU)KfM+auMOw*(_4QltJl@wl|EB~r1`=wjBrUb?}OXA>lE>plVub+ zZEv3#iGCl~*s|K@lDE?24#nlZ)RiIXw4CfLi&$6wMn~KH_gCa|)2XN4b7?$g?9dt0 z6KRGzq9^Y~=H282HvU~R5)6xAj004ql&E+UP4XaL`pyU53B9#(eOZi#+VE0Ve3999 z{eV&)Ybi8pg_iHlx~}ZMyEjD1gZ_aZQU|h*I2=V%4`4S=GWbeMMoP+_FG`+jl`yA* zh_to|kHl%*o&;yG#k3BDufhUc7d3PdBoek(X2@0hMPCbfB&-moCAH6>eo7J%;DBhk zYVF=XwwofkAO|t3bkATXePkg0%tmP@mX2bNn5<2LkbM0BH9%`|&wxlMewUn?09AOk zI9DX4hVSH-umgh9Ed`L%j8qf$Id{xNkU#8wFPzN|0{DmFx8)~Ade~A(Dm!9Io`>_~ z#7A!zPYp2m7?4~|h;+e8RAfyPadA(y)Q^VwV%Bt%Z`C!zW$_kFVio?2xLwv}{2c6+ z)ofwrXiU9ZMPZ9#90~@EDRM78gGg5NbVQ`z!(Ne_iR(b9YNGk&XdOUGuXJ9MV9<5l zWAljc3dlftzJS%M_cYMRxV%}lVhsd2zCii3Lmt=(EwTA^9MasgG@``ztUBupLN+#~YzMdt$Qf zU(Mk7<9P=u!W-sib+XvA6Sg&-HVd+0RrMurWlkcjxaGt>32`h2~j1KzTmvrDe$x|6tVuE zB`?d1Vh()fFr^C;mk;ifrLiSuc2hsSmmBQUJxM0e*{_C{NBaRnQxHl_x44=#;ni&W zXZ)1y*01EQ^l>27vlRDZfQL6Y{$a7-qMRV7Z2I`dDhYe^O415FRpBCUIN^OKxc+q5 zI+0^?+12@Dh3QH9`@O_z`XI=D@e~Yf#(LKCf`SK&0YQ$^7#W~|6BMOQZ)FHe(S5!p z5$5qzo;fT{gDN(^bH<4|!2NBH4IJ~X9S4D60Pvo={!X4JHk93zNQ)QIx-);uEH{!KMkVuz^_ zW`{L)-A&r9wOw5dw3i7d-cT-Uek-f0$qSnAxnHDc?Mva>KX_i<1Xd3iio5K? zYjF*A`0xwx*oSA~^RYjgd#hV0e38syMIewkUa%(@Z6vRp<;7QkZNkqHBwJYP)v2m7Y~DGDFOH(Bu? zYfcb9eZhB+MIc*)@LIbNEZUnMHc(zSa7cfF_T71n*L9LUlT9*!R`L^qiZlEhg?zwVl^DB$Ky*rrDy}EcXC>hl$mlGs?~R+#tiQD%(=kKCtI) zkK!_6&NKQ2j#xxj6N1;#|B#C8I$!B&Piy0yj!sJ;W+ubQ6jjY@kjHb-S;8f`g$XQcU|5!>c zRm`rDrFTVgIB&g<0;+%1LB7>#A^Nuu%(+Z6A#F4Ti}&`u3BzS6xzn8hpJAh}SXf90 zLz|*z!K^(5>JmTR!L|b4y|ar>hu9_R9KRXBWDBGI?_c};c`vli>gL>Ehefp{1IVhG zQ6Msv{;m(e>bAytSFEU2sjDwEoW<=ERuu``N{I%aIeP_!A+KAjVqT)d3+LWP*be&q zch}F&7!wYdxMJ1mb895=I@mo3*XIjfojCG(&9i^~v1Mtz#YlXP)5j(UFN;xVD5ig% zW17=Xk(9M*963c@0Mc%x|L!m!|1Ub%K+q`4ab4;$8u_`Uni?L`2D#56ZSVPD77_Ja z6I^p>1wdZ^n>Ts--P*GTdwFOheCTlusoF2MP)(q21f*6c$}@QplKubZFx8KogQLLs z#P`}ff1q;e?@Yq(*=p>1fr|MPES~R3z9{}&Tha<|bf6E=QOAL`7nWt3y9ETvu!Xft zMBvuQ{u!E%{}DOHxpk6?Jbmu09?5nl)`w{snuWZcC={G=TqQ7MMmz_`e8&?%TlHk? zF{pWxWN0t{(!hawIo#&`&1&69oQ6w-hk>3QTHx>(Ze`jK)MwhHm7lv(SSdhPpvj0Q zL(;C&8;nmBLh^Qrj15nOS8ZP$-Ac@jNdn6hP(wP5MD30-l`{=Rjpt6fNyjHQ33A7c z>Ywo6%RhT#T>ynFtKW`Fr!2ls{el<1{%>54J?n0{TW1k<-$Tlll0SI`8x2nnK>z3C zCP=!1f=KBp3>>scHy9v-F#bNQgThLBp|Q=;4-Z%U8W|t@{&#jL)Vsu3U!;Q1NP7E1 zp2N0si^D1nxFuLe!sEGrNIis8oDS;&DG5Kx1D43i9D51wzHY=XMMU z=wGJ^!Y3N~UNsj*6H^+#6|k}nW`g9gz}H-EwcbtbEsQQMMJzd%Pv_Q{lnT~%&PfWU zxm45t&vc6RW2(`{YU7~GWmbIo&kzL8=zB;^?P|@Ht#ksT-fFku7Gjvhe}`Yq(GC`P zQ`^5!dtO8Je?1S4`jw|%yiP%eY=R}=J|e9>LCzmY+a(J>#~Ay(kQ`Z)y3Er{XkS*o zkbj-jV|H$_PTxN1;HUeQ*JRC8FI!BDIZzsCDFlGv92!i~w&woH$) zMsH|3Kz~k!e{7k9d&kMN+IU)boDU|aMID=u1*G6Aci@vn64Smaw*R^S9O{l|FgvPX zx85Sb=EVssZkb6g)K{oaY+&Mf)QmFT}e zyU4{HSz8%c%F;8MhVZAKC&5XnxJ&fcMwss>^r$ zdkC=S(&E8WPw;QD-XWy-!G*17H1mIYSW6ttkl)QDGd7LWZBv+Bqp%Y;PE6ZpZui>P zUfZRK85#8<{BeF4Mj|wsRnAlSpQdbJiG7( z23EUr2sWAh_h0m~!_v>Hi1Ld2>)*7+Kj^q%)~d^0#+=q({@-ANRqyDDl|$m+)}q$R zyBQB3%7@whA7uxR>}7YhjF~Z{kG{?W9(vvEhCs-huYJtdU%#s>zL@?(6?5pS7{$%B z+tSFAydD2q?xTodCb))~R z)&2GV^m6tq>t)wjeE!i1(HkrNVv(OoOiLd#O$B(`zhq{2!2i#Y;fvLy9DYkzn^6!Xq`Og?K}u9qx+F!qQ{df$ z&-1+RkMH|)AKo)_?Y*zP*IsL#=L#ZbLZf&SLR-3|Cbsg2A_56NaWS@DdKrHSv6?Jh z6I^uK_)bv!J|;!XkY!d_cwp?&23t~t3f2E~Z$w}7+p+7y8&4Hi*hnjG=IOefgnVO` zt<4kUG<(8cap#}Lp&rL>poi+Ml#@cFFOC;Z-i&+?st;0?Z}JKQGwZpCG+>K3QZ~yY zbX0W>KmHEIDDHwz+X$jvs~vBZeFAeb%bdSS%JBJn;RjQpU+}zKa;y*;Wz_HYmwvrE z&5tl}R^2RQ*2xye6>_AkHT?e{1|~E6C*n&M9ZOKcPmfvb^V57cf*LHu-|a3Ey8wM~ z0jy0oY^TfVf%Md=V+4A!8))hkidN(HdhPUpY2I~f3PT!Lx(jy%w$q!bS-8^h+e!U2G*z@ z+xLCVBNPEdMMa8Hq#A#x*#s9ws`rwZjV((r428P=F{I!&X2iv|rQA#P@Txn?o~r4#-Z+@%>wpmSFva{00RmlqEBdAWYZzSW z*>Gb-O64JK4ra#IB7$lpBrP9Z_J&6P8ZIB#@$N|0Mm7F&^}^MHO8$L)8>)wc1#z=Q zfTjsTW_z0pX$(4;x6{&%z-J|!l8MqwhcVqD1G8d2wbYG3GGfWeXiA(6Oo~BW&V6M) zuHPnb!8jv#^>9$4zMLFEbuJJnRG}h-9k#`%k9o?l2`y*$3S@+YEa-QM*dP#*d?>sg za>lYkHpCqb%W{_Clbalz!(k@YR+oJP*b&&zlsai{K+Lfqa2(LyLF4hvqo5`zjOntt z?&1f3=GJ?Az0wfYAiYm>A2OVucTqkb{+7zkIULD_#$LImp~{*LgWtCmf_0cw7T8wf zJB}7-e}Re&h&BJX`|er&_05KNc{(IZG!R^M)6CSyHv(2hiPVrsR--F3#t+9s1rU|x z_5sfxNiaSj9#t`>FE(=yXHMny%4Q$$&d32J){q8uiW)CWai^KmU^ekgo8 zi_|EI#;2ln*z`BDtMQOl4bO8~z6EJca*)(bd*Y_(IP{T^Q0(|*oxm8@&jF|0Rvrj> zRVx&!%=Z3GqIllZ805=#xo1NNANWa$I1rRe&?!O5g4u-#rnTe_N%@4mCfj_2=>c0) zjU}}IkjyL}Cz_L~sd`3~Sur7mINe zZG4j!ZHi*A-kOKRVt&8i-3iyS|D0s-xhtNxE$a%0$kevse5iL_EKpf6H9?PivYY4DQ`$ zwCSrl8syx8&4P2%UL@8HZmYKL(se`z8R{Af0(HE4=q->mI;b>{xl+Xy#Zpk>tfqUe zlf>H8ov@DcFpo(aa0A%t#a4z5)e)h z020NcG%X?R`J>r}cCO2=oD1QD3<(L@oNC$|;BO14(5VP*xaCSWBekP2k}45`#Jd^M zTRONca>R-V&3C>D^0#6$bWz)sOo82sNuvA7t0~)`<~AU%kDZH7QKCT?G}oEa>E5<1 zrN-hfQe^)zrp$LW>$S*+%}I8;9j;ZhUFa4u5V)GOpwVHDL-#=#xsL+{Bg@pn3b%E_ zSHp#tbAknlLeaGEbSiYr;cgd39$w0b*ve3(e{f7M53+YEvh8{IkUQ8V=2+y`)X%={ zk+Lq0NaULY*U}t49clPb(cjLxv5dsAsWLa;MdPCj2McB{e_FcNbre!wt>y5!b?)o~ zecfpmI=i;Ny8{h~vTptFO-A7+l_Rm8naSr|q-5!fPt&<7jK-pj$YvT(k;pYS z-^pL{0}b8$vtDb)M38F=2x7~Sj5;DiMIuXCzu1?DOX}h0ik7mF9<*fsNZG@tnAsbWq4$X8aQ<#VSb$(sdx=O0L9KT2;gsOtSpXEV2{>l3W8<3*y9M{JS(lTPc zjNi=oNef{g%WNhOb5k@qYcyH+J{-sMe}__Cp-6a7xk0N)$>V_|tCe>QqbA z3?J(R*`o=r_j>zxAe28Re&rm76AwE?`Igg^KBbu9uBx*|`g(7TJVInN`+&^Fim}XE ztB;{b*Grm)0DqI2LxXtchT6ZKzlCD)BaZ0GE@3V(Wtjo%_l&u3$V4(pyBn=D1?yDn zc&~pvkvXB^`}rxd-nk0@GNudW`CxYhf3?;fsbY-J89 zGwSy{;xM^T^cvifSoeV(Au@vL4epdX_z!gK3O6Lc6P(HE$-_qbygb-AIXeaP?a96<1Y6@$@qhZWk*eZf~`C|nl!3x z19^pV)sBx!l`DL1@0vFxb8i`}bGk zZ&fhQo*eq$fFQZOpfGJ7qt+JHne1i6737*<% z(}#Bkttf*T8+c-G8=jWK4TV2DyCDMlL%-C#Ol$Pg^uA4I=5V>(F(o zIh&Guf1NL=^9dqgh(`PPfoWZzqV1rl#5}(!BtIS~`r+eaoIR-tMdqd0fTgg(3^JOJ zdn*W+&-{T;Ps4aNS}Kk!In_J zZ$|5ibwzAf58y=#hkK6ET?#UUeE;jb%NiPCpdi?p!-`nb^>xfqgJMo>+DyKMVy4kA z5}!CCImA>|FAX2@cawx9r?%0;d$+iHF$HvD*c3ZZ=Cug%V?0ou3Ff-A4q0OGEkeZdGj*O$cU}vgrbqN=)fi zLv6fT=;M|O>e#aHjU;D@_YKM@!hUtr4_c2fw53U@4?Yj#(oVj1MO*VD?B*otM z+G+Mca?Dl(5``ZB=g=ZJl^(vRvr!}~quv{Nqrapr`X%V^PS4(f5*rhL>m6-o=%(Xb zOi3I{)cxe5DmyQ2gZYBbyq$6Ah*I`~k~9_#N>e ze{+YK;a}5r3sA>%;dj4q3_k=@r=c33u>|s7s}c#^0LAhCTYacrgJ8zM>7aJzGN0LT zZV_GKIW__Uf)8#BpIZEn)H#Q_=Xkql^|vxbc9edo|E`$&Y|_Rb)hzAbb>Sa81asTs zm$r44NUoc+SU$Z$y>^)O2(?Wkuc+A5(=*%b3%RSNa-f7UO#f5-joagc8ANC9!kb^G zJs4eoT!%oPiO|1t7iQ?6dAibRXD&ImFI1Jm8io|pdi-~fCxRSs}!p3Iw3lM(?smK~)Y`!Ey>~P(vwCh&ckr}hge4e|+rQf` zbSgKFi=BH!d8D*37C&qE8nisvv~r`@p^;q5p%V?NhaFW0^wSt{`T0yQ6##u$BvpKh zYW#a5;;0fw=_0L%y(M~66b}(_bgt1Yu0gpWs-?u&_VP$+}T#LjA3 zgUFU7j_bHL%}u&nh~#zY9_6YhTdzy5Hsul66roP+>sWl_!OIn5P|XRy?Y|>8egocn zvifqWF5Q~~@Sm%>63>z8-u0W(H3!!Mye2zpo_B5GK!g5H9(GYR+-=qLTj{KSX^;RQ zl6DI?z?~C)Z&i{^Zb=W9vut-jDPOL|(Lh@-cU;Bef~psKyXh6BuJcP>u4ZDM2uxOl zT^DN?C&`-iT*UhI&T_t>ErtGLZ4`C$@%)A^BTd8`f6BOcnW4J9_wNfYcXU zjz7Biles(aG0vP%Jm}<;$p20{#&vT;>acHfA#0t<{B({TAL6fJGVYJb0iJ3+u>0T9 z3>eR1k@^qJsaE1c&NR$k9Kj6&{(M9!sjCy?j!%M#GcMNKi@rvXvsX;*Ya!(171^QCnGc?8TPi9utaM4D_uK*^S?XxO z;kwM6dfmN&zP?+~%Y+R!4?O&~$!q2F@WX-%28qA};5VPJLjPa?D{oP)6OLs0!9wz- zR0`Vq;r#c@0x3z4Qv#7+@2ux9#h)FX&ee<(3m6=8LF1=iOwGU5(%yy6^`dt;V}CmI z-as|(*?pVarr!Me871od_Or##!F1bCBB;ah{UaaRp!0*#HZD%ztf!Ct@S&}(d%wF1 zD(LR-jRSX~=}AD73YtRQ*3x zuTK)43u@G*EK${$1loEXDyTpw9(=$~4OyaUdw!kpIQ?UA87JaF1`Z9G-0$D#<~`Ww z`}xh$&=xFy{X}Z;1}95tuCI+6h`E2iC(vbBZoD^d^@HgseJ=xyTT`aH>oV87&wv1f zZipU*IX-`xtVRm@a`B`WDkDg5V5#_o7nJioi%PtPD^ucw(_+Ggn6h@57TdqWuUlxH z9m_r7mhAkH(5Go+@o86vb6KMIz(<(d<{Nc_1hv1h!38g;^NF^^y!sYI9K|tA>3Yz@ zqMBPzVs7n;WQhRny++giB&Ev>W+EiXMN+|Mu^G`i^5He z7sleA=xu>ze}^_xgfHOaIARIHyyrS~st5eCwT20zIA;OD4+rrmy@xsaF1!_R1SuIF z77Y&;nl6U46v}l!|3x%@GPm?fd-{LfE&Pf5KTvYxBhp>BWnRx$8_;XjkMpD~Ri~2; zk*4|Hcs$PU&z37~E=SUzq+$m3b4Q_Tp<5m3NZxRx)31Sj!7e4&_a=znT=vyf5Fu*m z=!TzJEJod6esd7lJNxW&7mBpvR-UKR(3~%WOb+KuEb<1}^U8P1&+~!lPsXQr!sV9{ zFKk09Cj(b16|etUsA}A{JdaF^$v7T>l>tmZ-l|a{8ukOCb|k!Th^w zxaKPYHHNc>{Du_b%Gyj(2$#C8O~9$!1<<1)cu6{V0l3 zK*blC{7Py$OX2-@>Jt`4^y~fNKNP7(3nTnGj?QF3k}Z z)E4x*>WRjO<=nqBB%M$lPfw1Es`Mw z*WpBYzaGXBW=+@HLevt}j`^VPdV7^%wBv6R6OZtESYr`x(RvyT?dVtMUyo1LM_=xd{=$`D@U>owP@L<1*oZ$SXNT^>zA6^sNA%9rRGAk8nw?jY$RNqYlFg9z^|$hQW41NUUVfUlk^L_ooLv z{MnA}-h0AL1O391z6~jo>ypZDjYKjY(B`O^andE3?a}7UlP|kZgB}dzr6~KcxF+Hn z`~@a&A?C;4j14|^$;r*i|21a2a>7+xO-HiN@vCtlF``fh+iy&ggpd5~>mM>VwukPs ze&$NTcI~QI6_HD6);8NKF?afQ9bunWX_ccTZH3+wdV$|!S2MG@?=5O#5fZea$gN93 zP6x5Nn#3#wsdxvP+5HZL_o*T0op_LQJji{aaQujx2P`28Y)UeUBqJki{C`SgtwAVo z)=3B0JYO>C2n6b(ol#?f1u__RGzY<1X%64T4fUZnE0ll+4S_vU?kibjYdh_R?|l9k zimy%pfr_$-LSZX_=&Y>mxD%%NH4RE%xXMBtVI6XAm7AF8-6syeF5ZrPM{5D~>-o1N ztV9r7^0-)dK5T`JhBF1#Xek$Y$@etAMN3qi5NXjv#5haA*8kEMbGQYO!wz|Vlh8Yu zj&zR~ex@YfIk{Z}*k2WuI{uEEYRvstO94%YtV5DOB;xnkE0M)bNa{x%l+QyR_M%l3 zDL*05W3l)Nit+X;*i4ZFw-}*Hw^K?&@psYzIq1pchV8%R8sUJ#`>t&H1$qrH$X{3b zt97U9e^(ZZtq_sO%HJJ2{q7;GvjLuc31lHrzfU!Y?pr(BztS2J5k=n`^KZBr)~!x# zxNQ7<5IXdfNQ-SNIqk0~qovhLZcuZ7ECEHk3IkUmshI*I^93$LB^L;RNEgnM>h7w5 z`%H;I-K1|vryUl+y0W%tGe4f7G_07FFtVpl(36+;_Z3GE`bYjF)DboGr)vb4Z$a~K z5xKj*GCkPv&WkDR>mif+@asjG;biAf`-!upz=hxc*a2eU_IZp5!96v=m7UZ}gyLI; zQbRx!4pJ6DZH|BZ85ZQs6Vc8GpUcHC_p_6V8Zj-#SiL2@Xg!4XXhznDnP>lZ_?>1zM6Ej=Rs-p1DQQM_y0&w`%L(9X7IiMLO zekeu-9V!SZdsub#Gu}yhg$F6^p)Vhy7%-zHij)|k?7yXnO918vTvJ_7gncx|x8HTs z4aHxGTBNX;mjO4L?XIpTjI0PSgdWnpM2Lt2eawv01<%6pHxin}I0X@v;Zw?}h^t2} zn_}>p!|)+rAy8~i%+do4%3+qb#6rtZzeZp~x;*U4n8|SSz;JmwF9N6_`ty?wac#^{ zu3Rqu!o0=YVpiyJMbOSi7!g8lgcORHuB&bt)xMh~{O~%P(YIDLJML#=Av|`3T%5!1 zx;G%_*w9~7gFS24q5H}sbM*V}eBcLdIACuRxe*cE^e?`^I|kuHrKzwEKaMovX(=hG zYe}V(Dm5noOwMjhQbjm1VR^qUQ{QPlq5jPqQMX2RgVDaTS~my(<8z>V`yr^6-`5ca zt+V|v6~cd4?{m!H8ixNkWjk=vT7H{Kp`5DR3M0`bw8~Dr_K$J*a{M{=E-m_bA&Zc@ z<71rOU1kpM(c10={RD|nB=2x%Xw9IIr)o=DbtWhJV}{wFA$2uk^=(E7$3tz6RCdoM zhZoBHjs_g~7C&-iOi^}bxry5JeQMe|(MS+ol8FSIaug95U(({#NG%Sf2Po?7tNCSZX02903E-TD-%iU-00AuWe9!Q%rgwH06J$A zV*tt~kA6rVqb8*u0a{VW!d%InDDolUM}mVZSX0p@*PvEYTE1*K>0WpTO$M)Q5JbX z7#bzjF*AR4+{jPdYP*~pH4i=? ziV7R-Qm}f|t?-fQtHu0a(c_y@?pa(2j_C?nmAE*^A$l;5l2h@Ry@(Di>K7p0cYT4& zpJT0B-Gep^!+(FKM*xWjA-{DPyzUTI#UV9AA2k624*X&GN*+$iPy}q03yM}3PwNcT zb}s&oYSgOt$o}@dnwHsMZ}%C(12Uitkno5LSDnxF@KIVSSw7SY^b;<>|-)o25qv)@11q_x?1Wt;4?kY$c`4@cVhoWWd`nI#U@vnr=yTU{BK z`cEakUc;2S)@iC(Q-A5UE4h&P^Px>?gilFn840q?tf^zRxk8DYZ`Ntw*ZheCJ(Sv6 zCZE0q2~LDFDQUT*MBSE?e*EUox?Chk#3P+Asc38UT+=&2LQrc2kabPfZ<*(v(*C57 zAAe!FV%M)T=PMeBE9km^+!P*It33Jcv^M1Yx|?#5XbgA!r4!Ep?brHjA?m0nYjrNg zKVgTHI|?)dG$pC2kV$s_0XAMM-$0MoZ{`lvw9KY;qOd530#v)|^7^f0BYw!{V8uM} zq3O7kMdPRyhA7{-YcSK9NT9=x^7%W+2~5NBs3=s}Wg4mVsUXYr@^2KsOt}BiX5fIw z1<218vXrGWLj2|UN%H7SgQv8>M|tte%4U@n9j_b!aV*>d&59~`*J<4INAXR@WYDaDBC~owdd95Li~M%Z)~2_ z3G2!u;`1ct1?|E(A`6MJh$H;Mk#+uew}el2TpndwKoNh_DL~h4&;h8P{$s+!slTfw z;@+D9N7LT3j;HIZLZ8cE>7-;W2*n(z9FOPI_}vJT7}f*40p?A?waQ!LUvHDG-v6XR zmJGC*i`p!eBw(p=&Z_^4ZMW54|L~c2Es-jLr5RB@$$xelQ0^(C?DzJA<`S$!)FRne zqfM*cwn!_qkVEFWyrZzz6BQpOsG#;wQmEJF%+bxP3M=_dzJod>@a0l4^Y*byOyE zz~=6Yb#C!e+Zlexz}BQ#D%N33uIsw@(%1jzijxlOl=d$X%mpzCz>_?~>39q;=20*Q~auOZ|3P!8_ffvjOhEH>W=y zZO+YZOnSpcL-9|ezuWBdC3-b~XX>-7f%teJqOQ^MC<%>|6)C&oe&<%Q!5!?6vajhj zA+xFee47xYbPLgzX-)mSW{Zq0J-U-r%HNmHlmePM#JDw&YF%5c~Hh>s%iCQR0=1jPZJip~y0Srfz)PmWfH8af|`#Idafb1M{&8MK7=vwQH<{dIhlN78hDSw9|t4^b585wKyP zcwsbjpk`TDr&7x0^urUb<@|(y)Q6=0iPm&83$ac(>Uqm8NPN^gR6J{sRyl*fW5l}! z`)YAn3I9^sPNpX=X$R(NDbkwLlb{fKq`p}eH%iR$TMI=3-OrzAAG%DFmyH^f{F|oC z{omUh#Wtqy?AkD-3|M*9d1P6J5Ha5xhrGxfX3(66ar7rT5JOJqwE7;tU(LBO5TMjY z|1Mv+%RX(ywG?ZI#vr>{(L_;zO<}x(G<_~F{SSXy*OCNtAjPKY%$+zFRGP&+nQI@k zI2!3N0EZqY^v~?7?GHiwM`Q4m#orWqyJ=y2qLZh0tUk|2(Gb#jo<#Z>ZoyK8V+JdY zv+EnlYG-fNa#<-TNAUACR0wf2*q8PeD$o0~={{CnC5D#&BNHW+bFWR25Lx99F~!?^4pa~lp+6|S+OrP6g}bYr zN<-a|NO{jVd@30@Q=eh8%CiW3F^Sq-IXbex8)+=_*K*@MelixT?a2GQmcu2=vg5HX zvyRjh;+m{e7N{jnkx!7yd*2oCRFS@q0{_A}Xe#Q{zNTA$abGJ>~=*MYJu zYT!f0OfttEWBI`y&p(7auR$#FSJWRI(^D=w5tlOcdz1+SR@nq>WABvZUat~BrVdf0 zd4(*9Zxs&>H7r+U{QHJA%aQJozi;b<&rB5=5s}cwyajYMPnL}#U83=?n)OLRUU|iu zD(1k{K=C)x@6|S*Rt2&2_>LQ*rM?habx+t;oAq#&e)%JT>%OFGV3eOS(RR-=J$6Fg zK4c^RB8z8$YyVxHn{w)#!zg`L89V_NMt(GQLXIAsNnPi`gj2Xo%_3I_kC2;7$iT&h zH~kBqq-vgl-Gv{mLBq@*?GGoiqucy&Yf5-<_FZz7%}q%5s!g=Yt<539yd|k?V|_A; zLXR8r7%E+`d1+MSKh1t$M}s_2S#YJzMI5UZQ8?itCffYbLYFoRK{J{$V=T-;@VFA2C$5TcOJcp zKINlLW9x~jHYgM;WhU|2Kmt#)+V=xr#M zA7%cby-B!?p>~*qAxH&A90AMuZlfOTMP?2t&-dlI;IEQ~#()yiIRo6zF{I`O z;^`mBQl0JDc+`QBjp@%#~9bl%H}_z--d7<^X@wJ}=! z1vZpmE!)}>2~PUzFeHne5#ItK`+4}8ny9T#^8Zj7zHtuJkUxL*+g1{qyioR_3Aqdg z{`u>yp~m(|FB6EvQQzKrU;bBiCcmbWqEIU!c11a$ylaUlG(XqgRUbaA2y#PsyjH@; zq4nlKpfG1TP8efdtrvVS(2mAd;fT)KBSR@Qe}x0FxUq`|Ww;5P%rRiZ!5IML2?C|P z*Pv$Uc?q3xXfH-y4s;kg&@7?A5BmZ!v6xTBK-IuxT$omK8Z4WQ9P^V_D2b(2HTWX& zYd?UXfz_Fs7-!^49u;5U$B+w!Aloj_w<5^_4aV#t>G1$QXF_3N#S4SWvxmhZ6(u9^ zBa&nd4VzLoh*=o*0o9E0{w(qe?}K4DeQUTn(XBln)L+ODuwG4glsnaq*6BpkCSOf7 z9rp~0RKE%3$i4<`#pGLl*jl84yl$5hv5;jYx5M}Xn-6uLBR$U;aKYPVoc|0(vSOIp zGZ_~PW=-}m$^TI`6xQ=<7QmwcUI^yRq<9*D3d9_nM^>>cLL%D|3m*fSzn^o6z{v8F zIw_zGSE-y@P2u=51Om{T7(Zy5>KQGlTo*^!|4Z`(eE7?G@_cdBnAhqY<<*WA5x{rQ z#xjquR-s2>HLra2FB3l4j%Jd&;o9NHcDZ}*^p^7~0l<0DN6V=dkLcy)EtVDEf`-sp zg{+eyY8(C#JUtaC@+$lmQ>HN?VY$dhFUy!Zk0V24_3ITiYlK{FO)GgnlO8BScOY7C6wyTjV z8L8d1r>P*emq{oNpEo3DhjUOoaV@A&-#RcZEgA)l zRANfFeDvt1Okr#UDveTTqu(Sy;-$?EG(xWeErDddXi!7}nyP4ZTyB9Wiq(B(3>O zQ{WcA70?=9Vb)vy2Nm6+Eb{+1oZia3PI!oS#&-CvsrUu*g)$)62{bHaF$YAqPikm6YxCb{ zA>Om!O}f?4R>ZD+-VZ%~H&m&toz|Uon$|hD4GQhZicch}RP^N1E)zr12^-wIJfM0U zf%0*AfTh9liv}IKi+()b4-?sJE>mIWvaH$NtR#^{g-if_StCZM){@GYnrz1aM)Z+{if}hd*uC42U?ZL#} zO-m$7>wb|v8FL^zG_s772uBu4WP{4N@e48NZTE%|Y-k1@mdEiJy+g;uFz$XFml-(`>7~p13@?7FCt+`$7bbrWA4JiCb~2B4u42#}T9szo+udnfzcm zS|}CUo=jO=a)ZsP48J8q(`sC%cZ`vDnX5B@++i$A;rob{pQX|#?SRx~wt3z6%*HS4 zB^=+lqWC0j1r6q2J$XX!_&|{VtNc3X*!`Ory4f^R^$nAiIiA*{o7suZH7)3rC;;oG zzVvwutP8&1!UnNu#Qdj8zS!%3G)edVNC*0g@%g^))VarOW%wvi`EMmf%s zW0ORiZym-%4!ez%RRQXeZ2S0Cev%5t?P!)$);{}Qm$2nTR;{E7GSvtNVwPov9sP=z zuS?yGK7Zh}iY#7Z3shaKma@@FVO`dJ)+I-;l^2uzyV}OLj~+4QS(Y36D!17L_EWg_ zxuR_NJVgg~NxKe7&Xp|Udz&Kl ztzDZ*%~i~%v_FwqN$bZx&{0d07;SC0c^&E_cga05-^tYPpX61lQtf)@U_WAn$pEFY z%)p#>V6$J%rbOEw`YtdqoUH0vT5eiG8dKmUkLNMv2ZMMGqY#tBnti-UMl~;5=)8I? z(ZIODa#$4SUhfXU##xv>2}>i;$2q4BB_G0qQ5GEL@&!QVz} z_K?)3Lma*VR#tv{X?>+F#H&(ILkcqZ-~t3y#?LpH+T~}G6&F%N?;+4>V;-IsHl|>( zx;^-;jxp;~^~f@s?#!l)x6x&`!$iyD21MV)@%Lv+Ufa!Nkp0=>w3g+zq@oZ^V6(rK z^#Tv;FF%%tg{E=|k7|^@u}~DUM&DI(m|vY;UcIkxLOe`a>&K)zu64-3!xx@HGo-v~ zY=1Zwg_cgWU#||hZxEWKDn}^FO^sd4=ElFC^IRPT1fiCr(5Dz*FgsO-aVdK<=vo0$gMW=Ez!HJ=?9}n{*iY6`G5Nov7Z7;QZb*1`l)UL?4ODk#D*}{l62J6c_oaj)tzF zD!xE1<9O)12))0jtlBzGccA4*CxlID=#Ss;Dq#{vO?nI4mlL(mos5WbBNF5BdU^Lq zal!hZy)vo_w=oGNU8OFRZUjlo==v2swP@$gDS0MNp2cr%1%L9 zk{x&A@k#=#tm)2G z7CT7XL2Q0#j;r8pjHQ!IRVXUgnX`WK|71yA8O6fWujxws6K60>;Ajf2_>_8+v&er= z3bd{PSL<%@-^sLwwnuv9+zWW*Jvl7@H*+(qy_M;IHg&247&(@7(Y^a&y_emu2cQT!hrEbBRzx#OJ+j2l;C?{(k%B)u^gI^%lo{tG#!*is888J%9R+&S&}ESSS)BqO zZS{i*FvSpKoCpEvF()EL4XhF~0>hOPZhGZ}fAJtlg2{jsh!FUd4|TM34}_f`a4{)a zcF3_}(n%8IN~{nb%LOp@E)XiG0q^k-GI+x}zNl%+T7Ht#xEfEE!aC$_n@0>%3A0Og zQymd`lpDSe9zz}jgpj9s^lx@FI!jC=*YKFo8yJ}5g0E=NB z0{E#5EmsZVV&KoI{Abl7F!;`;r!8v5szc7T6Wh=t=c9o-2E8Ye^tLzw90k&`o%fphtcUuj${(jKHK zTrEo12A2J{^9rX`=#W7VKOm7HlFr6vt_xNx@!If1OFuCL{%$Tc`M-!f z_(s|yzEx-n6Z5zvtz=w*%|GSxmVko6w z|CMVBORL!%rumKS*eqdLm=XCw{?hY>e?sqKVFiM@5`VI`^X^h(;<=z=5Wq}U^5jQ% zP@>?Eg)IL2(D@2`QlUgK848Of|KWOE0Bht13XSR}HOK%Z^cPZn_3HX59cUc^=qbD8 zu=y3{2jIXE@z)Hj`A^WJ6xdGIm4GB*?kpd?Lph;t2?P1TtMUS2g;`r&gLRZ)<{2m! zgJv?smnK}@jx=2x#FVd}1t_As+HcpZYc~eSG`a8MWS+>Nez`2t{Zi_SS5EzBILphrU}a_tc1W6o2M zm*+9t%K(}9QGyLk1wcc$Fr#`eXlK&=^~Vm8=znM@Cp0t^Q^0kltd-W&--5lU`OgJ= zXtNnO*{3{Q&cW+vaTVuA7aLz&E&r>~)n#O4yf>$SlWyL6L}6)OsW`@86>dugjl2(S zEJGQnT=5R>OsYNX+dHno7n`_u;s2eR{qdh;Y)Z+``k|7YK}bnKRg3upMoU6y=8buTTl${x=#+O&HSYU&syT{oXrC)6k1W} zhx*0PEa*Q;4UWM-TfD_@ZcB0N!ei^~ZeZ6K)w&jFZSkeV<6g7p+IAA?qyTPHDn8;C z$Z3DZ6N~Kf4r<(^A~~~{qfO5rA+zJ~xmWC&UYOe~JBNo3r+h=X6H&zvJkd0O1nc{a zB%`;;G2o;$zrPEUCQJpY4NvRVU~t0_owEF5cog=)>d{M2d@$Aw0>aQ!i`cWf_vfSBgK zH`6HSS3PstzScpa^BkG2 z>aGHAG#%b_(e&%faleDZFxt$$)-e9o+NbH9jh$bGJ*c~l+w2`BowFncx-d&MvA*)n zjc`B?@Dtj2PADCx`?bLW2O~*2qc40le0`W|EUxV~32ipZxD2bDqF5mD)DUmlTgLeq zkl&a6?d?S7MHX+?wAj&!2*X|`&Y&^hm=!_!iXCk=xtnoG{QZYcBTbotK!yM~EZ30{ zx2v~@yBDD1LmQQdoP>4aOLnSlWSXRkf?vItUBYNH2sHC5c!F1l(&~pk;p^81 znbZ0AKUo>5yWk{J6(v?G0xv=dw6;*;0GcoZf4b=4Pg~jL;xdxk+;3z}hCr=F!0_qs z=4IaBWmFWqeh~4)wF5~Ta6t=Y5hkU@^=fGfw}Ofy@=lROltDqfMu^#0G{+^Q%QjEo zMoKQ-)k-MN`i81D1hV8VT44luNW?c-d){I`=(uB3&Y9Ld0VW!2uAV3~m z+l0N}Y6ft(SFoLT?Q#!0<-{~FyF$n1_`9hd>2FMTeE2>|`s5X6pQ$t|BBP_De?BP;+Yot z$0OAwsUiY`8ip`_(EBq}3M=N9SB%u3*5Q|GVjq!6kE<^pZCYV{;gtlz+&quFz`|z2 z{>#Az_tPUD3$hmccEMD_f4B=ATbj6jC!YT>wEaTRO){v04aipFoc;=&T0$t|F>9&h zOt3bql9uw()Ah8BrjIuoJXXVdw|v`qAGaC%wmo{%R(R%2(%2->wp2e`T7B1PCgzN3 z({>TJWV1Z>TsABy_k&CE*@4lHBf~SQXAqJPHS1<~5plf}%Xc7l6;(30mdp^;9m*Cq zOXvH~BB!*EOV{bT?4H%X?MrPrsNLk*Eh@b|Xsm8SBlW~*4_~xvaW`5m_H8Sf)Mmbb zaEDXJ;L__UWA(?*_Y+K?-TSymo>7x>=JBQeM-w!wkGt$!!Ct-YcmZN&mHIb97CB$h zH+HT=N;^L9+55495_UCD50|a=T&-q&1P8Vg5I#4K=5F~&21JMl(g$dIzge%VCNVG# zU>wdK)f*V8(;4aB4jK&jzFv3Mr$FEIhRy8BOR|=Ne6e=4>&4kgSe2^Z7t?|y*^B{l z5u5Ks`knJH$cs+9Ji9drzJCp)mbSn6+}^E`kkof0F>{@SUFwfUP)NphsCnnY)cO3~ zt%jAV)~9q$8dJGbE!KB8==YRBPR?eyU#HgMk?F}?W~ag8(9F}%)`3=cw`h;#+8Wu< z=QDTXf+wWs#;+s45-a(+SnRsLOr*VKc1v2Cb?KyolPJ7hm4+xRO=X#EoHOQCpq4T*$x78a(*Vy(rc-pNxi@itq=LY-V=BLr!M4`Dv zM^S#|6?1lHaw|bMH|dF`rv=tIkIyxal^c6P*gtgb-3@lVu-+QSW^pTF}D`bD%!Y8&`{J|6eOE9{1twU* z00qw2)4r(i*|>m4yG51|^7c?fq`byikMxhbD5U@wMs}PY?1WBd1W(mMNQ-H_Y-cDv zXYnf}fs#xt`^Sd_F26x`I-@a+DWQ{qkel-}2)0DjT6M}sG7x4lYJUzkVd>75i)@M} zzeQQDJTxf8DG`f57K!gdNWSj;{DDCniU{EoN$%zG?QPxMw_xeNi>??c6i6-2IMwpCW8`X9x3YS1A+uiJfJNrLqlLYg)i_4 zIav+H;34S=Sf~g;op|uyz#P}9B#eOMhK3{n{6WJR9ok7ud7H6OtD_$$%G9Ehg7Yz= zQJ#PZLc_`9@of;Mg`O*H*h}Z!nalm~%bT3>kM>O~Gh@U>Ipx%|tz~Kb+CSYm8~^sw(&{O}Ep3TG zB^lJ6cX8r$@t7Wl`SJxp+)5up=H z9*RGjSJ{QVehX3w(O!|M8O(b=t-(=RS(*FN>5=*zDTG)lyQ32aip}GpEitLz6PiMf z1>pf?_jZQtEy>S$Pa^=#Q-@zqSLzrTaWO9n#j@q4_4syfG5Uv+&!F^0`}fxejgK9^ zWs>W*gJ&ynSsCLP75-*j9uH={xm-q$I<@(GPPiJ!ojB*3^>V^a4M>xoUF>~?ntQK^ zPyO~VcVC(O@b#Iw=ZdjjFf`y(Ra;SX%*g)XS5qP3=#wwLcl^8y>>dYmo#m%XZD<+O9C?`w`v%EjeWFQLd`=eUee!<-Y5=$HTi002ovPDHLk FV1j(GetCardMgr().GetRef(slot)); - m_PropertySheetHelper.FillComboBox(hWnd, IDC_COMBO_DISK1, m_defaultDiskOptions, -1); - m_PropertySheetHelper.FillComboBox(hWnd, IDC_COMBO_DISK2, m_defaultDiskOptions, -1); + const UINT idcComboDisk1 = (slot == SLOT6) ? IDC_COMBO_DISK1 : IDC_COMBO_DISK1_SLOT5; + const UINT idcComboDisk2 = (slot == SLOT6) ? IDC_COMBO_DISK2 : IDC_COMBO_DISK2_SLOT5; + + m_PropertySheetHelper.FillComboBox(hWnd, idcComboDisk1, m_defaultDiskOptions, -1); + m_PropertySheetHelper.FillComboBox(hWnd, idcComboDisk2, m_defaultDiskOptions, -1); if (!disk2Card.GetFullName(DRIVE_1).empty()) { - SendDlgItemMessage(hWnd, IDC_COMBO_DISK1, CB_INSERTSTRING, 0, (LPARAM)disk2Card.GetFullName(DRIVE_1).c_str()); - SendDlgItemMessage(hWnd, IDC_COMBO_DISK1, CB_SETCURSEL, 0, 0); + SendDlgItemMessage(hWnd, idcComboDisk1, CB_INSERTSTRING, 0, (LPARAM)disk2Card.GetFullName(DRIVE_1).c_str()); + SendDlgItemMessage(hWnd, idcComboDisk1, CB_SETCURSEL, 0, 0); } if (!disk2Card.GetFullName(DRIVE_2).empty()) { - SendDlgItemMessage(hWnd, IDC_COMBO_DISK2, CB_INSERTSTRING, 0, (LPARAM)disk2Card.GetFullName(DRIVE_2).c_str()); - SendDlgItemMessage(hWnd, IDC_COMBO_DISK2, CB_SETCURSEL, 0, 0); + SendDlgItemMessage(hWnd, idcComboDisk2, CB_INSERTSTRING, 0, (LPARAM)disk2Card.GetFullName(DRIVE_2).c_str()); + SendDlgItemMessage(hWnd, idcComboDisk2, CB_SETCURSEL, 0, 0); } } @@ -213,7 +244,7 @@ void CPageDisk::DlgOK(HWND hWnd) RegSaveString(TEXT(REG_CONFIG), REGVALUE_CIDERPRESSLOC, 1, szFilename); } - const bool bNewEnhanceDisk = SendDlgItemMessage(hWnd, IDC_DISKTYPE,CB_GETCURSEL, 0, 0) ? true : false; + const bool bNewEnhanceDisk = IsDlgButtonChecked(hWnd, IDC_ENHANCE_DISK_ENABLE) ? true : false; if (bNewEnhanceDisk != GetCardMgr().GetDisk2CardMgr().GetEnhanceDisk()) { GetCardMgr().GetDisk2CardMgr().SetEnhanceDisk(bNewEnhanceDisk); @@ -231,8 +262,22 @@ void CPageDisk::DlgOK(HWND hWnd) void CPageDisk::InitOptions(HWND hWnd) { - // Nothing to do: - // - no changes made on any other pages affect this page + // Changes made on other pages that affect this page: + // . slot-5: MB add/removed + // . slot-5: DiskII enabled/disabled + + const UINT slot = SLOT5; + const SS_CARDTYPE cardInSlot5 = m_PropertySheetHelper.GetConfigNew().m_Slot[slot]; + + CheckDlgButton(hWnd, IDC_DISKII_SLOT5_ENABLE, (cardInSlot5 == CT_Disk2) ? BST_CHECKED : BST_UNCHECKED); + + const BOOL enable = (cardInSlot5 == CT_Disk2 || cardInSlot5 == CT_Empty) ? TRUE : FALSE; + EnableWindow(GetDlgItem(hWnd, IDC_DISKII_SLOT5_ENABLE), enable); + + if (cardInSlot5 == CT_Disk2) + InitComboFloppyDrive(hWnd, slot); + else + EnableFloppyDrive(hWnd, FALSE, slot); // disable if slot5 is empty (or has some other card in it) } void CPageDisk::EnableHDD(HWND hWnd, BOOL bEnable) @@ -242,10 +287,20 @@ void CPageDisk::EnableHDD(HWND hWnd, BOOL bEnable) EnableWindow(GetDlgItem(hWnd, IDC_HDD_SWAP), bEnable); } -void CPageDisk::EnableFloppyDrive(HWND hWnd, BOOL bEnable) +void CPageDisk::EnableFloppyDrive(HWND hWnd, BOOL bEnable, UINT slot) { - EnableWindow(GetDlgItem(hWnd, IDC_COMBO_DISK1), bEnable); - EnableWindow(GetDlgItem(hWnd, IDC_COMBO_DISK2), bEnable); + _ASSERT(slot == SLOT6 || slot == SLOT5); + + if (slot == SLOT6) + { + EnableWindow(GetDlgItem(hWnd, IDC_COMBO_DISK1), bEnable); + EnableWindow(GetDlgItem(hWnd, IDC_COMBO_DISK2), bEnable); + } + else if (slot == SLOT5) + { + EnableWindow(GetDlgItem(hWnd, IDC_COMBO_DISK1_SLOT5), bEnable); + EnableWindow(GetDlgItem(hWnd, IDC_COMBO_DISK2_SLOT5), bEnable); + } } void CPageDisk::HandleHDDCombo(HWND hWnd, UINT driveSelected, UINT comboSelected) @@ -296,8 +351,7 @@ void CPageDisk::HandleHDDCombo(HWND hWnd, UINT driveSelected, UINT comboSelected { if (dwComboSelection > 1) { - UINT uCommand = (driveSelected == 0) ? IDC_COMBO_HDD1 : IDC_COMBO_HDD2; - if (RemovalConfirmation(uCommand)) + if (RemovalConfirmation(comboSelected)) { // Unplug selected disk HD_Unplug(driveSelected); @@ -312,15 +366,17 @@ void CPageDisk::HandleHDDCombo(HWND hWnd, UINT driveSelected, UINT comboSelected } } -void CPageDisk::HandleFloppyDriveCombo(HWND hWnd, UINT driveSelected, UINT comboSelected) +void CPageDisk::HandleFloppyDriveCombo(HWND hWnd, UINT driveSelected, UINT comboSelected, UINT comboOther, UINT slot) { - if (GetCardMgr().QuerySlot(SLOT6) != CT_Disk2) + _ASSERT(slot == SLOT6 || slot == SLOT5); + + if (m_PropertySheetHelper.GetConfigNew().m_Slot[slot] != CT_Disk2) { _ASSERT(0); // Shouldn't come here, as the combo is disabled return; } - Disk2InterfaceCard& disk2Card = dynamic_cast(GetCardMgr().GetRef(SLOT6)); + Disk2InterfaceCard& disk2Card = dynamic_cast(GetCardMgr().GetRef(slot)); // Search from "select floppy drive" DWORD dwOpenDialogIndex = (DWORD)SendDlgItemMessage(hWnd, comboSelected, CB_FINDSTRINGEXACT, -1, (LPARAM)&m_defaultDiskOptions[0]); @@ -330,9 +386,9 @@ void CPageDisk::HandleFloppyDriveCombo(HWND hWnd, UINT driveSelected, UINT combo if (dwComboSelection == dwOpenDialogIndex) { - EnableFloppyDrive(hWnd, FALSE); // Prevent multiple Selection dialogs to be triggered + EnableFloppyDrive(hWnd, FALSE, slot); // Prevent multiple Selection dialogs to be triggered bool bRes = disk2Card.UserSelectNewDiskImage(driveSelected); - EnableFloppyDrive(hWnd, TRUE); + EnableFloppyDrive(hWnd, TRUE, slot); if (!bRes) { @@ -353,8 +409,6 @@ void CPageDisk::HandleFloppyDriveCombo(HWND hWnd, UINT driveSelected, UINT combo SendDlgItemMessage(hWnd, comboSelected, CB_SETCURSEL, 0, 0); // If the FD was in the other combo, remove now - DWORD comboOther = (comboSelected == IDC_COMBO_DISK1) ? IDC_COMBO_DISK2 : IDC_COMBO_DISK1; - DWORD duplicated = (DWORD)SendDlgItemMessage(hWnd, comboOther, CB_FINDSTRINGEXACT, -1, (LPARAM)fullname.c_str()); if (duplicated != CB_ERR) { @@ -366,8 +420,7 @@ void CPageDisk::HandleFloppyDriveCombo(HWND hWnd, UINT driveSelected, UINT combo { if (dwComboSelection > 1) { - UINT uCommand = (driveSelected == 0) ? IDC_COMBO_DISK1 : IDC_COMBO_DISK2; - if (RemovalConfirmation(uCommand)) + if (RemovalConfirmation(comboSelected)) { // Eject selected disk disk2Card.EjectDisk(driveSelected); @@ -398,8 +451,21 @@ UINT CPageDisk::RemovalConfirmation(UINT uCommand) TCHAR szText[100]; bool bMsgBox = true; + bool isDisk = false; + UINT drive = 0; if (uCommand == IDC_COMBO_DISK1 || uCommand == IDC_COMBO_DISK2) - StringCbPrintf(szText, sizeof(szText), "Do you really want to eject the disk in drive-%c ?", '1' + uCommand - IDC_COMBO_DISK1); + { + isDisk = true; + drive = uCommand - IDC_COMBO_DISK1; + } + else if (uCommand == IDC_COMBO_DISK1_SLOT5 || uCommand == IDC_COMBO_DISK2_SLOT5) + { + isDisk = true; + drive = uCommand - IDC_COMBO_DISK1_SLOT5; + } + + if (isDisk) + StringCbPrintf(szText, sizeof(szText), "Do you really want to eject the disk in drive-%c ?", '1' + drive); else if (uCommand == IDC_COMBO_HDD1 || uCommand == IDC_COMBO_HDD2) StringCbPrintf(szText, sizeof(szText), "Do you really want to unplug harddisk-%c ?", '1' + uCommand - IDC_COMBO_HDD1); else if (uCommand == IDC_HDD_SWAP) diff --git a/source/Configuration/PageDisk.h b/source/Configuration/PageDisk.h index cbf55db5..3542612a 100644 --- a/source/Configuration/PageDisk.h +++ b/source/Configuration/PageDisk.h @@ -28,14 +28,13 @@ private: void InitComboFloppyDrive(HWND hWnd, UINT slot); void InitComboHDD(HWND hWnd, UINT slot); void EnableHDD(HWND hWnd, BOOL bEnable); - void EnableFloppyDrive(HWND hWnd, BOOL bEnable); + void EnableFloppyDrive(HWND hWnd, BOOL bEnable, UINT slot); void HandleHDDCombo(HWND hWnd, UINT driveSelected, UINT comboSelected); - void HandleFloppyDriveCombo(HWND hWnd, UINT driveSelected, UINT comboSelected); + void HandleFloppyDriveCombo(HWND hWnd, UINT driveSelected, UINT comboSelected, UINT comboOther, UINT slot); void HandleHDDSwap(HWND hWnd); UINT RemovalConfirmation(UINT uCommand); static CPageDisk* ms_this; - static const TCHAR m_discchoices[]; static const TCHAR m_defaultDiskOptions[]; static const TCHAR m_defaultHDDOptions[]; diff --git a/source/Configuration/PropertySheetHelper.cpp b/source/Configuration/PropertySheetHelper.cpp index 3a6c833c..476176ea 100644 --- a/source/Configuration/PropertySheetHelper.cpp +++ b/source/Configuration/PropertySheetHelper.cpp @@ -128,23 +128,15 @@ void CPropertySheetHelper::SetSlot(UINT slot, SS_CARDTYPE newCardType) // Two paths: // 1) Via Config dialog: card not inserted yet // 2) Snapshot_LoadState_v2(): card already inserted - if (GetCardMgr().QuerySlot(slot) != newCardType) - GetCardMgr().Insert(slot, newCardType); + if (GetCardMgr().QuerySlot(slot) == newCardType) + return; - std::string slotText; - switch (slot) - { - case 0: slotText = REGVALUE_SLOT0; break; - case 1: slotText = REGVALUE_SLOT1; break; - case 2: slotText = REGVALUE_SLOT2; break; - case 3: slotText = REGVALUE_SLOT3; break; - case 4: slotText = REGVALUE_SLOT4; break; - case 5: slotText = REGVALUE_SLOT5; break; - case 6: slotText = REGVALUE_SLOT6; break; - case 7: slotText = REGVALUE_SLOT7; break; - } + GetCardMgr().Insert(slot, newCardType); - REGSAVE(slotText.c_str(), (DWORD)newCardType); + RegDeleteConfigSlotSection(slot); + + std::string& regSection = RegGetConfigSlotSection(slot); + RegSaveValue(regSection.c_str(), REGVALUE_CARD_TYPE, TRUE, newCardType); } // Used by: @@ -395,6 +387,7 @@ void CPropertySheetHelper::SaveCurrentConfig(void) m_ConfigOld.m_CpuType = GetMainCpu(); m_ConfigOld.m_Slot[SLOT4] = GetCardMgr().QuerySlot(SLOT4); m_ConfigOld.m_Slot[SLOT5] = GetCardMgr().QuerySlot(SLOT5); + m_ConfigOld.m_Slot[SLOT6] = GetCardMgr().QuerySlot(SLOT6); // CPageDisk::HandleFloppyDriveCombo() needs this to be CT_Disk2 (temp, as will replace with PR #955) m_ConfigOld.m_bEnableHDD = HD_CardIsEnabled(); m_ConfigOld.m_bEnableTheFreezesF8Rom = GetPropertySheet().GetTheFreezesF8Rom(); m_ConfigOld.m_videoRefreshRate = GetVideo().GetVideoRefreshRate(); @@ -414,8 +407,8 @@ void CPropertySheetHelper::RestoreCurrentConfig(void) // NB. clone-type is encoded in g_Apple2Type SetApple2Type(m_ConfigOld.m_Apple2Type); SetMainCpu(m_ConfigOld.m_CpuType); - GetCardMgr().Insert(SLOT4, m_ConfigOld.m_Slot[SLOT4]); - GetCardMgr().Insert(SLOT5, m_ConfigOld.m_Slot[SLOT5]); + SetSlot(SLOT4, m_ConfigOld.m_Slot[SLOT4]); + SetSlot(SLOT5, m_ConfigOld.m_Slot[SLOT5]); HD_SetEnabled(m_ConfigOld.m_bEnableHDD); GetPropertySheet().SetTheFreezesF8Rom(m_ConfigOld.m_bEnableTheFreezesF8Rom); m_ConfigNew.m_videoRefreshRate = m_ConfigOld.m_videoRefreshRate; // Not SetVideoRefreshRate(), as this re-inits much Video/NTSC state! diff --git a/source/Configuration/PropertySheetHelper.h b/source/Configuration/PropertySheetHelper.h index 81422bef..0e2b42e1 100644 --- a/source/Configuration/PropertySheetHelper.h +++ b/source/Configuration/PropertySheetHelper.h @@ -29,15 +29,15 @@ public: void SaveCurrentConfig(void); const std::string & GetSSNewFilename(void) { return m_szSSNewFilename; } -// const CConfigNeedingRestart& GetConfigOld(void) { return m_ConfigOld; } + const CConfigNeedingRestart& GetConfigOld(void) { return m_ConfigOld; } CConfigNeedingRestart& GetConfigNew(void) { return m_ConfigNew; } bool IsConfigChanged(void) { return m_ConfigNew != m_ConfigOld; } void SetDoBenchmark(void) { m_bDoBenchmark = true; } void ApplyNewConfig(const CConfigNeedingRestart& ConfigNew, const CConfigNeedingRestart& ConfigOld); void ConfigSaveApple2Type(eApple2Type apple2Type); + void SetSlot(UINT slot, SS_CARDTYPE newCardType); private: - void SetSlot(UINT slot, SS_CARDTYPE newCardType); bool IsOkToSaveLoadState(HWND hWnd, const bool bConfigChanged); bool IsOkToRestart(HWND hWnd); void SaveComputerType(eApple2Type NewApple2Type); diff --git a/source/Disk.cpp b/source/Disk.cpp index 6bc1e988..4a3d5515 100644 --- a/source/Disk.cpp +++ b/source/Disk.cpp @@ -165,16 +165,18 @@ void Disk2InterfaceCard::LoadLastDiskImage(const int drive) { _ASSERT(drive == DRIVE_1 || drive == DRIVE_2); - const TCHAR *pRegKey = (drive == DRIVE_1) - ? TEXT(REGVALUE_PREF_LAST_DISK_1) - : TEXT(REGVALUE_PREF_LAST_DISK_2); + const std::string regKey = (drive == DRIVE_1) + ? REGVALUE_PREF_LAST_DISK_1 + : REGVALUE_PREF_LAST_DISK_2; - TCHAR sFilePath[MAX_PATH]; - if (RegLoadString(TEXT(REG_PREFS), pRegKey, 1, sFilePath, MAX_PATH, TEXT(""))) + char pathname[MAX_PATH]; + + std::string& regSection = RegGetConfigSlotSection(m_slot); + if (RegLoadString(regSection.c_str(), regKey.c_str(), TRUE, pathname, MAX_PATH, TEXT(""))) { m_saveDiskImage = false; // Pass in ptr to local copy of filepath, since RemoveDisk() sets DiskPathFilename = "" - InsertDisk(drive, sFilePath, IMAGE_USE_FILES_WRITE_PROTECT_STATUS, IMAGE_DONT_CREATE); + InsertDisk(drive, pathname, IMAGE_USE_FILES_WRITE_PROTECT_STATUS, IMAGE_DONT_CREATE); m_saveDiskImage = true; } } @@ -185,28 +187,34 @@ void Disk2InterfaceCard::SaveLastDiskImage(const int drive) { _ASSERT(drive == DRIVE_1 || drive == DRIVE_2); - if (m_slot != 6) // DiskII cards in other slots don't save image to Registry - return; - if (!m_saveDiskImage) return; - const std::string & pFileName = DiskGetFullPathName(drive); + std::string& regSection = RegGetConfigSlotSection(m_slot); + RegSaveValue(regSection.c_str(), REGVALUE_CARD_TYPE, TRUE, CT_Disk2); - if (drive == DRIVE_1) - RegSaveString(TEXT(REG_PREFS), TEXT(REGVALUE_PREF_LAST_DISK_1), TRUE, pFileName); - else - RegSaveString(TEXT(REG_PREFS), TEXT(REGVALUE_PREF_LAST_DISK_2), TRUE, pFileName); + const std::string regKey = (drive == DRIVE_1) + ? REGVALUE_PREF_LAST_DISK_1 + : REGVALUE_PREF_LAST_DISK_2; + + const std::string& pathName = DiskGetFullPathName(drive); + + RegSaveString(regSection.c_str(), regKey.c_str(), TRUE, pathName); // + // For now, only update 'Starting Directory' for slot6 & drive1 + // . otherwise you'll get inconsistent results if you set drive1, then drive2 (and the images were in different folders) + if (m_slot != SLOT6 || drive != DRIVE_1) + return; + TCHAR szPathName[MAX_PATH]; - StringCbCopy(szPathName, MAX_PATH, pFileName.c_str()); - TCHAR* slash = _tcsrchr(szPathName, TEXT(PATH_SEPARATOR)); + StringCbCopy(szPathName, MAX_PATH, pathName.c_str()); + TCHAR* slash = _tcsrchr(szPathName, PATH_SEPARATOR); if (slash != NULL) { slash[1] = '\0'; - RegSaveString(TEXT(REG_PREFS), TEXT(REGVALUE_PREF_START_DIR), 1, szPathName); + RegSaveString(REG_PREFS, REGVALUE_PREF_START_DIR, 1, szPathName); } } diff --git a/source/Disk2CardManager.cpp b/source/Disk2CardManager.cpp index 0139bbbe..4129fe7a 100644 --- a/source/Disk2CardManager.cpp +++ b/source/Disk2CardManager.cpp @@ -98,8 +98,6 @@ void Disk2CardManager::LoadLastDiskImage(void) { for (UINT i = 0; i < NUM_SLOTS; i++) { - if (i != SLOT6) continue; // FIXME - if (GetCardMgr().QuerySlot(i) == CT_Disk2) { dynamic_cast(GetCardMgr().GetRef(i)).LoadLastDiskImage(DRIVE_1); diff --git a/source/Memory.cpp b/source/Memory.cpp index 9f1556af..a521737b 100644 --- a/source/Memory.cpp +++ b/source/Memory.cpp @@ -1728,7 +1728,7 @@ void MemInitializeIO(void) // NB. I/O handlers setup via tfe_init() & update_tfe_interface() } - // Apple//e: Auxilary slot contains Extended 80 Column card or RamWorksIII card + // Apple//e: Auxiliary slot contains Extended 80 Column card or RamWorksIII card if (GetCardMgr().QuerySlot(SLOT4) == CT_MouseInterface) { diff --git a/source/Registry.cpp b/source/Registry.cpp index f543bea0..d252babf 100644 --- a/source/Registry.cpp +++ b/source/Registry.cpp @@ -33,18 +33,25 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA namespace _ini { //=========================================================================== - BOOL RegLoadString(LPCTSTR section, LPCTSTR key, BOOL peruser, LPTSTR buffer, DWORD chars) + BOOL RegLoadString(LPCTSTR section, LPCTSTR key, BOOL /*peruser*/, LPTSTR buffer, DWORD chars) { DWORD n = GetPrivateProfileString(section, key, NULL, buffer, chars, g_sConfigFile.c_str()); return n > 0; } //=========================================================================== - void RegSaveString(LPCTSTR section, LPCTSTR key, BOOL peruser, const std::string& buffer) + void RegSaveString(LPCTSTR section, LPCTSTR key, BOOL /*peruser*/, const std::string& buffer) { BOOL updated = WritePrivateProfileString(section, key, buffer.c_str(), g_sConfigFile.c_str()); _ASSERT(updated || GetLastError() == 0); } + + //=========================================================================== + void RegDeleteString(LPCTSTR section, BOOL /*peruser*/) + { + BOOL updated = WritePrivateProfileString(section, NULL, NULL, g_sConfigFile.c_str()); + _ASSERT(updated || GetLastError() == 0); + } } //=========================================================================== @@ -64,7 +71,7 @@ BOOL RegLoadString (LPCTSTR section, LPCTSTR key, BOOL peruser, LPTSTR buffer, D 0, KEY_READ, &keyhandle); - if (status == 0) + if (status == ERROR_SUCCESS) { DWORD type; DWORD size = chars; @@ -127,7 +134,7 @@ void RegSaveString (LPCTSTR section, LPCTSTR key, BOOL peruser, const std::strin (LPSECURITY_ATTRIBUTES)NULL, &keyhandle, &disposition); - if (status == 0) + if (status == ERROR_SUCCESS) { RegSetValueEx( keyhandle, @@ -147,3 +154,50 @@ void RegSaveValue (LPCTSTR section, LPCTSTR key, BOOL peruser, DWORD value) { RegSaveString(section, key, peruser, buffer); } +//=========================================================================== +static std::string& RegGetSlotSection(UINT slot) +{ + static std::string section; + section = REG_CONFIG_SLOT; + section += (char)('0' + slot); + return section; +} + +std::string& RegGetConfigSlotSection(UINT slot) +{ + static std::string section; + section = REG_CONFIG "\\"; + section += RegGetSlotSection(slot); + return section; +} + +void RegDeleteConfigSlotSection(UINT slot) +{ + BOOL peruser = TRUE; + + if (!g_sConfigFile.empty()) + { + std::string section = REG_CONFIG "\\"; + section += RegGetSlotSection(slot); + return _ini::RegDeleteString(section.c_str(), peruser); + } + + TCHAR fullkeyname[256]; + StringCbPrintf(fullkeyname, 256, TEXT("Software\\AppleWin\\CurrentVersion\\%s"), REG_CONFIG); + + HKEY keyhandle; + LSTATUS status = RegOpenKeyEx( + (peruser ? HKEY_CURRENT_USER : HKEY_LOCAL_MACHINE), + fullkeyname, + 0, + KEY_READ, + &keyhandle); + if (status == ERROR_SUCCESS) + { + std::string& keySlot = RegGetSlotSection(slot); + if (RegDeleteKey(keyhandle, keySlot.c_str()) != ERROR_SUCCESS) + _ASSERT(0); + } + + RegCloseKey(keyhandle); +} diff --git a/source/Registry.h b/source/Registry.h index e691a248..76f2d31c 100644 --- a/source/Registry.h +++ b/source/Registry.h @@ -10,3 +10,6 @@ BOOL RegLoadValue (LPCTSTR section, LPCTSTR key, BOOL peruser, DWORD* value); BOOL RegLoadValue (LPCTSTR section, LPCTSTR key, BOOL peruser, DWORD* value, DWORD defaultValue); void RegSaveString (LPCTSTR section, LPCTSTR key, BOOL peruser, const std::string & buffer); void RegSaveValue (LPCTSTR section, LPCTSTR key, BOOL peruser, DWORD value); + +std::string& RegGetConfigSlotSection(UINT slot); +void RegDeleteConfigSlotSection(UINT slot); diff --git a/source/Utilities.cpp b/source/Utilities.cpp index 249fdce0..9b59cbe5 100644 --- a/source/Utilities.cpp +++ b/source/Utilities.cpp @@ -234,9 +234,6 @@ void LoadConfiguration(void) g_bPrinterAppend = dwTmp ? true : false; - if(REGLOAD(TEXT(REGVALUE_HDD_ENABLED), &dwTmp)) // TODO: Change to REGVALUE_SLOT7 - HD_SetEnabled(dwTmp ? true : false); - if(REGLOAD(TEXT(REGVALUE_PDL_XTRIM), &dwTmp)) JoySetTrim((short)dwTmp, true); if(REGLOAD(TEXT(REGVALUE_PDL_YTRIM), &dwTmp)) @@ -259,10 +256,24 @@ void LoadConfiguration(void) if(REGLOAD(TEXT(REGVALUE_MOUSE_RESTRICT_TO_WINDOW), &dwTmp)) GetPropertySheet().SetMouseRestrictToWindow(dwTmp); - if(REGLOAD(TEXT(REGVALUE_SLOT4), &dwTmp)) - GetCardMgr().Insert(4, (SS_CARDTYPE)dwTmp); - if(REGLOAD(TEXT(REGVALUE_SLOT5), &dwTmp)) - GetCardMgr().Insert(5, (SS_CARDTYPE)dwTmp); + for (UINT slot = SLOT0; slot <= SLOT7; slot++) + { + std::string& regSection = RegGetConfigSlotSection(slot); + + if (RegLoadValue(regSection.c_str(), REGVALUE_CARD_TYPE, TRUE, &dwTmp)) + { + GetCardMgr().Insert(slot, (SS_CARDTYPE)dwTmp); + } + else // legacy (AppleWin 1.30.3 or earlier) + { + if (slot == SLOT4 && REGLOAD(TEXT(REGVALUE_SLOT4), &dwTmp)) + GetCardMgr().Insert(SLOT4, (SS_CARDTYPE)dwTmp); + else if (slot == SLOT5 && REGLOAD(TEXT(REGVALUE_SLOT5), &dwTmp)) + GetCardMgr().Insert(SLOT5, (SS_CARDTYPE)dwTmp); + else if (slot == SLOT7 && REGLOAD(TEXT(REGVALUE_HDD_ENABLED), &dwTmp)) + HD_SetEnabled(dwTmp ? true : false); + } + } //