From 9b7f730b43a95e7567bd9b1310180ae57ccd5c6f Mon Sep 17 00:00:00 2001 From: jeblanchard Date: Tue, 27 May 2008 05:29:00 +0000 Subject: [PATCH] Changes that allow a Linux machine to build, targeting either a Linux or Win32 host. (Maybe a newline at the end of a few header files for my sanity's sake too.) --- SConstruct | 64 ++++++++++++++++++----------- src/SConscript | 6 ++- src/drivers/sdl/input.cpp | 2 +- src/drivers/sdl/sdl.cpp | 2 +- src/drivers/win/SConscript | 59 ++++++++++++++++++++++++++ src/drivers/win/cdlogger.cpp | 10 ++--- src/drivers/win/cheat.cpp | 4 +- src/drivers/win/debugger.cpp | 17 ++++---- src/drivers/win/directx/SConscript | 10 +++++ src/drivers/win/input.h | 3 +- src/drivers/win/main.cpp | 37 +++++++++++------ src/drivers/win/mapinput.cpp | 1 + src/drivers/win/memview.cpp | 12 +++--- src/drivers/win/memwatch.cpp | 4 +- src/drivers/win/monitor.cpp | 6 +-- src/drivers/win/ntview.cpp | 12 +++--- src/drivers/win/res.rc | Bin 152784 -> 74866 bytes src/drivers/win/sound.h | 2 +- src/drivers/win/tracer.cpp | 12 +++--- src/drivers/win/video.cpp | 8 ++-- src/drivers/win/window.cpp | 7 +++- src/drivers/win/zlib/SConscript | 20 +++++++++ src/movie.cpp | 4 +- src/state.cpp | 2 +- src/types.h | 2 +- src/utils/endian.h | 2 +- src/utils/xstring.h | 2 +- src/video.cpp | 2 +- src/wave.cpp | 4 +- src/wave.h | 2 +- 30 files changed, 221 insertions(+), 97 deletions(-) create mode 100644 src/drivers/win/SConscript create mode 100644 src/drivers/win/directx/SConscript create mode 100644 src/drivers/win/zlib/SConscript diff --git a/SConstruct b/SConstruct index cc902a59..75b7c4cb 100644 --- a/SConstruct +++ b/SConstruct @@ -4,19 +4,23 @@ import sys # XXX path separator fixed right now opts = Options() opts.AddOptions( - BoolOption('PSS_STYLE', 'Path separator style', 1), + BoolOption('DEBUG', 'Build with debugging information', 1), + #BoolOption('PSS_STYLE', 'Path separator style', 1), BoolOption('LSB_FIRST', 'Least significant byte first?', None), - BoolOption('FRAMESKIP', 'Enable frameskipping', 1), - BoolOption('OPENGL', 'Enable OpenGL support', 1) + BoolOption('FRAMESKIP', 'Enable frameskipping', 0), + BoolOption('OPENGL', 'Enable OpenGL support (SDL only)', 1) ) -env = Environment(options = opts, - CPPDEFINES={'PSS_STYLE' : '${PSS_STYLE}'}) +env = Environment(options = opts) +if os.environ.has_key('PLATFORM'): + env.Replace(PLATFORM = os.environ['PLATFORM']) if os.environ.has_key('CC'): env.Replace(CC = os.environ['CC']) if os.environ.has_key('CXX'): env.Replace(CXX = os.environ['CXX']) +if os.environ.has_key('WINDRES'): + env.Append(WINDRES = os.environ['WINDRES']) if os.environ.has_key('CFLAGS'): env.Append(CCFLAGS = os.environ['CFLAGS']) if os.environ.has_key('LDFLAGS'): @@ -33,35 +37,47 @@ if env['PLATFORM'] == 'cygwin': env['LIBS'] = ['wsock32']; conf = Configure(env) -if not conf.CheckLib('SDL'): - print 'Did not find libSDL or SDL.lib, exiting!' - Exit(1) -if not conf.CheckLib('z', autoadd=1): - print 'Did not find libz or z.lib, exiting!' - Exit(1) -if conf.CheckFunc('asprintf'): - conf.env.Append(CCFLAGS = " -DHAVE_ASPRINTF") -if env['OPENGL'] and conf.CheckLibWithHeader('GL', 'GL/gl.h', 'c++', autoadd=1): - conf.env.Append(CCFLAGS = " -DOPENGL") +if env['PLATFORM'] == 'win32': + conf.env.Append(CPPPATH = [".", "drivers/win/", "drivers/common/", "drivers/", "drivers/win/zlib", "drivers/win/directx"]) + conf.env.Append(CPPDEFINES = ["PSS_STYLE=2", "WIN32", "_USE_SHARED_MEMORY_", "NETWORK", "FCEUDEF_DEBUGGER", "NOMINMAX", "_WIN32_IE=0x0300"]) + conf.env.Append(LIBS = ["rpcrt4", "comctl32", "vfw32", "winmm", "ws2_32", "comdlg32", "ole32", "gdi32"]) + if env.has_key('DEBUG'): + if env['DEBUG']: + conf.env.Append(CCFLAGS = " -g") + conf.env.Append(CPPDEFINES = ["_DEBUG"]) + else: # Should we do this? + conf.env.Append(CCFLAGS = " -O3 -fomit-frame-pointer") +else: + if not conf.CheckLib('SDL'): + print 'Did not find libSDL or SDL.lib, exiting!' + Exit(1) + if not conf.CheckLib('z', autoadd=1): + print 'Did not find libz or z.lib, exiting!' + Exit(1) + if conf.CheckFunc('asprintf'): + conf.env.Append(CCFLAGS = " -DHAVE_ASPRINTF") + if env['OPENGL'] and conf.CheckLibWithHeader('GL', 'GL/gl.h', 'c++', autoadd=1): + conf.env.Append(CCFLAGS = " -DOPENGL") + # parse SDL cflags/libs + env.ParseConfig('sdl-config --cflags --libs') + conf.env.Append(CPPDEFINES = " PSS_STYLE=1") env = conf.Finish() # option specified if env.has_key('LSB_FIRST'): if env['LSB_FIRST']: - env.Append(CCFLAGS = ' -DLSB_FIRST') + env.Append(CPPDEFINES = ['LSB_FIRST']) # option not specified, check host system -elif sys.byteorder == 'little': - env.Append(CCFLAGS = ' -DLSB_FIRST') +elif sys.byteorder == 'little' or env['PLATFORM'] == 'win32': + env.Append(CPPDEFINES = ['LSB_FIRST']) if env['FRAMESKIP']: - env.Append(CCFLAGS = ' -DFRAMESKIP') + env.Append(CPPDEFINES = ['FRAMESKIP']) -# parse SDL cflags/libs -env.ParseConfig('sdl-config --cflags --libs') - -print "LIBS:",env['CCFLAGS'] -#env['IBS'] = ['wsock32', 'SDL', 'z', 'mingw32', 'SDL'] +print "CPPDEFINES:",env['CPPDEFINES'] +print "CCFLAGS:",env['CCFLAGS'] +#print "LIBS:",env['LIBS'] Export('env') SConscript(['src/SConscript']) diff --git a/src/SConscript b/src/SConscript index ffb44c1b..cc138915 100644 --- a/src/SConscript +++ b/src/SConscript @@ -29,7 +29,6 @@ movie.cpp subdirs = Split(""" boards drivers/common -drivers/sdl fir input utils @@ -42,6 +41,11 @@ Export('env') for dir in subdirs: subdir_files = SConscript('%s/SConscript' % dir) file_list.append(subdir_files) +if env['PLATFORM'] == 'win32': + platform_files = SConscript('drivers/win/SConscript') +else: + platform_files = SConscript('drivers/sdl/SConscript') +file_list.append(platform_files) print env['LINKFLAGS'] diff --git a/src/drivers/sdl/input.cpp b/src/drivers/sdl/input.cpp index f975a53c..5d0d4ec9 100644 --- a/src/drivers/sdl/input.cpp +++ b/src/drivers/sdl/input.cpp @@ -208,7 +208,7 @@ KeyboardCommands() // f5 to save state, Shift-f5 to save movie if(keyonly(F5)) { if(is_shift) { - FCEUI_SaveMovie(NULL,0,NULL); + FCEUI_SaveMovie(NULL,0); } else { FCEUI_SaveState(NULL); } diff --git a/src/drivers/sdl/sdl.cpp b/src/drivers/sdl/sdl.cpp index f1f86222..6f303c2f 100644 --- a/src/drivers/sdl/sdl.cpp +++ b/src/drivers/sdl/sdl.cpp @@ -532,4 +532,4 @@ void FCEUI_AviVideoUpdate(const unsigned char* buffer) { } int FCEUD_ShowStatusIcon(void) {return 0;} int FCEUI_AviIsRecording(void) {return 0;} void FCEUI_UseInputPreset(int preset) { } - +bool FCEUD_PauseAfterPlayback() { return false; } diff --git a/src/drivers/win/SConscript b/src/drivers/win/SConscript new file mode 100644 index 00000000..57e7d87e --- /dev/null +++ b/src/drivers/win/SConscript @@ -0,0 +1,59 @@ +Import('env') + +my_list = Split(""" +args.cpp +aviout.cpp +basicbot.cpp +cdlogger.cpp +cheat.cpp +common.cpp +config.cpp +debugger.cpp +debuggersp.cpp +directories.cpp +gui.cpp +guiconfig.cpp +input.cpp +joystick.cpp +keyboard.cpp +log.cpp +main.cpp +mapinput.cpp +memview.cpp +memviewsp.cpp +memwatch.cpp +monitor.cpp +netplay.cpp +ntview.cpp +OutputDS.cpp +palette.cpp +ppuview.cpp +pref.cpp +replay.cpp +sound.cpp +state.cpp +tasedit.cpp +throttle.cpp +timing.cpp +tracer.cpp +video.cpp +wave.cpp +window.cpp +""") + +# TODO this is probably .obj if built on a Windows system... +my_list.append('res.o') +env.Command('res.o', 'res.rc', env['WINDRES'] + ' -o $TARGET $SOURCE') + +subdirs = Split(""" +directx +zlib""") + +for x in range(len(my_list)): + my_list[x] = 'drivers/win/' + my_list[x] + +for dir in subdirs: + subdir_files = SConscript('%s/SConscript' % dir) + my_list.append(subdir_files) + +Return('my_list') diff --git a/src/drivers/win/cdlogger.cpp b/src/drivers/win/cdlogger.cpp index a6692cbc..dac4dd00 100644 --- a/src/drivers/win/cdlogger.cpp +++ b/src/drivers/win/cdlogger.cpp @@ -19,16 +19,16 @@ */ #include "common.h" -#include "..\..\fceu.h" -#include "..\..\cart.h" //mbg merge 7/18/06 moved beneath fceu.h -#include "..\..\x6502.h" -#include "..\..\debug.h" +#include "../../fceu.h" +#include "../../cart.h" //mbg merge 7/18/06 moved beneath fceu.h +#include "../../x6502.h" +#include "../../debug.h" #include "debugger.h" #include "tracer.h" #include "cdlogger.h" #define INESPRIV -#include "..\..\ines.h" +#include "../../ines.h" void LoadCDLogFile(); void SaveCDLogFileAs(); diff --git a/src/drivers/win/cheat.cpp b/src/drivers/win/cheat.cpp index f697a7df..e7675dfd 100644 --- a/src/drivers/win/cheat.cpp +++ b/src/drivers/win/cheat.cpp @@ -23,8 +23,8 @@ #include "memview.h" #include "memwatch.h" #include "debugger.h" -#include "..\..\fceu.h" -#include "..\..\cart.h" +#include "../../fceu.h" +#include "../../cart.h" HWND hCheat; //mbg merge 7/19/06 had to add int CheatWindow; diff --git a/src/drivers/win/debugger.cpp b/src/drivers/win/debugger.cpp index be5fe189..c3b3926f 100644 --- a/src/drivers/win/debugger.cpp +++ b/src/drivers/win/debugger.cpp @@ -19,15 +19,16 @@ */ #include "common.h" -#include "..\..\utils/xstring.h" +#include "../../utils/xstring.h" +#include "../../types.h" #include "debugger.h" -#include "..\..\x6502.h" -#include "..\..\fceu.h" -#include "..\..\debug.h" -#include "..\..\nsf.h" -#include "..\..\cart.h" -#include "..\..\ines.h" -#include "..\..\asm.h" +#include "../../x6502.h" +#include "../../fceu.h" +#include "../../debug.h" +#include "../../nsf.h" +#include "../../cart.h" +#include "../../ines.h" +#include "../../asm.h" #include "tracer.h" #include "memview.h" #include "cheat.h" diff --git a/src/drivers/win/directx/SConscript b/src/drivers/win/directx/SConscript new file mode 100644 index 00000000..7635d53b --- /dev/null +++ b/src/drivers/win/directx/SConscript @@ -0,0 +1,10 @@ +my_list = Split(""" +dsound.lib +dxguid.lib +ddraw.lib +dinput.lib +""") + +for x in range(len(my_list)): + my_list[x] = 'drivers/win/directx/' + my_list[x] +Return('my_list') diff --git a/src/drivers/win/input.h b/src/drivers/win/input.h index 820a818e..11f7c7bc 100644 --- a/src/drivers/win/input.h +++ b/src/drivers/win/input.h @@ -63,11 +63,10 @@ void SetEmulationSpeed(int type); int FCEUD_TestCommandState(int c); void FCEUD_UpdateInput(); -extern const char* ScanNames[]; extern CFGSTRUCT HotkeyConfig[]; extern int FCEUD_CommandMapping[EMUCMD_MAX]; #endif -#endif \ No newline at end of file +#endif diff --git a/src/drivers/win/main.cpp b/src/drivers/win/main.cpp index 862ad2c4..7c28a766 100644 --- a/src/drivers/win/main.cpp +++ b/src/drivers/win/main.cpp @@ -62,21 +62,32 @@ //--------------------------- //mbg merge 6/29/06 - new aboutbox -#ifdef _M_X64 - #define _MSVC_ARCH "x64" +#if defined(MSVC) + #ifdef _M_X64 + #define _MSVC_ARCH "x64" + #else + #define _MSVC_ARCH "x86" + #endif + #ifdef _DEBUG + #define _MSVC_BUILD "debug" + #else + #define _MSVC_BUILD "release" + #endif + #define __COMPILER__STRING__ "msvc " _Py_STRINGIZE(_MSC_VER) " " _MSVC_ARCH " " _MSVC_BUILD + #define _Py_STRINGIZE(X) _Py_STRINGIZE1((X)) + #define _Py_STRINGIZE1(X) _Py_STRINGIZE2 ## X + #define _Py_STRINGIZE2(X) #X + //re: http://72.14.203.104/search?q=cache:HG-okth5NGkJ:mail.python.org/pipermail/python-checkins/2002-November/030704.html+_msc_ver+compiler+version+string&hl=en&gl=us&ct=clnk&cd=5 +#elif defined(__GNUC__) + #ifdef _DEBUG + #define _GCC_BUILD "debug" + #else + #define _GCC_BUILD "release" + #endif + #define __COMPILER__STRING__ "gcc " __VERSION__ " " _GCC_BUILD #else - #define _MSVC_ARCH "x86" + #define __COMPILER__STRING__ "unknown" #endif -#ifdef _DEBUG - #define _MSVC_BUILD "debug" -#else - #define _MSVC_BUILD "release" -#endif -#define __COMPILER__STRING__ "msvc " _Py_STRINGIZE(_MSC_VER) " " _MSVC_ARCH " " _MSVC_BUILD -#define _Py_STRINGIZE(X) _Py_STRINGIZE1((X)) -#define _Py_STRINGIZE1(X) _Py_STRINGIZE2 ## X -#define _Py_STRINGIZE2(X) #X -//re: http://72.14.203.104/search?q=cache:HG-okth5NGkJ:mail.python.org/pipermail/python-checkins/2002-November/030704.html+_msc_ver+compiler+version+string&hl=en&gl=us&ct=clnk&cd=5 // External functions diff --git a/src/drivers/win/mapinput.cpp b/src/drivers/win/mapinput.cpp index e69f7a20..2579c737 100644 --- a/src/drivers/win/mapinput.cpp +++ b/src/drivers/win/mapinput.cpp @@ -5,6 +5,7 @@ #include "keyboard.h" #include "gui.h" #include "../../input.h" +#include void KeyboardUpdateState(void); //mbg merge 7/17/06 yech had to add this diff --git a/src/drivers/win/memview.cpp b/src/drivers/win/memview.cpp index 2cc6baf1..49ce4720 100644 --- a/src/drivers/win/memview.cpp +++ b/src/drivers/win/memview.cpp @@ -21,12 +21,12 @@ #include #include "common.h" -#include "..\..\types.h" -#include "..\..\debug.h" -#include "..\..\fceu.h" -#include "..\..\cheat.h" -#include "..\..\cart.h" -#include "..\..\ines.h" +#include "../../types.h" +#include "../../debug.h" +#include "../../fceu.h" +#include "../../cheat.h" +#include "../../cart.h" +#include "../../ines.h" #include "memview.h" #include "debugger.h" #include "cdlogger.h" diff --git a/src/drivers/win/memwatch.cpp b/src/drivers/win/memwatch.cpp index 089517b9..f3451428 100644 --- a/src/drivers/win/memwatch.cpp +++ b/src/drivers/win/memwatch.cpp @@ -19,9 +19,9 @@ */ #include "common.h" -#include "..\..\fceu.h" +#include "../../fceu.h" #include "memwatch.h" -#include "..\..\debug.h" +#include "../../debug.h" #include "debugger.h" const int NUMWATCHES = 24; diff --git a/src/drivers/win/monitor.cpp b/src/drivers/win/monitor.cpp index eb463143..d093d6c0 100644 --- a/src/drivers/win/monitor.cpp +++ b/src/drivers/win/monitor.cpp @@ -3,9 +3,9 @@ #include "debugger.h" #include "debuggersp.h" #include "memwatch.h" -#include "..\..\fceu.h" -#include "..\..\debug.h" -#include "..\..\conddebug.h" +#include "../../fceu.h" +#include "../../debug.h" +#include "../../conddebug.h" #include HWND hMonitor = 0; diff --git a/src/drivers/win/ntview.cpp b/src/drivers/win/ntview.cpp index faa8a04f..ce676e95 100644 --- a/src/drivers/win/ntview.cpp +++ b/src/drivers/win/ntview.cpp @@ -21,13 +21,13 @@ #include "common.h" #include "ntview.h" #include "debugger.h" -#include "..\..\fceu.h" -#include "..\..\debug.h" +#include "../../fceu.h" +#include "../../debug.h" #define INESPRIV -#include "..\..\cart.h" -#include "..\..\ines.h" -#include "..\..\palette.h" -#include "..\..\ppu.h" +#include "../../cart.h" +#include "../../ines.h" +#include "../../palette.h" +#include "../../ppu.h" HWND hNTView; diff --git a/src/drivers/win/res.rc b/src/drivers/win/res.rc index b2a23b829ddc73bb3b09a328d59b025336e62d0a..95d1453a3da36fb90128574976b613bfce551701 100644 GIT binary patch literal 74866 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 literal 152784 zcmds=d2^gclHU7oNBBGRV8V(S@8}{a9&3BOJiucG5*Pv`N8_;(6e)4ILyB6G8cG}c z*=^_VeeiTuy?DFpJ-QnZ0|9iSkE*P!yfZ87|NY<3XP?jJv-`7`vuCrnvp2JM@%#Pk zeZ2NKUVAtDY4&vXD*n4U`-k|M&tA;FoBa^KZ{zj%@%TJmdmE2@@27b7ES}HfKSp~w z`!PQA+3Y{h{!`5IdGq+&c=d;P_f>rQdGpzwQ{Vq=_Se}?^J%{M+vaoMH{WCI>$8K| z;p}MkXm)FMZ?-=>o;{rH#;dpD`GeWs?3;MyF#g`3-H2EA;<@JshV%Dh==?aJ-3h$3 zar}K?>CNnQtp9yr2Rt0bs{a&!@5QQb#yY{rZoGaWe%m`z--D;I>p!1-uf+fP!=K6hjBo%ScR>u|{PkO}NM`_-P&SUX>P zX=n_cALoIsXTje;EMyh$oPKvc`w(kJ0?b2#zKQ>kyh!VNv48W~-y6#KsgVyq#wVUO z@)#M7{Cs=z+4u3yd3@%F_#c^#GvtN-z<*_nM366$48&37lb@u#}K>vuiRy+$wIKN)F1Xc|aA zYkqbb>Eds!e)M?94Q#CDIN-V$QfaqYb^F`?d^!KkSO+#0YeBO0|M7UofziEy;V|YM z1Hr?X8=DNS90o&z0Q(9Z@gQ)UV31waUXj0*@Briojn23p-`@{8pYOfDfBJhnvFqPwu0`a*CRv;IA>S3+>Tkzvfg3Zn^v!w$5AwBfVL?{koAFnsI z{ctFto;LwUj)zq{XPV?O;R5PGP7TMyx^@vNy4Pz5OUTPz)F}Nqz_`=*`r@sGAmMJv z?Bnr<=AFAIc!v{YU-wy$_BgHT zZmfbx5PAyu9~CQFMG=QV2k=m`c76&vOup$VXgn7bakt^3WbHhP*Ny`!`CvJIS3z?S zwiokbeO(U><6FLs=LaDVpN2pAZTx+o#pi%m9 z*?4Sy(rBr-fg>~+eg^pJV_)U8ht869D$fvX_4O;!`9u`^Tg0Xs9uvMahWvb@>BOXl zz>qksZd>LMbBKU%=;$j z?A>I`>XXp(WX*^n^^;L)|I%8paj_$gS}XBq{mG<_*gb5y*RhVbfxUU~8ZcmS*YW7_ zWXTctc-TZho-{B3O@A69yFye{u~pepbqH8lfNk5n zKbFd2(DBX2Zi24*&QIL$FlOEjKEk`M>r?M(KEFoUZ9J{MbNAD*r7wQHvDe7Mle59r z#Jh!Vv~T!1T`OPht$Rh@&zwrhz~ILaqt^59WA=Vn@_5IAW9-HKpfPE6{AsvFw4zK; z7u4PgzkO9LT8OAt%g4K95YS}K2zMcW;{ z?+eXWlc70i>?B2@mq%(=!6PafN9(7tgSWySAREY8@18`+r^7as+E2rVw)#{2Vr4JS zy!6G@P#QlCk8=EEk`!4TM^E|w4W({#OCMQvZ7|;nL+hd}dy>hIge!@m@Hm_gbLghi z*3E!o$}Z;645h3gyZGfv1&XP>{phiB$u6oIw~rpL4~2a>8!p>(*oN-nFxV~)rhiHI zZQ$*zPS{R+6yEK+eYM}%70z39St;YKt1m+9QNO4765dSzT7Xr1hNX2o>{_%BRWw~t z8v`CEr*ka51lJI#a;x~X)mOqb+_HkM6I`3Z*KpoLPHi5p;e3Zo*gRa_JhzIzkO!NG z>vAXEFP8;fobX9lZ)91?Fc9PC8CeG^*pxfIv6O2)9uj|V;p?c*gx79#!sl-#e(dKd zp8noW*y+lWkW>6QTg9t@KSd|I`P<_i$9JhF#`2w65gKEVnoP>9iX=;b#z$RUJIJj3E$sJUn1Vsrf7Zd_Mn!6MaFYcgi{u z3#>!q@u;00>Yw<#IV^W$&YuGpj-L?C>ZT{lgY@X}j+^LN-5>Gi^ZAb&?WwZ`s_p1c z5gzY2@JIx!kN@HCxwB?|j_SiVSzr-6^Yuy{PG`RaDFKb_Csm7Stefc%T#dK-|D zgG>K=hdf@&PWACAYJC1l?B{nOHGd3B$Ssf6c9LPq*QOZhyO3f}oAV{cYo7?A$0J61 z81V}EBsn~$M1L~PJYM3WFTM@DlUMBnrD5RFa7Z_h^DSeE3Ge9{>*4qO)dm|PL+3|T zv5+OA63egh$S?Jnw}KZOPv_J3;#KV)Sh_H~+E~e7g^z@_d};Q@?5pP4g?L52IaOuf z#CLY%{adm7R2*On-wq#{T2)Rm_#L9>x0)GlH&TFI$lt#h?=t&-UX&{LPr-Am&ycF@J|MNr#Kw2Mg`b?!MqW%#9#Kvt0Rk^A`o}uzng(iPQ&dLtLrlp zGkh8A0&C-E!V01?h^R6d0XWn+)}DP55V~?u^!zj^noJpbj5PznwPxoo#DBz?_~fJNV%S4=@9N1Mmzx>K zt_vyfK4#i)WWkG=8E*zZfEo?t3g>;uDfv7Acx8=O8|;Erc;xB{EtPmp9MUa6b~3qj z8n@;S?HfDFy7|k#vZH0hwLTj;F-KM8yD3)SnZ)OC#f63!ubs^JMXVATY5G%L8nO%y z@vG@^Ctm*_@q<($7pEVvsaG#7C=@BP6Eu!p0LE33D4FRv39=B$wqNi9I7iZcb+Q}6 zO&L2G3+I2tT%QKC|8WXlW}F7^;A#l#lNkdC6BK@KC!xIh7c@yedb2_if#qzuo z7}PxCRd^IET#ZLCT1tmHbv|xnkxnNf5ji7HO$O16=V3=%&Le@QVfsn~=at~5F*~2b zi3IJ2Q~GuqoY$H?>xPrv>(>90Ogo`L6;YO@W2q;LK-6%t*(oe$cCDYqQ?m(7X`Jn4 zOi>}T3)g=LsQXzT^%cqQ^iOtFyFE*l+H>V+>Tf>p>$6aV$4 zh`N-1*vMp^y8J1k9GvQ=W(u1|712llxUMGq#qar5V4i zv+FzmD6sZC@RlI`s*!-mDlmp01E%!1z5g}u7)(P=>@=eY^T`{N?d}LcuFv!Rudjlr zo~mn&Z+l-}h3u{FRn*6Kl%Xr8Xs!{jN^{^9fIY46G}dZ*iaJg*DT-|nH|?5PodmE8 zi1)mYYDvy+r+z1nYwE;>{2BK`*$G;-Hsm>ZC*tI|kqcO{wSPQGNF2U=Up2?+gT^~M(u|G5v zfQ`hS)%0Gsho8rS(+a`2A}+ux3l>Tq1|#^ui&AAXaI%Br;ACfVh-BB75Y?y~S_V_B z1UaX@MvA8W?@QrzPQB6W|Az(xDI0^8lJl#$tds_&st)Xt_ppG<`Y{pHk3rbFNDd#(GuDZTlX1hs)St~1MGfpFS&yZ{X zT(5aXdHkw=Xh%H8ugV^(Y>i8kERF7U+3NK=6wzJ(I?!UCLvhIU&w(`c9LoEze-0$B z=YZzcPigE3l$&NzCSm<+LCU6Ce7BG}%QOtY&vmjYL3mB9axlRc{Hj`1)EXr=K zdo7ZtX%@v&yJx9Kb99cHxMH0F_QlIx>*mCr4 ztUm54%X%~&YYFEU0I)193>xN=&YWF`P^l)KBKtnQllx$x|KREZ^s@{FL$Hy zm9dP4-5PGiYvcCs@Fa^}TIRJGp%^Gf*}Nioj)&Y{gE!_Y57 z*R-sgLmiW<*-$2DD8-!ao=~6f>WOuMXFGI0I)CUs0A*6}*Xo$H?J;hR>7)w1Y=|}~ zqS(CwDi_9iDDRGGIEa)>QIUpjo=p@bAjwU_{4$tFwIazE(d+JY ztekTLt`DYDAaT2tbte`l$w()rSMd&Kp44}dJiEF=aa#oOf2!r^yUWOB2RqMz{gF<}RVHkC{f4CK5#;&s60!e8k%UgP}y;Ty8Kh4a(cGMvnRVqA0xIbyIoZCtX-I*Wk~gdWjf*UpcVBY#{# z3VkY?Gi}5tixJTv(x1~t++B~tPz)PODuiN3=zhItHJV@EYYYjH6 zuZE6#eE})Fq}cYf5f2w5!cmG+OdIjmVnp~!+4gB8-aZ*o5ofF>`3&NNaZ>)yVoZ$! z?IZW5jCpr4Ch%c9;eAaT^IsNY%BPXWoHnLvqd9eBkA}UUHs;;}PFZ(4S37OY|F#&D zJ!Xfbo2KlM>Va819E5ZN-f3|D?**LT5$Ob8r;Yh_QyXZ0mw$w0f(oXM{O1#BRevjO z2Tw^$kK?94Eyk4O6kSal)0UmOefaeKv@stq;1q<(51X?38;emz`>A4k%Ba>#j^{bD zI}HQ(7qA*OSv}K6rLLTqmFt`oA(%>4itjP1JRHO5$8og!`3bDD!|@n2&a_dr{>zR2 zpsHMyFl|gK8t+9m#Fn%vAm6dE_DOqepYn7io**API#JexfZkX^YWd8Cvbkd|pu-qf z{klB1WUaKL$98v)q4pKE;I`U?33wU$xI9Td(zC{vme1)+^Gq9;YIkd1jl`&6WZJmg zyK4NR)1U+7g{--;RIwM(CThOia5eaql>}9f9hr_p>LDbk75hiavvV=#~ywc~7hSKb<6D?>O`? z-HY5Fcd>a~@tplr#iNIh`Yta(Z{=>p-|Qa} zWh`Zv9Bx0H6{zBAT|BNBv3NXb6hU#>n?2f(YLZJ(&hAN@__9a@_v9AD$`ndv+%~CF3L`WG|YpEO+WS^lfghW8IvNf7aki)rYA!DAjmB zgtX8-Z1b>&eH$$ul-UDG31Q2;_h>G1JcdfZ=;$pbrvv& zsOD8SADN}FBzNTVzHDT?)0GJ`|xlk|6WcaFM`bPzO)CSXUD ztAnGk@#Mi^TgrmxH6r49ULG2_A9PJ0-L7ut>3!Wpc`IgNWV``o1Qp+t2LiXywenW* z0(!@hK=*{p<-p_kWa_7#zf($x9NK!XlJ;(?_nZ5N(1)JRfy##}VyL?0vC*f5efKX1 z`?4YFWFwn$o%m-Lu_T$}*SiCvPiG8R%h(;@_U*&QJD}U0=ePJG};^3)*JYY4y5Afc*k}aZV9w#R&|ZOvQTSUG82uZge{Nv9H5srso)U zT3Eul5=-);jHe8P07)_~$o#nYcuNCi_&YlmO zneS#RRV{!c-kVtI>AAg5^{eVyXCIpbzkzeMU^QRoen=QelO*Y(pRu~G)NAe2y-0jV zuN)g+rCYcwX8COm+~vo*J_PkRn*9&)dFPnsagP#Fi63YG5cHbzLta03)ew((68lVz zz@vt$hsNcW+l9HV6OX`&NcwefaNywqBct<>7OK zanC&spQg0+` zBEKUU{qddqCx-mj*}n$0tH&f1wyy3ILoF?NW!eYTd5^WL;3xbM_E8j~=ove#dhcm9 zMCptpQBU8F}kO%;~bZyRhQq9Wfs7a1-a@ zNrYQ>!h%U|KudR05as7i(Dv(P%pDn}Uw9XZNaauIk=HRwe-u`YT}rl%8(F>&{XtI? zGS|7cEN_b&EqO);fy!qh6T~WU2Xv>bSRBG_mUL*0!YM9v0ug zUdlNlLh1%bKY!*&zPZCcmiG4Ygqylkxa?SG-qdaO-4c;K`#C87c~ClhEy=mQE=I^E z$5EK}0EqSdRio9T z_T0$DZ9G3U_55JP@?Nl-*L?)P!)?hOBLniXKv1HEgdjU5I=o8}>A~ z3pvhia$g3kO|c9pgWERfcuDOXUG%8WT)!UIX*<{0o3~54snIvm4ElCV5IdIL6@6pH zTbHla+0F%aRp)eT_1wECzXd)^s>DJ#3ca}>Kcx*RUs*bbzOBMOeLz?V_9ULzw&-zF zR^)@ArT39hgR`m5JP3Mv8rET(_QZ`lfhjs%(_5RG5}rYeFT;yMDmbdZ-tv64SKWt# zWUq*hl-(jDBx{NH`dEE+3i2oJ#(LTnV47h+X1X8mVLAE^?%eKt5^_!1%hZtu+URRt z!Y%TXSS#30>pVMNG4yqR5YPH`P!S&CyvaS_XP2I#)@R#>JrsA9c0!FR;5%?+dq(`I z8@Jmr#y(>SDs|Gp5|_Vi3d{GfZcQqWN;NpKXvGtf926Dnl$&=~w7e>oTi4I3FrZIHk*&01>FsjGeYgv5Vt1tVMK|_#OFy>`^+D_pR+6;U^A^;C z*7JaA>5Jho!!edFZHP_jbOOMdeG(dh=p{7XWmz1AEq6U44bmLTZ=bZ?>sof~ch-R2 zOH~)+e|&bYtdAd0Y>r>s87*rLNm$9&ZV6k@Mz`&-gp&^;oz$UQRlP{4A3|QCXVaN1 z&S0SdsEw+hAwlw>c?3ChCZ1P)>rgFf+eML9ccXHRL9){7+M%vtso>)V@E^juNWOZC zzDvH!>tIcEYRUCaO=jiV8pz%EPjY3*TEy|I>e+T1jq`1+h`nU@a!cG4pmR^yfasj{ zR;x)myW^AdtfgG8?}>Z>oo34S1iDhR)c&OFr^^}Y(I;o1baskN|2(|5o8hg@7j<2w z4#Ubs;{t(TP^4nGHed`}ml{bO1QeH&cTlJ7K5I;N50!~sYa`w$i;kEM)F~Q=F3XkG z=PNCC?(}S1?5YaTOzt6k+U^-TllQGWhhT{$nX0-6WlvRuTduAT7lRWl4=^OjG-luG zTnxp-oy=F`&h8t;ffKx987j72uC_l6U~d`>;#8!aU^s2lJQ+}3fW3^4;dbqH-g~pT z+5%*QnHlpeb$2p^ldw7HG5%EQi7B56XXO@aUHZFggYV;p zLda!(8eH&0U{ND|_<&4^YNl&PJ+>EOF z#)hMx0Q!m^HRVjn*Mq{KxURYC)?7N1c-ZhKwhtWT6KJC9WI;HFTpt;EPp$J&#E)~U zN+U1dk^0Egeeeq}5v}p)vbVsDP8^KGh^+s+&Db7UJ1U&JenC7^QfuA2f|^W6)b4O| zBboTut^Gwqike)dpm~vR!{o_>82v+oBW#HAHf5fNOY20U%bS+G(`nM-QV+bmi(kb7 zfOLul?psU@lRV>664!Ot>btwG!K8Oeo2;~Bh%W9`V}^J)*eDbun|pET78 z>K;|j{aN(rQM3wMgSjP%#8ZwkmG)pgyY)#(Y;(GA8!YQ~yKrDTPY@_3dA0E(+7@Zu zzRKftK2NoYXq;+x^w)W<(wC~kdK8wXW1~nIc3~%U1>J|<2j9GlN@n%!BIEUK(9YY& zvW9NDD%jXVMSzs6^}Pk9PU%Cf)J)$DdL>)=Dt@t4mYpM$)ge-fcW*cz4fxYAT+OC7nP0GLDDvggqus@Rr%72->%X&b&IMzrzS}xx{~$7 z+&MSYM=Z~&se*Ufh!+?BggiK8?z9ohQ)-eZ(?%@Ms9B;z2V?PAo=_7Wb<^J15q)E& zqyOM>+K9fdQe7B?$7v(_wo0Et0)zG)LzQHe|doIdx3)jcha7q|h{}X^NMXsBG)B z5ldYm%APi2sVh{kG;PFES0F*yp=o25+5)YOwCozQlpdTOeH3!zRy7(T4v{^B6)MWL z_4#qeLJq^0B&xiATQlXz(8Bdv?z$g;TEdWzXLKkG%{SHx-47hRkDM5PKM#6I|B*|; z(^Q{f#lxMemu7S%QW_0!Xq61A`v8=#vdS4%sj4!JO; zy0WX0zxXyZ5q;X;Eoe-!9ahjM(mEuMB$!=e>lKtShCWe#{HwBlSJfjLQLzL0J?wt& zH`GVJ8+r^4W)E7F>j(w(qv!H(o%QIaBfpQBzRppQmlBX>?2uJLr(0- zGB?RvbrhH;^_XF3wDBlxReD6YcJ3(r1A3kk(*{3&zdUW@SBZ*~CtQU~B)wv2;7~h9 zABACj4_D8d2x{Vf$FgO=DOO9w*;P~K{<>6Ar2O>wf>@mI@lVJ8>f;mF%;A>RrTC2N zHK2vl+_0(#x8wWbWaTy0>0KuZJqr=oE1C{N}}!%5qLuf8vT z4BkZIqGQYR7p|X9kh_w))L3jAICcjVOMf|7E7FYrFzkU`K9;}p8wZG5!K>0T~8-5TK zLox+BK|H%KY zK36)%7a>OheaZ&y_C)F&clyqcAA|B#wc!p5uY%H5G?D`D#P_wC?p zo!UAKEd({YE52*bbDviJh5S3$zWP=S zY`RsFvrcg(m0>3$r8T}P+vv8?_MrQmLjZ0v@kn|3Uyk@eVLFL`WrD48R7k2i)Zd=O z!SHIBMb%q^SNYr0e45~ly+Mv&JZFTOTufID*9fqbOze>Ce9;Yi0wg2Qi5|5YyqwIEeb;d4t_B)}_jm#wU3mdrlQ25efO) zUA~HIsHAzVwY(Blmra!@mTN>Y>CXHzWQ=-0v}KC)s9;h56vxd=nNo{1mXsvh+;Iv; zhh$5ZyHv02EqC8pPUj()k6hb-&b+W{!>E3%ws)bizNZ=c%mjU6{m3UBKUZB2<(X(z zvws({GPD~~$hyT5H2QZ_+m6nAcXIxq?`fdnJ}o?J40QQy!&XN>BWX@D?a4-0RQqis zjai#&hGn<2Hn_f~E5@u%e%&VhQBk{O6mkL_s`pi!t7;h@SpcGaMgk}D&}847y#=ri z4-Nia|4tK`vApb};<~oD)le(Fi4@1a-q7mP%;wbTCTu-)6M9|wA885sPt$Y+r>fz3 zc!v%#bkNDIP517xPpAx~<$A6g>Q)972CHTQi%_9#7~TD%O5QeI*R&8`KPP39^)8u< zjz^}$o$Q_PIdpWLEX>E21!2E-`Pelb;rze*?8Do@>wQo9sN1LQGd?;fjqk25qN{a` z&lsFl0VkV)zr^)0`0JWQy|I1_ZXotaG?b{QssqW6ya=ma6OlSXg0$Ym2aF|yyj-lQSE0AuItvPK4wY=i>;2G-R=$}VU0Y6xoL^y~u)>xj(HIik3 zcd*o6z3!L#@Bf0cBN1U4M6H<1w}4j9MBL++3j2meH`;T`hi%8|o0&YNq8l;h#=|2(Pk=)QN4x>aZq>r)aw z?>}5-WN$^(_(qdk=OjM8>JK9l%l)8qsVKV&sZ+Q+c&dXInOJ$DWM@CtGmpa3VRPpQ z5;*m$N6OHvex3co>(ciqB5H7D-mMBa;AdzHuBL-5Cy&Lo`m`clWu1|^7=7SsGEg>0qP??jQGCDRZ zdUy2?%iWlyya^+R%d!pqIw7 zRxA5Y^n;$g%kwtdfF3&#=oQVF0=-578yagH(1S7NmCrf_daOv{USn+odZ-fUl~W!M zy|S-@USn+odh`;|%S)O9JtGNvjkOKvMK#D7oqd=BKURp~_h{Q#0rHJiu=|QANGcDP zJj$ea1sZJ|D*$g=fvaN2uK-^13N+d_R)Eyd3KWGJPet+>yaJ83`4vE~UV+YOj9-Di z=@n?SZLGlhm&nRAK9Fza6=<|=tN^I7tQ3cUucz#S=uuHWok-lq8sxKR4O1;4*DGob z8f_bEP$Wxhm}(C>KdLos%OX;y%d|ArDsnxK*03$R$bDV34^wR;NA-jJKoe zk=O?jz4O^~WfgS(S~eW~A+9O2TJ>?SM`hacMI1Nfv1O&RPa2zNL&ts`Fp~wLP{bnnT^cU@Y%XBWINL%uNz0X9kqEpVLd~`UQLdtGGflX-{e=Q+2OQe zEn-e32Rlq|g{;)JBIetThu;W_qh9z~tn)_XFvxpRGd!RDThpiG=ab0zX0tB!j*4Yx zpF2&zx8swYJdQmjf5zEMI7J?nVgk-Y=h5Uo5+LV#(H5i1it%YnUg3T|=7-j(x}omm zeo)$-1{P&7$=z{ImKx;;@pgnq#Qo9obl&e*jeH4;i4`ohY)BCp}YQ_6@)hegQ`5F@_~wo*Flfv z-OAXys$7#ym1WmetzOG_wWasbl6xB@ARICaKdHaP^TU!J&|znj88eY5kqE$hc1ax3Ohqyz|*pYpBXo21M?HEY%>5YOz)#3tvZCY(+syN$&m?L^E^^ys^* zwgUm$#t=9fxm^g7h9)SYP%&GQC%MF^;}36?3evZY&Dov{Z`8L+YGtx4y0JG@K7Acy ze-qL#x5bndApgUvWJ5@2-;Z@8kMA||jQf1l{jSvLU8j@v31k6uKyCA0%$t9k>O=L9 z*o_$;h1_^>^8SPPJP{W8zr`p)4CKaah`59!)7tj1eGd(4{l&Gmm>5udt*Qm-e@rqk1uS-UGN*)e#``4i4? z&DLt#yLIl@Q0#mYIDyu|1{pi(eT*Gl$4PnqUObg>qM6SJPX1ir zMCU#?gOfiOCuObmqy?cGcIABFFV!O1#oktAWrcL00BQm(Uy$}T+d`^`BNoz`{_1FS|g4OC-o-akTDmt+q^ zBbWF7>SU5U87dTzqVhlW+A0a3W1x=hlnIxY*tRnjmwD7!o3i|b0q`-_my>VmJAT_U z;{T|pYqB&I8%y>{zQ&=u%nkR+n!I)*568rq>O0F^sRyuPZQWL`_gd!+(@Ixch&dkW z&_HLLyW~~~?g`Cfe~z}uK9x32`@0&7+`}yU7T+pt=%G7BkK?`gp^kt%1iWjuD~M6a z0t9OLbG~=rZqU%p@P0KyUkK|sydSvxIrcR5UN3L6S6zg56OD_uIcq$U9sg5Ay~&1i zs*Xs8C7L_`tQ(VcJD=M$$qu{Mdp}Q*J(mVoPYZGh9`$o zymksd8&8{a$#e}#yX9`veRpddW_~=`nKn*{(ikVUPWo91IUM6~q6&@@8-k&~6qo`9 z8B@tdbzs#oS;>&RB8JOA?7yg3_B2#XPK4Ght3KgU7c*Sa3m)~<}} z-gV|;j;oENllRL1>yx+c6u8QVN3uZ^x>rCkob^KCyy|KwWEIK7le8TI1=VSio}~ov ze>)-lx+HGtwH$}crTYIU@By!+-8nmmQs$WxuS5<+FWZACNs=!7P;muRX9Le^>}($% zswQ>=3*Fcu)3r_PBxt&Db2iXiSb`g!rQaUq2sc2}g`2a1=He3E=v?)-aRW46xH%hW zE-k^0I$~}cH$c;co3nxDt0lNm-P*Qs12kQ@84FF_&g#Bg11e=twr^z-8^)GlX5f%# zH3W|O&fE?^Pp5wS;X{`A_ApZBHH-~Gaklsn4DPoI*9_U2v37Wlk1jh(8T0K)wGy7w zl5H$Jb;>3Cy4q7JJGS7hZexdlE9YGC$|h*FJoV8B7m8{O_n^m8YkBq~$BG~sj+H*K zQ#!`}J)&67bgjY+{r=H8XYEgOtL<)_NFb6ch|bb`Jq^uSdW&7qoSlEx1jcYb z>*efVIZY|shK0&3-L`JMBu>WeO?6r8-66-}Icecrtwq1>IzmOL@TQF^>^mw&mBSN^ zvNDFiI6Qarbwo7}PAopEIq}(2BvW4X<}yc|D|~V?Cv&TYRrdd|x$Bly?koN+vPVBw z>~DEUxuzcG(bpm3G>J~7)uf#2i1E^ln;{X7dZq1tL$T=`Qk!0LJs^q^ov53h=mqG8 zX3;LU>O2*_!J?%DnY~g`!usMlUlp?|1DN7R%nr}3d)7xE)g@r^O8Q@)#+^~=_*lBKNGXP}19I#i+}*^eT>NT!H+p<&PNtUM5HN~Wgy zwQlCehsPe-?)+#pt>1RqcIOx7wSGl0wmU!d7+$|--tPSDxaXHF9W#GjiybwU7@UCb ziq$9k)H(M=mq=c)B)H(sRWg3)iPJjdI_1k9JihO=-wL2?*|V$w3e(@ZeK2$l^-7r2 zy%d&Z1XS^Y-JmGT`{YiZvw8vD2`|phOH=ok({*~W|GEkmcss$O2=4Gbs{8O=woBrn!+=5(2JOI(09UCY>b2r@ zigFK;_L_BPWxbZY`VTK3Jk!m9W%nQSoGcoziuJVP5BFl!qlg6V#~DM{ zh^EK(3RwT6MYTH^<8&Rd7j^V-bV}W?h%f^4VSJ1Dy6W5gDxHgvs;mTkPo4kWcz!Sb zySw;wS0A3dPQG08Fj-U32KTQ7vB!)Xxyc>y7EYP}Ge4yQqQa{(b*cbyO>I$Q-|T_)cMtw=A; zzeUvHO+@Atg|S42zb%pBBxoOc#S-MbE=ib6JG%I;vIvp&o&yXKPr#~#vt+Z_zU#L7 z$_^vgfVqatExReb7j+{|>edPttgC?9RT-8GIR@%}gtC%!z)?h((S;NFF745c^>XcH zca{3AyAkCg4$Dq6BfE>$#JV)2&vC>3+UIFAsz0pflTN?X*gN1*eFyPlhhYz!;=9N# z&x6vS-8YLB0XH@T7L{hef|xRcvbJ7&UO_aJ%zDesSe zz{qf!F~Mt+Yi&&QvFEjR-A;G4!7vsK<1vTqdHSXvG3TchoMvH z>40`Er6#(9lQoiWnnh9h_AGT=@(o7QeT%>h2G`B0ec+Hir%bBhSho!CgY{=&i~kUj z5iD_I-ga5??1Xjon{Q*i9$`Qlp#jl>>|)u^gLjo#y%DiIb=ynzXna#qEA5?PR>NpZ z^UKO*G_sp$4d4;im(*HcQSxHu!Sz3cbm3+_?l##EI?i*tmWk{1#n>0g5@loLzYO1( z!|0d)Iyy4anNgip$V97;_=|=jUNoA7xCVGy=Ngb3tih2n>817>>hhQRh*z-!VLxAy z;(Xv=yr%m+kx#5evHrF+uIpHCO?(sjgnl}2)c>#&uRxt~gdN!j-JLUYF0WI9yk>YEjF>+n$o(4L9QOWSSa*3dN%uO(6oFq;#OLTw7;oW-ju1g%+u%w z3ht=v&e6yl5jV_(nt)yFAxk6f;2CqVj*l;2a}?O63+;Cyua)tfmaSpmu`A|_zdy$_ zaL1XAI}s^(P*_8G%&03Xf)o_zE0YTaNc*`T^Qyc^jVl>RRuH3N4Y|5al~;W%_Ek1{ zU3&`W^ClnjE+}3++b?$B-6>6;ZJA@1!%C!Q9+|wC0dV6SaVW&d zN+33mx3xyfo#&Y}Ki_HMQegFMWQVz-^<_Z*L+Gh_JZBB>L%zIh{{PVE_~-HJhs7Q! z9%@TI|Lz0N(4I-&5 zrDR>E9W~#`KSaM`dnAs=+HT`TH#pIm+7y!>cTS|?Jg7tc_K=WoqB4$}IOH3+#9zSD z<#s4y`B;j49-WnJE+kBiGrF^#B^NKpCUIld?EZdOl9H3-)_f4~ziG6>yI2SJ)Xakd zgomySvMtL^uM*u1KcYB7DEkL(cK(By(&Tu^XZc(W1|LDl&it zl+)sv9r8ZpFk_`*r@@i@UA2$8L+t5^CX)`$VM=nY``M=XSkg+lF6f*8+k0Ne+x6xo zA2sak6J9%gT}A6Z1x@=VHE!cW+e*9hA6g&V1-lEL$US`a7LMCA4v1G^b7Ga5!}ADC z>B(>t;jPfa2LbcxS~GdT^B56|oX42Tq4Nw0!rp&;zKgtE;!Vz@{}{W;PQPEsbXLCE znzOoO7o5Nd?<%6JT%dG{Z1Qf6U9)gMZFt;SHRQGW!80b*RAv@y{*WV3vj1d12`=nY zc|)r+6jO6)Kmb=*mSVxJ7lOK6A&y22%^I1tkCO&nH5!t1*f6Zi^+H1{)t&^+D??x? z;rw+%>8kcAP-3@#7jl^%0mD4SZmXgjpXwkWd^+w_;dczH`dHAi_zhGG>SYR;v}pV#TD>+Ic^^u0iAGUD{csmO52V&#N&un?S^IAW!-5% zi9-W7kMd9F0Ri6P$7$Vp@8*FW-)=AuJiUzl{1Cs}IZ==#QuoQ4orq_P#&S3v`;jdJ zg;|S2bL12Fzb1?8^nDcAkRQWYmsD{9brL^-f6xMO@3nX)sX9#F!;`kkc7mJUg)Vy^ zv%ZUnAdywwVaHu|Z)1iFjYjBN8KWrEl1_-JR|6hb4pV*ISZLgafJOb+Shu{``;8uy zoniZ0XPP`?w@j?hx7W<1U9}w1PAVSd@s)#ad$RTMZ^b^o3y;pDVPPtYQ=%aZF#GfOFT>z2pkhU=53 zZ`(sF7_T*1u_04-w7r9M*lq{y{S*{Qob*{kncszOOAxYKQz2A7z&V1UQKrM7F)|L4 z7de#k+3yM&`^D_{8RXFUc*q?mlQ%KGI-@V_Uly>lv(sVMncB_6exZPUij|t;ld_&R z5BtRe_GwnEX-2ZU8}_= z>yqFwG!mHwO9I{XO5TcD(O5|;AQNl!Im8o2Zs7qS$BC(qjjY~1!P39SBiQqOS&Xk4 zYEUoppQK-~Nx*LMv2z^P_g48SvKHi2u?S1u3=WdDVauFXz)2}N>)P2~WLF#yj7VeJ z+ET@Hmxim)l+$Rk=8y!*np3tRAHVb_)Julm7Do|#;2d^$?Ta!lRK38hcom9t5Hm&_ zvLhc~%-HosDYxU(ILL+ba7Nh_#jdz6P_?4{iTd{nP*j`f>|YLZNDNHzPDZ*BiaFAD+thA)kEDI=E(yScH;H)ZikSh$jq_gI!~@laj4Sjcb8j z9`z6Wfo~6JukVdt|8ZB?b;E@GR_Gp-7FJ<88O;yV4(Aq@V zs7-ks&t8RxqiC1C7`PLy$IO!a*opbfbqQ0>T%JFY9E0x^A(BKZJ)}O8MLvY0amrcP zMjxVG`pqP1%eaa`$qT51Yk zA<5(N+ihLqvXx&eiInMTsN!=b1?@C4^nK(Ux&Q$b)%2ex4d9AEC?WgZA z1_R42@KUeRl}f!c=?vDTS;3o60}x$>X7Dy`?XJ_uyd7DzKZORPBi1+Zn^(+s_rc;k z_(ABjd(ArX&uawwu|9~?o=AiCXLn-7*CVcE+f{YHHND85P^AX0UPU~X9Z@DP$J7^5 zIiajb_qmBWpV9LH+fWv?G!v46U!<+4bb4GPZ#uq5#8oW1LU7#U|3PC`h38M zYy>)+MY7hoURb zHDtf~Sb3b-P@Q|O51<-(Q+Q{{EyZh+w8-gV>O9&-&7&DSPZ`siI*)cx^JoV*Gmm!9 z8kGOK=c#!SUz!!)5pluW!S1!uwSlNAK(i+!8?=F za6jG7w{3q2_tx%69QNXT$a~%Hnf@AFNUaRh|B4Ois7u(0Y>!|K|wAFw!?XDm_i`^9*-d({lc6YB< zcUSX_-(6x6-d*piAJ3Cy2F|p*g77SMS8#ZD1;^OkMY6AsDY(PN`2EG+@&39NNl>fO z;C$#^TWRvM=rzP{OQUSlau*!lUB|G2h8#j}_tfKD4%@27QfeMX{mvVHL-6*uV`u^m6&jR=xYKM=ot5OL939GT8%>f~LU>Gl;{g)p3|IPGo0VV}bvC?u5hc+}}>f9IAtrgG^`9 zBpoG}`Kzo6wX6B)b(}v6dV|_T7wqA<)h?q8MF&k6_-}0t)M308yZs^dF~JE(kAqWO zL<9vbYKyMilX_ez$pC7^ehwLsV3UukZly?r(h4ed3}>Tm#c3sKCc(qQ_zykP-Ae)8 z=X@n~bF4tU;n?%dXDfA^Pu|Zd-}TL8F;(HC>=hcvw_~&7<=qpyGnqO5$YN^OyR(?} zbJ^)sHZ-O9pR`Z8^s8h><>Aw+a=BCIp!V5w!6DCT6&7ojfN$3F=Z*sh_Zr*h zL6Z^J9j2B;k_OVPK+xApsIMG{&*>l1=+Rb=pOTQ{5-tza5WM7bQw2W(^I4FP+|$ zmXXc1T+SW@HC&GxjDB)fd1B-&`>_6M%WjMQY$R%NnxX;iXSnM`aKY@l_?+QjGG7G#$^u*69+FfGdAI~We z)?&&>+KTcO(dfcm|2b4m%8e>i|Fvxd>^jZms#z?Cl8ftfK?NnXf1kz9xN@$eUIRu zbegSucaoothmdSxt=9J&aGt15BlXqp2JI2UCMJm8x{Uf|+v_i_?6Dix=`Rp5uKaDg_qp#JJrqBXvaK@H04V-sVdA8nTMiCs%he zmGo8L@y&9^&A`yZ_*upqNEJ!4E_~HxKPSlOSq!(*Dedpgd2xC-69c7-OzIJ3YEH0l z=QaCy5IEjH$y01X4>-qWnVs9j_Oh47Aq=%YmtanM8|kcEf9k}-Yc+pd(Fl3$)WPEu zbD|vhO79Q-CQ82-7^`J)IGKWtu9Eqt&68?yj5NY+h zJo5Y7*n#hx9E>{8AH+9~f)9yc@5c`Cy~pwF>ljP-klu-RkqGz*yvrQjbIqF>x+Ak> zMD8_G8S58M_D-YmO1=g{$3(lw@w=vv`#}Q_V=N$3yr;Bz{rQK@jCW(L?QgLAWoFLb zv79bvD7BqG3+*XRc)w!?;>`KlN;>lxJFyOMEj~L>I3f>L=BNzwx^UD!H?#~x>@$%E zdXbzrN}|_KxzFpy68oT=gFNywJi({X`hNT%mCv5fh*gzcBfN%n(GV3?W#_-u*l|qx z{817$tYsW?-ME61N=dm4S9Jc_JBQo`jyBD0oW1BHx4F?=k*4!UOT-go-I#{_xGuhf zR?AK^%V>#nvG*HY?d}=pOUsc($oG5QnEI;4)ywdN?|{XnxaIk>m*i<}5=-QW`te

aV!NfmqqA81Zcr z16Idd>i*s}(4BAJn-%hVzM<5P(T(YCL@Vk3Or2)_|1VKxxoiiti$o0Ov)`OV4b*k? zd5m&B{P;gb%z!#LSwKWxcjJ{?VKMGCAV>!wllz)U@O)GI|kuPR}b1yToj*ET9b4WDt-pfm{kXNg{)Kg~!^ zh+OyEfatGHRDs!*sdb-oqN&OV^o5{y{+WD@R;HO$iKFgp5@^bPJ&R zRSnCN)$Ty6S7M2}v2N7~#QUKdg9KygSJcOC-`=i{5oE^At5B0MFm!ZIIrz>+!_Lkc zhq_g+d-S?o%lpQ0>xpg+a+L^@O}QbjMKq-o0!SaKqiWK%k8EQcJYJ|%qhD*ZEqep~ zuI}q#+8|%^P00BDkW}eB0&()3gLC<~>~?hK#0N?6NX8toDFjB+qrH zjQB!%d2pP=ULX7GurGDygnND5&r(v4nN&@unK()43c>bFedHWtK_lXDsGa}JSIgvF zzMei5ieE&10iF>jq{?26@PuJtcd*gEI?nZ?DQvn+ zr7%2n-yX#JsGT@Hhvc{BPzCW=+PKsBnAB+K1S|cO@rEo{RMlcC6xPPhMQth_Db>X} zpM@P_XN)`5R(4@capYB}18+n|U9?ReA8M|htx8oWwl$aM$W2$ezrEWY7z!g?vI!WG z8mxakP$K6y1Eus;H1G)n>H<)P;R@Lq0wXHjG+Qp~k6diSZZMD?&Jk;@$k(`Hp^-1hPd9RP;vPWF? zi0&^VQ~q?!$fQImUcH*fU^@%P)0 z%+#$By4Lh4_W4!kTx40?g3F8avmRo@F%+_)}f0 z;S3cu^Q-s5Bb1M zpP-26%`SOvq6K7FU(Nnu_UDzj#cJ-$PgLYn5k{XGvI!3h|G{&2;hfmTkG-+%k@N_J z{rQj+8dRCD=D2bO|Hn*y`EWcgkfQ8Y9~orG{0M~I{M&_f&omF(Og&FL*6K%QDtYTP zg}3S1mHkuc*>&c_`BOI!5{rWaxUcYLR?XgCaTm_U%LdKepHkcRk_?f6inZsGxV}3# zf(PHkiAyR0-Zm#Mr|y%^zv>(mC!&ZDzKX|hJ7!`>@*kZ)$yeZaPw&cVUP~)a&ls0+ z?njhfIq$of#p4q5G7(LAXy0J5XkO3^g$0YbE=8H8(B)-cIZgb|lwl{oyPd>*BP(ss}iSoI~k#t%hgs#F9xq1id#`!B~ffYAIkc{p3*9@J_7rRfCiK zTf;Fft^Ood_r9qmf%EATqzbj?&7QWkMUF9K`f;P%_X6wGY>|u5$t!H|k`L3W(lg-a z_k2g2fX-0XYP+bp+mBcXHF14z&Qcy?9@Z|oLuP?0zKKy(5e5yzmrx4TVw}MxU!*Qa zR9JNb&dV3nr@Y7$!54k`|kF-Ye8ff_Yv3g{| zdd|)gE59AIO7!V@UG0}CBLdhqPZ>zJax|6iKZ_@HnJ+?J2vW!v5tGZv%s*&qC z>gCwA97T%e_j-{9RMuP-F+N95ecEyGF+56~sPruRtkF{2t5jZ9eNCsWvaAk+ex5eH zkg;@2T5>Ny<$7E*0!>kI07U9mF?F@f`n2#M!6R8v<;>O3IMIu1RXBxI>cb1N;@LMpltP;RF$V_8$aDQPq7p0 znwu!fJZMZ(GoM@4UF4Y9gXOc=G0Z7M>bZnr&K7+Z|0N7VPf(dTNb4v6J${w0H%XjJ zN9=@I)e@*)NUIaiwsBiu9aU7^67SVrh}B)mR;RilC`s}G7=+Dyb@h4f1@*jZG~4S& z)6o?TjkjDnOZWXIK64N{(Df?G@^#GD-35PBUi zMXCOa8Q~UjqI8h?rHt#38Ci9NR~lY)O@H_3^?ERP8;J@wcEa0x*PLy56_3Xa-#m@~ z{}z@N-nV__qE zdv!p^%6Obd#FQ+Isa#e&76B1y{2=*K%VZC-PS!&%8$EiC$McPo<EHkW diff --git a/src/drivers/win/sound.h b/src/drivers/win/sound.h index 46b40383..c84b4f6b 100644 --- a/src/drivers/win/sound.h +++ b/src/drivers/win/sound.h @@ -5,4 +5,4 @@ int InitSound(); void TrashSound(); void win_SoundSetScale(int scale); void win_SoundWriteData(int32 *buffer, int count); -void win_Throttle(); \ No newline at end of file +void win_Throttle(); diff --git a/src/drivers/win/tracer.cpp b/src/drivers/win/tracer.cpp index 863cb05a..bafee5cd 100644 --- a/src/drivers/win/tracer.cpp +++ b/src/drivers/win/tracer.cpp @@ -22,12 +22,12 @@ #include "common.h" #include "debugger.h" -#include "..\..\x6502.h" -#include "..\..\fceu.h" -#include "..\..\cart.h" //mbg merge 7/19/06 moved after fceu.h -#include "..\..\file.h" -#include "..\..\debug.h" -#include "..\..\asm.h" +#include "../../x6502.h" +#include "../../fceu.h" +#include "../../cart.h" //mbg merge 7/19/06 moved after fceu.h +#include "../../file.h" +#include "../../debug.h" +#include "../../asm.h" #include "cdlogger.h" #include "tracer.h" #include "memview.h" diff --git a/src/drivers/win/video.cpp b/src/drivers/win/video.cpp index 1315e9df..ba5bdb9c 100644 --- a/src/drivers/win/video.cpp +++ b/src/drivers/win/video.cpp @@ -627,7 +627,7 @@ static void BlitScreenFull(uint8 *XBuf) "decb %%bl\n\t" "jne akoop1\n\t" : - : "S" (XBuf+srendline*256+VNSCLIP), "D" (ScreenLoc+((240-totallines)/2)*pitch+(640-(VNSWID<<1))/2),"b" (totallines), "c" ((pitch-VNSWID)<<1) + : "S" (XBuf+FSettings.FirstSLine*256+VNSCLIP), "D" (ScreenLoc+((240-FSettings.TotalScanlines())/2)*pitch+(640-(VNSWID<<1))/2),"b" (FSettings.TotalScanlines()), "c" ((pitch-VNSWID)<<1) : "%al", "%edx", "%cc" ); } else @@ -649,7 +649,7 @@ static void BlitScreenFull(uint8 *XBuf) "decb %%bl\n\t" "jne koop1\n\t" : - : "S" (XBuf+srendline*256), "D" (ScreenLoc+((240-totallines)/2)*pitch+(640-512)/2),"b" (totallines), "c" (pitch-512+pitch) + : "S" (XBuf+FSettings.FirstSLine*256), "D" (ScreenLoc+((240-FSettings.TotalScanlines())/2)*pitch+(640-512)/2),"b" (FSettings.TotalScanlines()), "c" (pitch-512+pitch) : "%al", "%edx", "%cc" ); } } @@ -676,7 +676,7 @@ static void BlitScreenFull(uint8 *XBuf) "decb %%bl\n\t" "jne ayoop1\n\t" : - : "S" (XBuf+srendline*256+VNSCLIP), "D" (ScreenLoc+((240-totallines)/2)*pitch+(640-(VNSWID<<1))/2),"b" (totallines), "c" ((pitch-VNSWID)<<1) + : "S" (XBuf+FSettings.FirstSLine*256+VNSCLIP), "D" (ScreenLoc+((240-FSettings.TotalScanlines())/2)*pitch+(640-(VNSWID<<1))/2),"b" (FSettings.TotalScanlines()), "c" ((pitch-VNSWID)<<1) : "%al", "%edx", "%cc" ); } else @@ -699,7 +699,7 @@ static void BlitScreenFull(uint8 *XBuf) "decb %%bl\n\t" "jne yoop1\n\t" : - : "S" (XBuf+srendline*256), "D" (ScreenLoc+((240-totallines)/2)*pitch+(640-512)/2),"b" (totallines), "c" (pitch-512+pitch) + : "S" (XBuf+FSettings.FirstSLine*256), "D" (ScreenLoc+((240-FSettings.TotalScanlines())/2)*pitch+(640-512)/2),"b" (FSettings.TotalScanlines()), "c" (pitch-512+pitch) : "%al", "%edx", "%cc" ); } } diff --git a/src/drivers/win/window.cpp b/src/drivers/win/window.cpp index de7c7f61..126c4a17 100644 --- a/src/drivers/win/window.cpp +++ b/src/drivers/win/window.cpp @@ -1054,7 +1054,10 @@ LRESULT FAR PASCAL AppWndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) // TODO: Proper stop logging { MENUITEMINFO mi; - char *str = CreateSoundSave() ? "Stop Sound Logging" : "Log Sound As..."; + // Evil: + char *strT = "Stop Sound Logging"; + char *strF = "Log Sound As..."; + char *str = CreateSoundSave() ? strT : strF; memset(&mi,0,sizeof(mi)); mi.fMask=MIIM_DATA|MIIM_TYPE; @@ -1511,4 +1514,4 @@ void FCEUD_CmdOpen(void) bool FCEUD_PauseAfterPlayback() { return pauseAfterPlayback!=0; -} \ No newline at end of file +} diff --git a/src/drivers/win/zlib/SConscript b/src/drivers/win/zlib/SConscript new file mode 100644 index 00000000..122f7afd --- /dev/null +++ b/src/drivers/win/zlib/SConscript @@ -0,0 +1,20 @@ +my_list = Split(""" +adler32.c +compress.c +crc32.c +deflate.c +gzio.c +infblock.c +infcodes.c +inffast.c +inflate.c +inftrees.c +infutil.c +trees.c +uncompr.c +zutil.c +""") + +for x in range(len(my_list)): + my_list[x] = 'drivers/win/zlib/' + my_list[x] +Return('my_list') diff --git a/src/movie.cpp b/src/movie.cpp index f524460e..47892f5c 100644 --- a/src/movie.cpp +++ b/src/movie.cpp @@ -6,7 +6,7 @@ #include #include -#ifdef MSVC +#ifdef WIN32 #include #endif @@ -391,7 +391,7 @@ void ParseGIInput(FCEUGI *GI); //mbg merge 7/17/06 - had to add. gross. void InitOtherInput(void); //mbg merge 7/17/06 - had to add. gross. static void ResetInputTypes() { -#ifdef MSVC +#ifdef WIN32 extern int UsrInputType[3]; UsrInputType[0] = SI_GAMEPAD; UsrInputType[1] = SI_GAMEPAD; diff --git a/src/state.cpp b/src/state.cpp index 364b952f..86ae3efb 100644 --- a/src/state.cpp +++ b/src/state.cpp @@ -263,7 +263,7 @@ static int ReadStateChunks(FILE *st, int32 totalsize) extern uint8 *XBackBuf; if(size != fread(XBackBuf,1,size,st)) ret = 0; -#ifdef MSVC +#ifdef WIN32 else { FCEUD_BlitScreen(XBuf); diff --git a/src/types.h b/src/types.h index 59bbbe71..831582a4 100644 --- a/src/types.h +++ b/src/types.h @@ -202,4 +202,4 @@ struct FCEU_Guid : public ValueArray } }; -#endif \ No newline at end of file +#endif diff --git a/src/utils/endian.h b/src/utils/endian.h index 5f82b39f..3dcaaff9 100644 --- a/src/utils/endian.h +++ b/src/utils/endian.h @@ -11,4 +11,4 @@ uint64 FCEU_de64lsb(uint8 *morp); uint32 FCEU_de32lsb(uint8 *morp); uint16 FCEU_de16lsb(uint8 *morp); -#endif \ No newline at end of file +#endif diff --git a/src/utils/xstring.h b/src/utils/xstring.h index d75200b9..0deb80d7 100644 --- a/src/utils/xstring.h +++ b/src/utils/xstring.h @@ -43,4 +43,4 @@ std::string BytesToString(void* data, int len); bool StringToBytes(std::string& str, void* data, int len); std::vector tokenize_str(const std::string & str,const std::string & delims); -void splitpath(const char* path, char* drv, char* dir, char* name, char* ext); \ No newline at end of file +void splitpath(const char* path, char* drv, char* dir, char* name, char* ext); diff --git a/src/video.cpp b/src/video.cpp index 71ee10b1..df5edfb9 100644 --- a/src/video.cpp +++ b/src/video.cpp @@ -151,7 +151,7 @@ void FCEU_PutImageDummy(void) FCEU_DrawSaveStates(XBuf); FCEU_DrawMovies(XBuf); } - if(howlong) howlong--; /* DrawMessage() */ + if(guiMessage.howlong) guiMessage.howlong--; /* DrawMessage() */ } #endif diff --git a/src/wave.cpp b/src/wave.cpp index 9dbe1b64..f00fbc65 100644 --- a/src/wave.cpp +++ b/src/wave.cpp @@ -23,7 +23,7 @@ void FCEU_WriteWaveData(int32 *Buffer, int Count) int16 *dest; int x; -#ifndef MSVC +#ifndef WIN32 if(!soundlog) return; #else if(!soundlog && !FCEUI_AviIsRecording()) return; @@ -45,7 +45,7 @@ void FCEU_WriteWaveData(int32 *Buffer, int Count) if(soundlog) wsize+=fwrite(temp,1,Count*sizeof(int16),soundlog); - #ifdef MSVC + #ifdef WIN32 if(FCEUI_AviIsRecording()) { FCEUI_AviSoundUpdate((void*)temp, Count); diff --git a/src/wave.h b/src/wave.h index 81065c5e..a2ea04ba 100644 --- a/src/wave.h +++ b/src/wave.h @@ -1,4 +1,4 @@ #include "types.h" void FCEU_WriteWaveData(int32 *Buffer, int Count); -int FCEUI_EndWaveRecord(); \ No newline at end of file +int FCEUI_EndWaveRecord();