From c9137306ce54b03352b4b8a1075a2193ed5ec636 Mon Sep 17 00:00:00 2001 From: gho tik Date: Fri, 1 Jul 2016 12:42:42 -0400 Subject: [PATCH] v2_03_51_src Former-commit-id: 7d35fb5c7f394ff05662fc6728790a573217c201 --- Include/dxwnd.h | 12 +- build/dxwnd.dll | 2 +- build/dxwnd.exe | 4 +- build/dxwnd.ini | 908 ------------------ build/exports/Alien Swarm (Steam).dxw | 32 + .../Avadon 2 The Corruption (Steam).dxw | 32 + .../Avadon the Black Fortress (Steam).dxw | 32 + .../Avernum 2 Crystal Souls (Steam).dxw | 32 + build/exports/Avernum 4 (Steam).dxw | 32 + build/exports/Avernum 5 (Steam).dxw | 32 + build/exports/Avernum 6 (Steam).dxw | 32 + .../Avernum Escape From the Pit (Steam).dxw | 32 + build/readme-relnotes.txt | 11 +- dll/advapi.cpp | 2 +- dll/avifile.cpp | 3 + dll/ddproxy.cpp | 1 + dll/ddraw.cpp | 2 +- dll/dinput.cpp | 151 +-- dll/dxhook.cpp | 13 +- dll/dxwnd.cpp | 4 +- dll/dxwnd.suo | Bin 7168 -> 0 bytes dll/dxwnd.vs2008.suo | Bin 259584 -> 14336 bytes host/TabInput.cpp | 7 +- host/TabProgram.cpp | 10 + host/TargetDlg.cpp | 7 +- host/TargetDlg.h | 7 +- host/dxwndhost.aps | Bin 162300 -> 133612 bytes host/dxwndhost.rc | Bin 107926 -> 106428 bytes host/dxwndhost.vs2008.suo | Bin 48640 -> 54272 bytes host/dxwndhost.vs2008.vcproj | 4 - host/dxwndhostView.cpp | 85 +- host/resource | Bin 38184 -> 37724 bytes 32 files changed, 414 insertions(+), 1075 deletions(-) delete mode 100644 build/dxwnd.ini create mode 100644 build/exports/Alien Swarm (Steam).dxw create mode 100644 build/exports/Avadon 2 The Corruption (Steam).dxw create mode 100644 build/exports/Avadon the Black Fortress (Steam).dxw create mode 100644 build/exports/Avernum 2 Crystal Souls (Steam).dxw create mode 100644 build/exports/Avernum 4 (Steam).dxw create mode 100644 build/exports/Avernum 5 (Steam).dxw create mode 100644 build/exports/Avernum 6 (Steam).dxw create mode 100644 build/exports/Avernum Escape From the Pit (Steam).dxw delete mode 100644 dll/dxwnd.suo diff --git a/Include/dxwnd.h b/Include/dxwnd.h index 863e955..c1f4752 100644 --- a/Include/dxwnd.h +++ b/Include/dxwnd.h @@ -212,6 +212,10 @@ #define UNACQUIRE 0x10000000 // Unacquire DirectInput devices when losing focus and acquire back when gaining focus #define HOOKGOGLIBS 0x20000000 // Hook additional libraries provided by GOG with different names but same functionalities as system ones #define BYPASSGOGLIBS 0x40000000 // Bypass GOG proxy system libraries loading directly the system libraries from the system folder +#define EMULATERELMOUSE 0x80000000 // Emulates the dinput detection of relative mouse position by keeping the mouse at the center of window and looking for movements + +// seventh flags DWORD dxw.dwFlags7: +// eighth flags DWORD dxw.dwFlags8: // logging Tflags DWORD: #define OUTTRACE 0x00000001 // enables tracing to dxwnd.log in general @@ -251,13 +255,9 @@ typedef struct TARGETMAP int flags4; int flags5; int flags6; + int flags7; + int flags8; int tflags; - short initx; - short inity; - short minx; - short miny; - short maxx; - short maxy; short posx; short posy; short sizx; diff --git a/build/dxwnd.dll b/build/dxwnd.dll index 4f92797..d16fb6e 100644 --- a/build/dxwnd.dll +++ b/build/dxwnd.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:58984ac106a91ee758fe27b885e80e4c0c07d1d5de6105c9a397032410db5b4c +oid sha256:fced667458c73b82bde02efd8d316628a878f1b006dc783b0e806309c0ff8d32 size 626176 diff --git a/build/dxwnd.exe b/build/dxwnd.exe index a3b7d5e..9ced148 100644 --- a/build/dxwnd.exe +++ b/build/dxwnd.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7e22776dc66acf9e798458cd8bf1e95195ee0577c99153c150b1a8e69e704b8f -size 546816 +oid sha256:45425fed1d12c6c8a93df12b38a6ec3a17b875c00b2851c1031963973e4a8c67 +size 545792 diff --git a/build/dxwnd.ini b/build/dxwnd.ini deleted file mode 100644 index b8fb4a7..0000000 --- a/build/dxwnd.ini +++ /dev/null @@ -1,908 +0,0 @@ -[window] -exportpath=D:\DxWnd\v2_03_50_src\build\exports\ -posx=1045 -posy=439 -sizx=492 -sizy=367 -exepath=D:\Games\SWAT 3 (GOG)\game\ -debug=1 -[target] -title0=Command & Conquer - Red Alert The Aftermath -path0=D:\Games\C&C - Red Alert The Aftermath\RA95.EXE -launchpath0= -module0= -opengllib0= -notes0= -registry0= -ver0=0 -coord0=0 -flag0=136368226 -flagg0=1224740864 -flagh0=532 -flagi0=138412036 -flagj0=4224 -flagk0=262144 -tflag0=-1476388605 -initx0=0 -inity0=0 -minx0=0 -miny0=0 -maxx0=0 -maxy0=0 -posx0=50 -posy0=50 -sizx0=800 -sizy0=600 -maxfps0=4 -initts0=0 -winver0=0 -maxres0=-1 -swapeffect0=0 -title1=hlp.exe -path1=D:\Games\DylanDog\hlp.exe -launchpath1= -module1= -opengllib1= -notes1= -registry1= -ver1=0 -coord1=0 -flag1=2097184 -flagg1=1207959552 -flagh1=1048596 -flagi1=138412038 -flagj1=4224 -flagk1=2 -tflag1=-2147477245 -initx1=0 -inity1=0 -minx1=0 -miny1=0 -maxx1=0 -maxy1=0 -posx1=50 -posy1=50 -sizx1=800 -sizy1=600 -maxfps1=0 -initts1=0 -winver1=0 -maxres1=-1 -swapeffect1=0 -title2=Riven DVD -path2=D:\Games\Riven\Riven.patched.exe -launchpath2= -module2= -opengllib2= -notes2= -registry2= -ver2=0 -coord2=0 -flag2=673185824 -flagg2=1207959552 -flagh2=20 -flagi2=138412036 -flagj2=67108992 -flagk2=33554432 -tflag2=-2147477245 -initx2=0 -inity2=0 -minx2=0 -miny2=0 -maxx2=0 -maxy2=0 -posx2=50 -posy2=50 -sizx2=800 -sizy2=600 -maxfps2=0 -initts2=0 -winver2=0 -maxres2=-1 -swapeffect2=0 -title3=Rogue Squadron.EXE -path3=D:\Games\Rogue Squadron 3D\Rogue Squadron.EXE -launchpath3= -module3= -opengllib3= -notes3= -registry3= -ver3=0 -coord3=0 -flag3=136314914 -flagg3=1207959552 -flagh3=20 -flagi3=138412036 -flagj3=4224 -flagk3=65536 -tflag3=0 -initx3=0 -inity3=0 -minx3=0 -miny3=0 -maxx3=0 -maxy3=0 -posx3=50 -posy3=50 -sizx3=800 -sizy3=600 -maxfps3=0 -initts3=0 -winver3=0 -maxres3=-1 -swapeffect3=0 -title4=Geneforge -path4=d:\games\Geneforge\Geneforge.exe -launchpath4= -module4= -opengllib4= -notes4= -registry4= -ver4=0 -coord4=0 -flag4=134234628 -flagg4=1207959808 -flagh4=65620 -flagi4=4194308 -flagj4=0 -flagk4=0 -tflag4=64 -initx4=0 -inity4=0 -minx4=0 -miny4=0 -maxx4=0 -maxy4=0 -posx4=50 -posy4=50 -sizx4=1200 -sizy4=900 -maxfps4=0 -initts4=0 -winver4=0 -maxres4=4 -swapeffect4=0 -title5=One Must Fall - Battlegrounds - Demo -path5=D:\Games\One Must Fall - Battlegrounds - Demo\Engine\OMFBG.exe -launchpath5= -module5= -opengllib5= -notes5= -registry5= -ver5=0 -coord5=0 -flag5=136314914 -flagg5=1207959552 -flagh5=20 -flagi5=138412036 -flagj5=4224 -flagk5=65536 -tflag5=0 -initx5=0 -inity5=0 -minx5=0 -miny5=0 -maxx5=0 -maxy5=0 -posx5=50 -posy5=50 -sizx5=800 -sizy5=600 -maxfps5=0 -initts5=0 -winver5=0 -maxres5=-1 -swapeffect5=0 -title6=One Must Fall - Battlegrounds -path6=D:\Games\One Must Fall - Battlegrounds\Engine\OMFBG.exe -launchpath6= -module6=core_module.dll -opengllib6= -notes6= -registry6= -ver6=0 -coord6=0 -flag6=136314915 -flagg6=1275068416 -flagh6=33554460 -flagi6=675283252 -flagj6=21120 -flagk6=458752 -tflag6=-2147477245 -initx6=0 -inity6=0 -minx6=0 -miny6=0 -maxx6=0 -maxy6=0 -posx6=50 -posy6=50 -sizx6=800 -sizy6=600 -maxfps6=0 -initts6=0 -winver6=0 -maxres6=-1 -swapeffect6=0 -title7=Geneforge 1 GOG -path7=D:\Games\Geneforge GOG\Geneforge\Geneforge.exe -launchpath7= -module7= -opengllib7= -notes7= -registry7= -ver7=0 -coord7=0 -flag7=-2011160538 -flagg7=1241513984 -flagh7=20 -flagi7=138412036 -flagj7=4224 -flagk7=268500992 -tflag7=-2147477241 -initx7=0 -inity7=0 -minx7=0 -miny7=0 -maxx7=800 -maxy7=600 -posx7=50 -posy7=50 -sizx7=800 -sizy7=600 -maxfps7=0 -initts7=0 -winver7=0 -maxres7=-1 -swapeffect7=0 -title8=Geneforge 2 GOG -path8=D:\Games\Geneforge GOG\Geneforge 2\Geneforge 2.exe -launchpath8= -module8= -opengllib8= -notes8= -registry8= -ver8=0 -coord8=0 -flag8=136315446 -flagg8=1207959552 -flagh8=20 -flagi8=138412036 -flagj8=4224 -flagk8=65536 -tflag8=-2147477245 -initx8=0 -inity8=0 -minx8=0 -miny8=0 -maxx8=800 -maxy8=600 -posx8=50 -posy8=50 -sizx8=800 -sizy8=600 -maxfps8=0 -initts8=0 -winver8=0 -maxres8=-1 -swapeffect8=0 -title9=Geneforge 3 GOG -path9=D:\Games\Geneforge GOG\Geneforge 3\Geneforge 3.exe -launchpath9= -module9= -opengllib9= -notes9= -registry9= -ver9=0 -coord9=0 -flag9=136314886 -flagg9=1207959808 -flagh9=20 -flagi9=138412036 -flagj9=67113088 -flagk9=65536 -tflag9=0 -initx9=0 -inity9=0 -minx9=0 -miny9=0 -maxx9=0 -maxy9=0 -posx9=50 -posy9=50 -sizx9=800 -sizy9=600 -maxfps9=0 -initts9=0 -winver9=0 -maxres9=-1 -swapeffect9=0 -title10=Wizardry 8 (3DfX) -path10=D:\Games\Wizardry 8\Wiz8.exe -launchpath10= -module10= -opengllib10= -notes10= -registry10= -ver10=9 -coord10=0 -flag10=134225922 -flagg10=1207959552 -flagh10=20 -flagi10=205520900 -flagj10=4224 -flagk10=0 -tflag10=0 -initx10=0 -inity10=0 -minx10=0 -miny10=0 -maxx10=0 -maxy10=0 -posx10=50 -posy10=50 -sizx10=800 -sizy10=600 -maxfps10=0 -initts10=0 -winver10=0 -maxres10=-1 -swapeffect10=0 -title11=Warcraft 2 Battlenet Ed -path11=D:\Games\Warcraft 2 Battlenet Ed\Warcraft II BNE.exe -launchpath11= -module11= -opengllib11= -notes11= -registry11= -ver11=0 -coord11=0 -flag11=134221986 -flagg11=1207959552 -flagh11=20 -flagi11=138412036 -flagj11=128 -flagk11=0 -tflag11=0 -initx11=0 -inity11=0 -minx11=0 -miny11=0 -maxx11=0 -maxy11=0 -posx11=50 -posy11=50 -sizx11=800 -sizy11=600 -maxfps11=0 -initts11=0 -winver11=0 -maxres11=0 -swapeffect11=0 -title12=Star Wars Rogue Squadron 3D -path12=D:\Games\rogue\Rogue Squadron.EXE -launchpath12= -module12= -opengllib12= -notes12= -registry12= -ver12=0 -coord12=0 -flag12=136314934 -flagg12=1207959552 -flagh12=20 -flagi12=138412038 -flagj12=4224 -flagk12=402718720 -tflag12=0 -initx12=0 -inity12=0 -minx12=0 -miny12=0 -maxx12=0 -maxy12=0 -posx12=50 -posy12=50 -sizx12=800 -sizy12=600 -maxfps12=0 -initts12=0 -winver12=0 -maxres12=-1 -swapeffect12=0 -title13=Dark Colony -path13=D:\Games\DarkColony\DCOLONY\DC.EXE -launchpath13= -module13= -opengllib13= -notes13= -registry13= -ver13=0 -coord13=0 -flag13=134255138 -flagg13=1207963648 -flagh13=20 -flagi13=4194308 -flagj13=67108992 -flagk13=0 -tflag13=0 -initx13=0 -inity13=0 -minx13=0 -miny13=0 -maxx13=0 -maxy13=0 -posx13=50 -posy13=50 -sizx13=800 -sizy13=600 -maxfps13=20 -initts13=0 -winver13=0 -maxres13=-1 -swapeffect13=0 -title14=Empire of the Ants -path14=D:\Games\Empire of the Ants\Game.exe -launchpath14= -module14= -opengllib14= -notes14= -registry14= -ver14=0 -coord14=0 -flag14=402669606 -flagg14=1207959552 -flagh14=20 -flagi14=4194308 -flagj14=128 -flagk14=65536 -tflag14=0 -initx14=0 -inity14=0 -minx14=0 -miny14=0 -maxx14=0 -maxy14=0 -posx14=50 -posy14=50 -sizx14=800 -sizy14=600 -maxfps14=0 -initts14=0 -winver14=0 -maxres14=-1 -swapeffect14=0 -title15=Paladin 3 RIP -path15=D:\Games\QGPAL3\rungame.exe -launchpath15= -module15= -opengllib15= -notes15= -registry15= -ver15=0 -coord15=0 -flag15=136314914 -flagg15=1207959552 -flagh15=20 -flagi15=205520900 -flagj15=4224 -flagk15=65536 -tflag15=-2147477245 -initx15=0 -inity15=0 -minx15=0 -miny15=0 -maxx15=0 -maxy15=0 -posx15=50 -posy15=50 -sizx15=800 -sizy15=600 -maxfps15=0 -initts15=0 -winver15=0 -maxres15=-1 -swapeffect15=0 -title16=Revenant (GOG) -path16=D:\Games\Revenant GOG\Revenant.exe -launchpath16=D:\Games\Revenant GOG\Launcher.exe -module16= -opengllib16= -notes16= -registry16= -ver16=0 -coord16=3 -flag16=1019216498 -flagg16=1207959552 -flagh16=20 -flagi16=138412036 -flagj16=134218368 -flagk16=2162696 -tflag16=-2147477245 -initx16=0 -inity16=0 -minx16=0 -miny16=0 -maxx16=0 -maxy16=0 -posx16=50 -posy16=50 -sizx16=800 -sizy16=600 -maxfps16=0 -initts16=0 -winver16=0 -maxres16=-1 -swapeffect16=0 -title17=Revenant.exe -path17=D:\Games\Revenant GOG\Disk2\Revenant.exe -launchpath17= -module17= -opengllib17= -notes17= -registry17= -ver17=0 -coord17=0 -flag17=136314914 -flagg17=1207959552 -flagh17=20 -flagi17=134217732 -flagj17=4224 -flagk17=65536 -tflag17=0 -initx17=0 -inity17=0 -minx17=0 -miny17=0 -maxx17=0 -maxy17=0 -posx17=50 -posy17=50 -sizx17=800 -sizy17=600 -maxfps17=0 -initts17=0 -winver17=0 -maxres17=-1 -swapeffect17=0 -title18=Revenant - No Cd.exe -path18=D:\Games\Revenant\Revenant - No Cd.exe -launchpath18= -module18= -opengllib18= -notes18= -registry18= -ver18=0 -coord18=0 -flag18=136314914 -flagg18=1207959552 -flagh18=20 -flagi18=138412036 -flagj18=4224 -flagk18=65536 -tflag18=-2147477245 -initx18=0 -inity18=0 -minx18=0 -miny18=0 -maxx18=0 -maxy18=0 -posx18=50 -posy18=50 -sizx18=800 -sizy18=600 -maxfps18=0 -initts18=0 -winver18=0 -maxres18=-1 -swapeffect18=0 -title19=Enemy Zero -path19=F:\EZERO\EZERO.EXE -launchpath19= -module19= -opengllib19= -notes19= -registry19= -ver19=0 -coord19=0 -flag19=681574434 -flagg19=1207959552 -flagh19=20 -flagi19=138412036 -flagj19=4224 -flagk19=65536 -tflag19=-2147477245 -initx19=0 -inity19=0 -minx19=0 -miny19=0 -maxx19=0 -maxy19=0 -posx19=50 -posy19=50 -sizx19=800 -sizy19=600 -maxfps19=0 -initts19=0 -winver19=0 -maxres19=-1 -swapeffect19=0 -title20=Revenant ICD GOG -path20=D:\Games\Revenant GOG\Revenant.icd -launchpath20= -module20= -opengllib20= -notes20= -registry20= -ver20=0 -coord20=0 -flag20=681574434 -flagg20=1207959552 -flagh20=20 -flagi20=138412036 -flagj20=4224 -flagk20=65536 -tflag20=0 -initx20=0 -inity20=0 -minx20=0 -miny20=0 -maxx20=0 -maxy20=0 -posx20=50 -posy20=50 -sizx20=800 -sizy20=600 -maxfps20=0 -initts20=0 -winver20=0 -maxres20=-1 -swapeffect20=0 -title21=Geneforge 4 (Steam) -path21=D:\Program Files (x86)\Steam\SteamApps\common\Geneforge 4\Geneforge 4.exe -launchpath21= -module21= -opengllib21= -notes21= -registry21= -ver21=0 -coord21=0 -flag21=136314934 -flagg21=1207959552 -flagh21=20 -flagi21=138412036 -flagj21=5248 -flagk21=65536 -tflag21=0 -initx21=0 -inity21=0 -minx21=0 -miny21=0 -maxx21=1024 -maxy21=768 -posx21=50 -posy21=50 -sizx21=800 -sizy21=600 -maxfps21=0 -initts21=0 -winver21=0 -maxres21=-1 -swapeffect21=0 -title22=Geneforge (Steam) -path22=D:\Program Files (x86)\Steam\SteamApps\common\Geneforge\Geneforge.exe -launchpath22= -module22= -opengllib22= -notes22= -registry22= -ver22=0 -coord22=0 -flag22=136314902 -flagg22=1207959552 -flagh22=20 -flagi22=138412036 -flagj22=4224 -flagk22=65536 -tflag22=-2147477237 -initx22=400 -inity22=300 -minx22=0 -miny22=0 -maxx22=800 -maxy22=600 -posx22=50 -posy22=50 -sizx22=800 -sizy22=600 -maxfps22=0 -initts22=0 -winver22=0 -maxres22=-1 -swapeffect22=0 -title23=Geneforge 2 (Steam) -path23=D:\Program Files (x86)\Steam\SteamApps\common\Geneforge 2\Geneforge 2.exe -launchpath23= -module23= -opengllib23= -notes23= -registry23= -ver23=0 -coord23=0 -flag23=136314886 -flagg23=1207959552 -flagh23=20 -flagi23=138412036 -flagj23=4224 -flagk23=268503040 -tflag23=-2147477245 -initx23=0 -inity23=0 -minx23=0 -miny23=0 -maxx23=0 -maxy23=0 -posx23=50 -posy23=50 -sizx23=800 -sizy23=600 -maxfps23=0 -initts23=0 -winver23=0 -maxres23=-1 -swapeffect23=0 -title24=Geneforge 3 (Steam) -path24=D:\Program Files (x86)\Steam\SteamApps\common\Geneforge 3\Geneforge 3.exe -launchpath24= -module24= -opengllib24= -notes24= -registry24= -ver24=0 -coord24=0 -flag24=136314886 -flagg24=1207959552 -flagh24=20 -flagi24=138412036 -flagj24=4224 -flagk24=268500992 -tflag24=0 -initx24=0 -inity24=0 -minx24=0 -miny24=0 -maxx24=0 -maxy24=0 -posx24=50 -posy24=50 -sizx24=800 -sizy24=600 -maxfps24=0 -initts24=0 -winver24=0 -maxres24=-1 -swapeffect24=0 -title25=LEGO Pirates -path25=d:\Games\Disney Interactive Studios\LEGOŽ Pirates\LEGOPirates.exe -launchpath25= -module25= -opengllib25= -notes25= -registry25= -ver25=9 -coord25=0 -flag25=136314914 -flagg25=1207959552 -flagh25=20 -flagi25=138412036 -flagj25=4224 -flagk25=65536 -tflag25=0 -initx25=0 -inity25=0 -minx25=0 -miny25=0 -maxx25=0 -maxy25=0 -posx25=50 -posy25=50 -sizx25=800 -sizy25=600 -maxfps25=0 -initts25=0 -winver25=0 -maxres25=-1 -swapeffect25=0 -title26=Deadlock II -path26=D:\Games\deadlock II\DEADLOCK.EXE -launchpath26= -module26= -opengllib26= -notes26= -registry26= -ver26=7 -coord26=0 -flag26=-1996488672 -flagg26=1209008128 -flagh26=20 -flagi26=138420228 -flagj26=67108992 -flagk26=0 -tflag26=0 -initx26=0 -inity26=0 -minx26=0 -miny26=0 -maxx26=0 -maxy26=0 -posx26=50 -posy26=50 -sizx26=800 -sizy26=600 -maxfps26=0 -initts26=0 -winver26=0 -maxres26=-1 -swapeffect26=0 -title27=Swat 3 -path27=D:\Games\SWAT3\SWAT.EXE -launchpath27= -module27= -opengllib27= -notes27= -registry27= -ver27=0 -coord27=0 -flag27=136314914 -flagg27=1209008128 -flagh27=20 -flagi27=138412036 -flagj27=4224 -flagk27=65536 -tflag27=-2147477245 -initx27=0 -inity27=0 -minx27=0 -miny27=0 -maxx27=0 -maxy27=0 -posx27=50 -posy27=50 -sizx27=800 -sizy27=600 -maxfps27=0 -initts27=0 -winver27=0 -maxres27=-1 -swapeffect27=0 -title28=Swat 3 (GOG) -path28=D:\Games\SWAT 3 (GOG)\game\swat.exe -launchpath28= -module28= -opengllib28= -notes28= -registry28= -ver28=1 -coord28=0 -flag28=136314914 -flagg28=1207959552 -flagh28=20 -flagi28=138412036 -flagj28=4224 -flagk28=65536 -tflag28=-2147477245 -initx28=0 -inity28=0 -minx28=0 -miny28=0 -maxx28=0 -maxy28=0 -posx28=50 -posy28=50 -sizx28=800 -sizy28=600 -maxfps28=0 -initts28=0 -winver28=0 -maxres28=-1 -swapeffect28=0 diff --git a/build/exports/Alien Swarm (Steam).dxw b/build/exports/Alien Swarm (Steam).dxw new file mode 100644 index 0000000..a58f74a --- /dev/null +++ b/build/exports/Alien Swarm (Steam).dxw @@ -0,0 +1,32 @@ +[target] +title0=Alien Swarm (Steam) +path0=D:\Program Files (x86)\Steam\SteamApps\common\Alien Swarm\swarm.exe +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=0 +coord0=0 +flag0=136314914 +flagg0=1744830464 +flagh0=20 +flagi0=138412038 +flagj0=4224 +flagk0=65536 +tflag0=0 +initx0=0 +inity0=0 +minx0=0 +miny0=0 +maxx0=0 +maxy0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=5 +winver0=0 +maxres0=-1 +swapeffect0=0 diff --git a/build/exports/Avadon 2 The Corruption (Steam).dxw b/build/exports/Avadon 2 The Corruption (Steam).dxw new file mode 100644 index 0000000..b8f23df --- /dev/null +++ b/build/exports/Avadon 2 The Corruption (Steam).dxw @@ -0,0 +1,32 @@ +[target] +title0=Avadon 2: The Corruption (Steam) +path0=D:\Program Files (x86)\Steam\SteamApps\common\Avadon 2\Avadon 2.exe +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=12 +coord0=0 +flag0=136314918 +flagg0=1208090624 +flagh0=20 +flagi0=138412038 +flagj0=4224 +flagk0=65536 +tflag0=0 +initx0=0 +inity0=0 +minx0=0 +miny0=0 +maxx0=0 +maxy0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 +swapeffect0=0 diff --git a/build/exports/Avadon the Black Fortress (Steam).dxw b/build/exports/Avadon the Black Fortress (Steam).dxw new file mode 100644 index 0000000..151602d --- /dev/null +++ b/build/exports/Avadon the Black Fortress (Steam).dxw @@ -0,0 +1,32 @@ +[target] +title0=Avadon the Black Fortress (Steam) +path0=D:\Program Files (x86)\Steam\SteamApps\common\Avadon The Black Fortress\Avadon.exe +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=12 +coord0=0 +flag0=136314918 +flagg0=1208090624 +flagh0=20 +flagi0=138412038 +flagj0=4224 +flagk0=65536 +tflag0=0 +initx0=0 +inity0=0 +minx0=0 +miny0=0 +maxx0=0 +maxy0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 +swapeffect0=0 diff --git a/build/exports/Avernum 2 Crystal Souls (Steam).dxw b/build/exports/Avernum 2 Crystal Souls (Steam).dxw new file mode 100644 index 0000000..375af34 --- /dev/null +++ b/build/exports/Avernum 2 Crystal Souls (Steam).dxw @@ -0,0 +1,32 @@ +[target] +title0=Avernum 2: Crystal Souls (Steam) +path0=D:\Program Files (x86)\Steam\SteamApps\common\Avernum 2 Crystal Souls\Avernum 2.exe +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=12 +coord0=0 +flag0=136314918 +flagg0=1208090624 +flagh0=20 +flagi0=138412038 +flagj0=4224 +flagk0=65536 +tflag0=0 +initx0=0 +inity0=0 +minx0=0 +miny0=0 +maxx0=0 +maxy0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 +swapeffect0=0 diff --git a/build/exports/Avernum 4 (Steam).dxw b/build/exports/Avernum 4 (Steam).dxw new file mode 100644 index 0000000..1f7fcf5 --- /dev/null +++ b/build/exports/Avernum 4 (Steam).dxw @@ -0,0 +1,32 @@ +[target] +title0=Avernum 4 (Steam) +path0=D:\Program Files (x86)\Steam\SteamApps\common\Avernum 4\Avernum 4.exe +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=0 +coord0=0 +flag0=136314934 +flagg0=1208090624 +flagh0=20 +flagi0=138412038 +flagj0=4224 +flagk0=-2147418112 +tflag0=0 +initx0=0 +inity0=0 +minx0=0 +miny0=0 +maxx0=0 +maxy0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 +swapeffect0=0 diff --git a/build/exports/Avernum 5 (Steam).dxw b/build/exports/Avernum 5 (Steam).dxw new file mode 100644 index 0000000..167ea48 --- /dev/null +++ b/build/exports/Avernum 5 (Steam).dxw @@ -0,0 +1,32 @@ +[target] +title0=Avernum 5 (Steam) +path0=D:\Program Files (x86)\Steam\SteamApps\common\Avernum 5\Avernum 5.exe +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=0 +coord0=0 +flag0=136314934 +flagg0=1208090624 +flagh0=20 +flagi0=138412038 +flagj0=4224 +flagk0=-2147418112 +tflag0=0 +initx0=0 +inity0=0 +minx0=0 +miny0=0 +maxx0=0 +maxy0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 +swapeffect0=0 diff --git a/build/exports/Avernum 6 (Steam).dxw b/build/exports/Avernum 6 (Steam).dxw new file mode 100644 index 0000000..d36a9fe --- /dev/null +++ b/build/exports/Avernum 6 (Steam).dxw @@ -0,0 +1,32 @@ +[target] +title0=Avernum 6 (Steam) +path0=D:\Program Files (x86)\Steam\SteamApps\common\Avernum 6\Avernum 6.exe +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=0 +coord0=0 +flag0=136314934 +flagg0=1208090624 +flagh0=20 +flagi0=138412038 +flagj0=4224 +flagk0=-2147418112 +tflag0=0 +initx0=0 +inity0=0 +minx0=0 +miny0=0 +maxx0=0 +maxy0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 +swapeffect0=0 diff --git a/build/exports/Avernum Escape From the Pit (Steam).dxw b/build/exports/Avernum Escape From the Pit (Steam).dxw new file mode 100644 index 0000000..9010d42 --- /dev/null +++ b/build/exports/Avernum Escape From the Pit (Steam).dxw @@ -0,0 +1,32 @@ +[target] +title0=Avernum: Escape From the Pit (Steam) +path0=D:\Program Files (x86)\Steam\SteamApps\common\Avernum Escape From the Pit\Avernum.exe +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=12 +coord0=0 +flag0=136314918 +flagg0=1208090624 +flagh0=20 +flagi0=138412038 +flagj0=4224 +flagk0=65536 +tflag0=0 +initx0=0 +inity0=0 +minx0=0 +miny0=0 +maxx0=0 +maxy0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 +swapeffect0=0 diff --git a/build/readme-relnotes.txt b/build/readme-relnotes.txt index 338695e..f794ba1 100644 --- a/build/readme-relnotes.txt +++ b/build/readme-relnotes.txt @@ -1000,4 +1000,13 @@ fix: more accurate hooking of ddraw pointers - fixes several DD_GENERIC_ERROR in fix: improvements (not finished) in dinput handling add: the OS version info is traced in the log file fix: added cursor clipping when requested on new main window creation -fix: handling of cursor clipping when the window gain/lose focus threough DefWindowProc message handling \ No newline at end of file +fix: handling of cursor clipping when the window gain/lose focus threough DefWindowProc message handling + +v2.03.51 +fix: WinXP select file dialog bug, not appearing if pointing to nonexistent directory +fix: export file bug - now forces the file to have a .dxw extension +fix: eliminated 6 useless fields in dinput handling, now their value is calculated automatically and at runtime +add: DirectInput / "Emulate mouse relative movement". Eliminates the fake clipped regions inside the window (fix Geneforge series) +fix: directinput mouse mode (absolute vs. relative) now correctly checked using the mouse device +fix: attempt to fix FIXMOVIESCOLOR flag for 32BPP target color depth, but it doesn't still work on Win10 +fix: directinput RELEASEMOUSE flag applied to mouse device only diff --git a/dll/advapi.cpp b/dll/advapi.cpp index 93f484f..ecea63b 100644 --- a/dll/advapi.cpp +++ b/dll/advapi.cpp @@ -26,7 +26,7 @@ static HookEntry_Type Hooks[]={ {HOOK_IAT_CANDIDATE, "RegEnumValueA", NULL, (FARPROC *)&pRegEnumValueA, (FARPROC)extRegEnumValueA}, {HOOK_IAT_CANDIDATE, 0, NULL, 0, 0} // terminator }; - + void HookAdvApi32(HMODULE module) { HookLibrary(module, Hooks, "ADVAPI32.dll"); diff --git a/dll/avifile.cpp b/dll/avifile.cpp index 7b1c729..a4a98b3 100644 --- a/dll/avifile.cpp +++ b/dll/avifile.cpp @@ -76,7 +76,10 @@ PGETFRAME WINAPI extAVIStreamGetFrameOpen(PAVISTREAM pavi, LPBITMAPINFOHEADER lp biWanted.biSize = sizeof(BITMAPINFOHEADER); biWanted.biBitCount = (WORD)dxw.VirtualPixelFormat.dwRGBBitCount; biWanted.biPlanes = 1; + if(biWanted.biBitCount < 32) biWanted.biClrUsed = (0x1 << biWanted.biBitCount); // 8 -> 256; + else + biWanted.biClrUsed = 0; biWanted.biClrImportant = biWanted.biClrUsed; return (*pAVIStreamGetFrameOpen)(pavi, &biWanted); } diff --git a/dll/ddproxy.cpp b/dll/ddproxy.cpp index 50af319..5903134 100644 --- a/dll/ddproxy.cpp +++ b/dll/ddproxy.cpp @@ -356,6 +356,7 @@ int HookDDProxy(HMODULE module, int dxVersion) case 1: case 2: case 3: + case 4: case 5: case 6: hinst = LoadLibrary("ddraw.dll"); diff --git a/dll/ddraw.cpp b/dll/ddraw.cpp index 311df0b..cd8b934 100644 --- a/dll/ddraw.cpp +++ b/dll/ddraw.cpp @@ -405,7 +405,7 @@ static CHAR *LogSurfaceAttributes(LPDDSURFACEDESC lpddsd, char *label, int line) static void DumpPixFmt(LPDDSURFACEDESC2 lpdds) { - OutTrace("PixelFormat: lpddsd=%x %s\n", DumpPixelFormat(lpdds)); + OutTrace("PixelFormat: lpdds=%x %s\n", DumpPixelFormat(lpdds)); } void DescribeSurface(LPDIRECTDRAWSURFACE lpdds, int dxversion, char *label, int line) diff --git a/dll/dinput.cpp b/dll/dinput.cpp index c404502..8b3a898 100644 --- a/dll/dinput.cpp +++ b/dll/dinput.cpp @@ -18,6 +18,8 @@ #define DIDEVTYPE_JOYSTICK 4 #endif +extern BOOL WINAPI extGetCursorPos(LPPOINT); + typedef HRESULT (WINAPI *QueryInterface_Type)(void *, REFIID, LPVOID *); typedef HRESULT (WINAPI *DirectInputCreate_Type)(HINSTANCE, DWORD, LPDIRECTINPUT *, LPUNKNOWN); typedef HRESULT (WINAPI *DirectInputCreateEx_Type)(HINSTANCE, DWORD, REFIID, LPVOID *, LPUNKNOWN); @@ -87,10 +89,25 @@ int iCurMinY; int iCurMaxX; int iCurMaxY; +LPDIRECTINPUTDEVICE lpDIDDevice = NULL; LPDIRECTINPUTDEVICE lpDIDKeyboard = NULL; LPDIRECTINPUTDEVICE lpDIDSysMouse = NULL; LPDIRECTINPUTDEVICE lpDIDJoystick = NULL; +static char *sDevice(LPDIRECTINPUTDEVICE lpdid) +{ + char *ret; + ret = NULL; + if(lpdid==lpDIDDevice) ret = "Device"; + if(lpdid==lpDIDKeyboard) ret = "Keyboard"; + if(lpdid==lpDIDSysMouse) ret = "Mouse"; + if(lpdid==lpDIDJoystick) ret = "Joystick"; + if (ret) + return ret; + else + return (lpdid ? "unknown" : "NULL"); +} + void HookDirectInput(HMODULE module) { const GUID di7 = {0x9A4CB684,0x236D,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE}; @@ -286,7 +303,8 @@ HRESULT WINAPI extDICreateDevice(LPDIRECTINPUT lpdi, REFGUID rguid, LPDIRECTINPU SetHook((void *)(**(DWORD **)lplpdid + 52), extDISetCooperativeLevel, (void **)&pDISetCooperativeLevel, "SetCooperativeLevel(I)"); switch(iDeviceType(rguid)){ - case DIDEVTYPE_MOUSE: lpDIDSysMouse = *lplpdid; break; + case DIDEVTYPE_DEVICE: lpDIDDevice = *lplpdid; break; + case DIDEVTYPE_MOUSE: lpDIDSysMouse = *lplpdid; break; case DIDEVTYPE_KEYBOARD: lpDIDKeyboard = *lplpdid; break; case DIDEVTYPE_JOYSTICK: lpDIDJoystick = *lplpdid; break; } @@ -314,7 +332,8 @@ HRESULT WINAPI extDICreateDeviceEx(LPDIRECTINPUT lpdi, REFGUID rguid, SetHook((void *)(**(DWORD **)pvout + 52), extDISetCooperativeLevel, (void **)&pDISetCooperativeLevel, "SetCooperativeLevel(I)"); switch(iDeviceType(rguid)){ - case DIDEVTYPE_MOUSE: lpDIDSysMouse = *(LPDIRECTINPUTDEVICE *)pvout; break; + case DIDEVTYPE_DEVICE: lpDIDDevice = *(LPDIRECTINPUTDEVICE *)pvout; break; + case DIDEVTYPE_MOUSE: lpDIDSysMouse = *(LPDIRECTINPUTDEVICE *)pvout; break; case DIDEVTYPE_KEYBOARD: lpDIDKeyboard = *(LPDIRECTINPUTDEVICE *)pvout; break; case DIDEVTYPE_JOYSTICK: lpDIDJoystick = *(LPDIRECTINPUTDEVICE *)pvout; break; } @@ -347,8 +366,8 @@ HRESULT WINAPI extGetDeviceData(LPDIRECTINPUTDEVICE lpdid, DWORD cbdata, LPVOID unsigned int i; POINT p; - OutTraceDW("GetDeviceData(I): did=%x cbdata=%i rgdod=%x, inout=%d flags=%x\n", - lpdid, cbdata, rgdod, *pdwinout, dwflags); + OutTraceDW("GetDeviceData(I): did=%x(%s) cbdata=%i rgdod=%x, inout=%d flags=%x\n", + lpdid, sDevice(lpdid), cbdata, rgdod, *pdwinout, dwflags); res = (*pGetDeviceData)(lpdid, cbdata, rgdod, pdwinout, dwflags); switch(res){ @@ -370,22 +389,22 @@ HRESULT WINAPI extGetDeviceData(LPDIRECTINPUTDEVICE lpdid, DWORD cbdata, LPVOID return DI_OK; } - if(dxw.dwFlags4 & RELEASEMOUSE){ - POINT curr; - RECT client; - extern GetCursorPos_Type pGetCursorPos; - extern GetClientRect_Type pGetClientRect; - extern ScreenToClient_Type pScreenToClient; - (*pGetCursorPos)(&curr); - (*pScreenToClient)(dxw.GethWnd(), &curr); - (*pGetClientRect)(dxw.GethWnd(), &client); - if ((curr.x < client.left) || (curr.y < client.top) || (curr.x > client.right) || (curr.y > client.bottom)){ - *pdwinout = 0; - return DI_OK; + if(lpdid == lpDIDSysMouse){ + if(dxw.dwFlags4 & RELEASEMOUSE) { + POINT curr; + RECT client; + extern GetCursorPos_Type pGetCursorPos; + extern GetClientRect_Type pGetClientRect; + extern ScreenToClient_Type pScreenToClient; + (*pGetCursorPos)(&curr); + (*pScreenToClient)(dxw.GethWnd(), &curr); + (*pGetClientRect)(dxw.GethWnd(), &client); + if ((curr.x < client.left) || (curr.y < client.top) || (curr.x > client.right) || (curr.y > client.bottom)){ + *pdwinout = 0; + return DI_OK; + } } - } - if(cbdata == 20 || cbdata == 24 || cbdata == 16){ tmp = (BYTE *)rgdod; if(dxw.bDInputAbs){ GetMousePosition((int *)&p.x, (int *)&p.y); @@ -404,7 +423,6 @@ HRESULT WINAPI extGetDeviceData(LPDIRECTINPUTDEVICE lpdid, DWORD cbdata, LPVOID } } } - return DI_OK; } @@ -413,7 +431,7 @@ HRESULT WINAPI extGetDeviceState(LPDIRECTINPUTDEVICE lpdid, DWORD cbdata, LPDIMO HRESULT res; POINT p = {0, 0}; - OutTraceDW("GetDeviceState(I): did=%x cbData=%i,%i\n", lpdid, cbdata, dxw.bActive); + OutTraceDW("GetDeviceState(I): did=%x(%s) cbData=%i,%i\n", lpdid, sDevice(lpdid), cbdata, dxw.bActive); res = (*pGetDeviceState)(lpdid, cbdata, lpvdata); @@ -440,44 +458,41 @@ HRESULT WINAPI extGetDeviceState(LPDIRECTINPUTDEVICE lpdid, DWORD cbdata, LPDIMO break; } - if( cbdata == sizeof(DIMOUSESTATE) || cbdata == sizeof(DIMOUSESTATE2) - // || cbdata == sizeof(DIJOYSTATE) || cbdata == sizeof(DIJOYSTATE2) - ){ - int iMaxX, iMaxY, iMinX, iMinY; - if(dxw.dwFlags1 & MODIFYMOUSE){ - iMinX = iCurMinX ? iCurMinX : 0; - iMaxX = iCurMaxX ? iCurMaxX : dxw.GetScreenWidth(); - iMinY = iCurMinY ? iCurMinY : 0; - iMaxY = iCurMaxY ? iCurMaxY : dxw.GetScreenHeight(); - } - else { - RECT WinRect = dxw.GetMainWindow(); - iMinX = iCurMinX ? iCurMinX : WinRect.left; - iMaxX = iCurMaxX ? iCurMaxX : WinRect.right; - iMinY = iCurMinY ? iCurMinY : WinRect.top; - iMaxY = iCurMaxY ? iCurMaxY : WinRect.bottom; - } - OutTraceB("GetDeviceState(I): CLIP (%d,%d)-(%d,%d)\n", iMinX, iMinY, iMaxX, iMaxY); - GetMousePosition((int *)&p.x, (int *)&p.y); - lpvdata->lX = p.x; - lpvdata->lY = p.y; - if(!dxw.bDInputAbs){ - if(p.x < iMinX) p.x = iMinX; - if(p.x > iMaxX) p.x = iMaxX; - if(p.y < iMinY) p.y = iMinY; - if(p.y > iMaxY) p.y = iMaxY; - lpvdata->lX = p.x - iCursorX; - lpvdata->lY = p.y - iCursorY; - iCursorX = p.x; - iCursorY = p.y; - } + if( cbdata == sizeof(DIMOUSESTATE) || cbdata == sizeof(DIMOUSESTATE2)){ + if(!dxw.bActive){ lpvdata->lZ = 0; *(DWORD *)lpvdata->rgbButtons = 0; + OutTraceB("GetDeviceState(I): DEBUG cleared mousestate=(%d,%d)\n", p.x, p.y); + return DI_OK; + } + + if(dxw.bDInputAbs){ // absolute position + POINT p; + extGetCursorPos(&p); + lpvdata->lX = p.x; + lpvdata->lY = p.y; + OutTraceDW("GetMousePosition(I): x,y=(%d,%d)\n", p.x, p.y); + } + else { // relative position + if(dxw.dwFlags6 & EMULATERELMOUSE){ + int iMaxX, iMaxY, iMinX, iMinY; + RECT WinRect = dxw.GetMainWindow(); + iMinX = WinRect.left; + iMaxX = WinRect.right; + iMinY = WinRect.top; + iMaxY = WinRect.bottom; + iCursorX = (iMaxX+iMinX)/2; + iCursorY = (iMaxY+iMinY)/2; + OutTraceB("GetDeviceState(I): RELATIVE clip=(%d,%d)-(%d,%d) pos=(%d,%d)\n", iMinX, iMinY, iMaxX, iMaxY, iCursorX, iCursorY); + (*pGetCursorPos)(&p); + lpvdata->lX = p.x - iCursorX; + lpvdata->lY = p.y - iCursorY; + (*pSetCursorPos)(iCursorX, iCursorY); + } } - OutTraceB("GetDeviceState(I): DEBUG cleared mousestate=(%d,%d)\n", p.x, p.y); } - + // SysKeybd device if(cbdata == 256 && !dxw.bActive) { ZeroMemory(lpvdata, 256); @@ -528,8 +543,8 @@ static char *ExplainDataFormatFlags(DWORD f) HRESULT WINAPI extSetDataFormat(LPDIRECTINPUTDEVICE lpdid, LPCDIDATAFORMAT lpdf) { - OutTraceDW("SetDataFormat(I): did=%x lpdf=%x size=%d objsize=%d flags=0x%x(%s) datasize=%d numobjects=%d\n", - lpdid, lpdf, lpdf->dwSize, lpdf->dwObjSize, lpdf->dwFlags, ExplainDataFormatFlags(lpdf->dwFlags), lpdf->dwDataSize, lpdf->dwNumObjs); + OutTraceDW("SetDataFormat(I): did=%x(%s) lpdf=%x size=%d objsize=%d flags=0x%x(%s) datasize=%d numobjects=%d\n", + lpdid, sDevice(lpdid), lpdf, lpdf->dwSize, lpdf->dwObjSize, lpdf->dwFlags, ExplainDataFormatFlags(lpdf->dwFlags), lpdf->dwDataSize, lpdf->dwNumObjs); if(IsDebug){ DIOBJECTDATAFORMAT *df; df = lpdf->rgodf; @@ -539,8 +554,10 @@ HRESULT WINAPI extSetDataFormat(LPDIRECTINPUTDEVICE lpdid, LPCDIDATAFORMAT lpdf) } } - if(lpdf->dwFlags & DIDF_ABSAXIS) dxw.bDInputAbs = 1; - if(lpdf->dwFlags & DIDF_RELAXIS) dxw.bDInputAbs = 0; + if(lpdid == lpDIDSysMouse){ + if(lpdf->dwFlags & DIDF_ABSAXIS) dxw.bDInputAbs = 1; + if(lpdf->dwFlags & DIDF_RELAXIS) dxw.bDInputAbs = 0; + } return (*pSetDataFormat)(lpdid, lpdf); } @@ -548,8 +565,8 @@ HRESULT WINAPI extDISetCooperativeLevel(LPDIRECTINPUTDEVICE lpdid, HWND hwnd, DW { HRESULT res; - OutTraceDW("SetCooperativeLevel(I): did=%x hwnd=%x flags=%x(%s)\n", - lpdid, hwnd, dwflags, ExplainDICooperativeFlags(dwflags)); + OutTraceDW("SetCooperativeLevel(I): did=%x(%s) hwnd=%x flags=%x(%s)\n", + lpdid, sDevice(lpdid), hwnd, dwflags, ExplainDICooperativeFlags(dwflags)); if(dxw.IsRealDesktop(hwnd)) hwnd=dxw.GethWnd(); //dwflags = DISCL_NONEXCLUSIVE | DISCL_BACKGROUND; @@ -576,18 +593,6 @@ void GetMousePosition(int *x, int *y) OutTraceDW("GetMousePosition(I): x,y=(%d,%d)\n", *x, *y); } -void InitPosition(int x, int y, int minx, int miny, int maxx, int maxy) -{ - iCursorX = x; - iCursorY = y; - iCursorXBuf = x; - iCursorYBuf = y; - iCurMinX = minx; - iCurMinY = miny; - iCurMaxX = maxx; - iCurMaxY = maxy; -} - typedef struct { LPDIENUMDEVICESCALLBACK cb; LPVOID arg; @@ -628,7 +633,7 @@ HRESULT WINAPI extAcquire(LPDIRECTINPUTDEVICE lpdid) { HRESULT res; res = (*pAcquire)(lpdid); - OutTrace("Acquire(I): lpdid=%x res=%x(%s)\n", lpdid, res, ExplainDDError(res)); + OutTrace("Acquire(I): lpdid=%x(%s) res=%x(%s)\n", lpdid, sDevice(lpdid), res, ExplainDDError(res)); return res; } @@ -636,7 +641,7 @@ HRESULT WINAPI extUnacquire(LPDIRECTINPUTDEVICE lpdid) { HRESULT res; res = (*pUnacquire)(lpdid); - OutTrace("Unacquire(I): lpdid=%x res=%x(%s)\n", lpdid, res, ExplainDDError(res)); + OutTrace("Unacquire(I): lpdid=%x(%s) res=%x(%s)\n", lpdid, sDevice(lpdid), res, ExplainDDError(res)); return res; } diff --git a/dll/dxhook.cpp b/dll/dxhook.cpp index babb6a7..af65552 100644 --- a/dll/dxhook.cpp +++ b/dll/dxhook.cpp @@ -453,7 +453,7 @@ void SetHook(void *target, void *hookproc, void **hookedproc, char *hookname) tmp=(void *)dwTmp; if (*hookedproc && *hookedproc!=tmp) { - sprintf(msg,"SetHook: proc=%s oldhook=%x newhook=%x\n", hookname, hookedproc, tmp); + sprintf(msg,"SetHook: proc=%s oldhook=%x->%x newhook=%x\n", hookname, hookedproc, *(DWORD *)hookedproc, tmp); OutTraceDW(msg); if (IsAssertEnabled) MessageBox(0, msg, "SetHook", MB_OK | MB_ICONEXCLAMATION); } @@ -1310,11 +1310,8 @@ void HookInit(TARGETMAP *target, HWND hwnd) } // make InitPosition used for both DInput and DDraw - if(dxw.Windowize){ - InitPosition(target->initx, target->inity, - target->minx, target->miny, target->maxx, target->maxy); - dxw.InitWindowPos(target->posx, target->posy, target->sizx, target->sizy); - } + if(dxw.Windowize) dxw.InitWindowPos(target->posx, target->posy, target->sizx, target->sizy); + OutTraceB("HookInit: base hmodule=%x\n", base); HookModule(base, dxw.dwTargetDDVersion); @@ -1346,7 +1343,7 @@ void HookInit(TARGETMAP *target, HWND hwnd) hMouseHook=(*pSetWindowsHookEx)(WH_GETMESSAGE, MessageHook, hInst, GetCurrentThreadId()); if(hMouseHook==NULL) OutTraceE("SetWindowsHookEx WH_GETMESSAGE failed: error=%d\n", GetLastError()); } - + InitScreenParameters(); if(hwnd) HookWindowProc(hwnd); // in fullscreen mode, messages seem to reach and get processed by the parent window @@ -1357,7 +1354,7 @@ void HookInit(TARGETMAP *target, HWND hwnd) // 2) in Windowed mode and // 3) supposedly in fullscreen mode (dxw.IsFullScreen()) and // 4) configuration ask for a overlapped bordered window (dxw.dwFlags1 & FIXWINFRAME) then - // update window styles: just this window or, when FIXPARENTWIN is set, the father one as well. + // update window styles: just this window or, when FIXPARENTWIN is set, the father one as well. if (hwnd && dxw.Windowize && dxw.IsFullScreen() && (dxw.dwFlags1 & FIXWINFRAME)) { dxw.FixWindowFrame(dxw.hChildWnd); diff --git a/dll/dxwnd.cpp b/dll/dxwnd.cpp index 987aaa4..57178f7 100644 --- a/dll/dxwnd.cpp +++ b/dll/dxwnd.cpp @@ -1,7 +1,7 @@ /* DXWnd/dxwnd.cpp DirectX Hook Module -Copyright(C) 2004-2011 SFB7/GHO +Copyright(C) 2004-2016 SFB7/GHO This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -27,7 +27,7 @@ along with this program. If not, see . #include "TlHelp32.h" -#define VERSION "2.03.50" +#define VERSION "2.03.51" #define DDTHREADLOCK 1 //#define LOCKTHREADS diff --git a/dll/dxwnd.suo b/dll/dxwnd.suo deleted file mode 100644 index a6ba1366ba193844d155b7a2835fe287d363fb5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7168 zcmeI0O-x)>6vq#()nc(9LaAcKv7lnK1guCutOgipO+adCizXxnW(K4TAAzAC(bhy4 zZZvUWq8k?`?Z$GKYwwn?zZL8OSavXvXypksK0_|6_56sZR0`zm$KQc-)Y9<7Hy&vxPz|u z1b4WDR`-1$WhbSQvWs#*MR!~kw3}#qTdI~gfwMNvFJm$5wkg_KyUHy`r&`;w?DMjp zVif!K!1WjRFIH?9lZ*>GgT!gOXs;lBl&5aH;txcuYi(PFwpb0n+KAH(`10tS4cnYe zSg(!KX6!t53Y}d4T!{r6kzWIkWQ$6$d&9y^`Ijh;v=N)PF@BOeh&~xh*jxN7C0p}j zps?0^fD%={a9cWy2}B)v5R2ZERntuj=AT%A()90!J=uR*qS=yB^Z~ z7btN%ZbQ^p@SrJ6@_fmjvp229tJ|!N=Q;csu2F_q-8$?$e!mcq)Rc9e7Ep7wBJDF4 zsFCmGY_gxI@`bZ*xeRvT{KD)*y6>h1D%Pdh=P2i#)5HD$zv$y@DZKb^&qtP-;JoC| zDb8ynDBu42Sa}kwQyw@N_`0D-* zV$T`yN?0IH)j32uz6Spb+kc#O6P)N|uyT0MXBeB~42mI93;w6vNKr8A{vU)_XC^8p z-{qolP9{THjhflN@-oR5t;UnzS4~GaZUs=Zf^9v0D;6s8C;WY(1na89>z%LswU7Hx zd$+7;IgBkTX3i|Xo0y&CYl!HCJx~2M*+e_Bw41ues}GZ9v@_ObhpAhMu`N7x5T})Y zX!HnUt^C@(x(9oXGxHkpIEi|Gg!;+zo0*|_g#qgeeIy~;n_ zi1z1U*P;o(IM<#cPLDWD*qt7?*$8Yv3tD% z&UtxLio3|yB48}g=>1Q&q4%Mv^27M!P);~FgDyf|p`mXP!n@*xd=s9?U!%%@3|<#K zwD**~6JY%jEVY?v-09uB-aYIamdTsajb?Lt<8~Q)ae(>kw!i{e6_u8*D zPyG0GL&K?Wez|?^sgX$m0W@GoM{5?A7V3L%e4hO3)B4|zl{epCW$pEAF|${LoUOdK zpClG{nP{5i#xHS>GgzIz#Du=_Mo=qo;|QFqvovC1`T{jU1Qzm6V2^r-5rVd&nd)Nn z`l9S$i`IGq=dl2x&ajtLCYNKLpLON(tU~L9zh&cp82?TaX_B7oDSRo7Ha%z~%n=Iy z`||s}*q8P)UFFwfA>@tIJ6mYuLBH@{xa+6{yEptewaZ)btv@R6J2?l}aQ=sw+!QR} xzH_?op95gNVvxQ;Dk~^;1ByRx?`oZ1#o7i2-TQYjzNlm6%8$BkRKCqD|8HV$xh((y diff --git a/dll/dxwnd.vs2008.suo b/dll/dxwnd.vs2008.suo index 0f47bf7451f2ea4fa6b03acb9ff71c42b02b3cfe..54f9aab562d327b709f54262a6ec4341f53da60a 100644 GIT binary patch literal 14336 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 literal 259584 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 oGnDJtF*G>zJK>Zs7mm_HookDI); DDX_Check(pDX, IDC_HOOKDI8, cTarget->m_HookDI8); DDX_Check(pDX, IDC_UNACQUIRE, cTarget->m_Unacquire); - DDX_Text(pDX, IDC_INITX, cTarget->m_InitX); - DDX_Text(pDX, IDC_INITY, cTarget->m_InitY); - DDX_Text(pDX, IDC_MAXX, cTarget->m_MaxX); - DDX_Text(pDX, IDC_MAXY, cTarget->m_MaxY); - DDX_Text(pDX, IDC_MINX, cTarget->m_MinX); - DDX_Text(pDX, IDC_MINY, cTarget->m_MinY); + DDX_Check(pDX, IDC_EMULATERELMOUSE, cTarget->m_EmulateRelMouse); // Message processing DDX_Check(pDX, IDC_FILTERMESSAGES, cTarget->m_FilterMessages); DDX_Check(pDX, IDC_PEEKALLMESSAGES, cTarget->m_PeekAllMessages); diff --git a/host/TabProgram.cpp b/host/TabProgram.cpp index fe54aa2..6e3a483 100644 --- a/host/TabProgram.cpp +++ b/host/TabProgram.cpp @@ -12,6 +12,14 @@ static char THIS_FILE[] = __FILE__; #endif +static BOOL dirExists(char *path) +{ + DWORD ftyp = GetFileAttributesA(path); + if (ftyp == INVALID_FILE_ATTRIBUTES) return FALSE; //something is wrong with your path! + if (ftyp & FILE_ATTRIBUTE_DIRECTORY) return TRUE; // this is a directory! + return false; // this is not a directory! +} + ///////////////////////////////////////////////////////////////////////////// // CTabProgram dialog @@ -73,6 +81,7 @@ void CTabProgram::OnOpen() CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent())); cTarget->m_File.GetWindowText(path, MAX_PATH); GetPrivateProfileString("window", "exepath", NULL, path, MAX_PATH, gInitPath); + if(!dirExists(path)) strcpy(path, ""); CFileDialog dlg( TRUE, "*.*", path, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "Program (*.exe)|*.exe|All Files (*.*)|*.*||", this); if( dlg.DoModal() == IDOK) { @@ -92,6 +101,7 @@ void CTabProgram::OnOpenLaunch() CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent())); cTarget->m_File.GetWindowText(path, MAX_PATH); GetPrivateProfileString("window", "exepath", NULL, path, MAX_PATH, gInitPath); + if(!dirExists(path)) strcpy(path, ""); CFileDialog dlg( TRUE, "*.*", path, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "Program (*.exe)|*.exe|All Files (*.*)|*.*||", this); if( dlg.DoModal() == IDOK) { diff --git a/host/TargetDlg.cpp b/host/TargetDlg.cpp index 47c73ae..700ade6 100644 --- a/host/TargetDlg.cpp +++ b/host/TargetDlg.cpp @@ -29,6 +29,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/) m_TextureHandling = 0; m_HookDI = FALSE; m_HookDI8 = FALSE; + m_EmulateRelMouse = FALSE; // ?? m_ModifyMouse = TRUE; // default true !! m_VirtualJoystick = FALSE; m_Unacquire = FALSE; @@ -213,12 +214,6 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/) m_NoTextures = FALSE; m_BlackWhite = FALSE; m_AssertDialog = FALSE; - m_InitX = 0; - m_InitY = 0; - m_MaxX = 0; - m_MaxY = 0; - m_MinX = 0; - m_MinY = 0; m_PosX = 50; m_PosY = 50; m_SizX = 800; diff --git a/host/TargetDlg.h b/host/TargetDlg.h index b3dd9b4..f1b071b 100644 --- a/host/TargetDlg.h +++ b/host/TargetDlg.h @@ -34,6 +34,7 @@ public: int m_SonProcessMode; BOOL m_HookDI; BOOL m_HookDI8; + BOOL m_EmulateRelMouse; BOOL m_ModifyMouse; BOOL m_VirtualJoystick; BOOL m_Unacquire; @@ -223,12 +224,6 @@ public: BOOL m_ForceYUVtoRGB; BOOL m_ForceRGBtoYUV; BOOL m_LimitScreenRes; - int m_InitX; - int m_InitY; - int m_MaxX; - int m_MaxY; - int m_MinX; - int m_MinY; int m_PosX; int m_PosY; int m_SizX; diff --git a/host/dxwndhost.aps b/host/dxwndhost.aps index 35348943a8ac741b21baa68758d3acece22297b6..78e3d2ca41fd9d387941ac812c5d9ce770d29acd 100644 GIT binary patch delta 7067 zcmZu$4SZD9l|T0l=8HfAnaO-5Apt}y5aug08BplU%u6z4X5KI}$s`C4T16~K5D^fS z1V!bm2psiMK>?RltfJVUs3=0WwQfbB*4HK+Z zT{ZiHp8I-h*mDy5a^Ltmc5Q_;xky{%WA)mp7`s~Qt!4%LzVWedF4MN#*r4J^;R;v< zrSO%uv4dHzsD)dh8}5MH;U=hsh4ecQu7^c%3oOwM z?P0&Ersv%E*tv3g-g1)tgFkONBc9hYNtb617tgLy;@R#K&uNNy#yX^Kd-bB507e5q zD`cRFp6AcMO}_vxC?6!fxUu50p)t9$IgtXl%j1C%VBJ$@7RCt$R=WZa35T-HkVtrrHyUq>@U7JC$ToO>%dI90)+C08)|Zx<(^(|511{YIwqSvL6KI>9x`p|+;>W;vafL#>=?fUIET6s;v+;|4#> z!h=O->3YCv&zRW__~#<0;|D@3H@j52OJ6>}3vR^PVw;TugKuwCZBgQKQ&b64M}7~? z#ze8zezPDWv4onWfr;j<59VNRaTU7-A1|(9Kg8FIt88EE7z#+@^FW z$y7w;8`S87y96FmV@;|aM~w||HvsNfZ0;llKine}Vsf&rDH`D$&=`Q_0*ppdBKR5` zp{F0>gK)hd^a_yHG$F?o?rP8lEAaGSOZZ+v#nmP`9#@i_^1yupOr_;yI;=Fcw{X}C zD+Qd1@X!%QGw6f+0p;CJ(*xwK+*46Nntpf?Z!4{oRsn9^?T}UjzP{VW*5H9sD_e`h zo_DZyc(&9U{!z{?+MHBE;lV&B4b}^kuWUFPrQ<=-4-fT&`N*Ldgbf%S;Lu$;A^!LLz#_jgNqj+kFlWF+v5JzCMpjFzN zWF)L4l@?msBpoley8(VI$hbmf5AJ0MGr@ z?s!@#O{b&ZtRzE}wfGOP3~<>o$n{c}P` zj?2-mbR5AgV2TkI8Km7AW+ zn4hl^UN!nls2L^c5nlL$@LC>MlFcEtJ)Y)A#7!A>Kh7U!mtF^4@KPmv1Gf*Wv>p)3 z;m$--?bM^066%|P2Vb&F2LVsMWMhYr4L93=CKTze8W3O&LHIYUA8unm$EhznT)!|z zZjMBwNhQSRPnq&90k=|c=AxbBUic+$9B!B127L2nhxG3>*vl67EBtu4qw*bLK~qXZ z(ma{F{Q)?PLo1xNcMU48q$9CNoQ}EMAB6W%uCUsV2$CmIO2@6?7(XrnHyp*=DlC>? z3zladx;{ALh4*nwh28WU3fj7*ln2~_2KWGvR@kKfpgjAE+4Y~ord3TRWZ_952)`Ae zIMhV7DP6ofN~IrSz1boCj&k5D7WNU&GFxNEay`)OL*b+vQ(}oUKb(|6j|(asp?gD3 zXB3%-7$wmYIb5U$swq^C`{85239nYNlX%SRluiN8ebqksw9svqQ)v-YlqG*JFg{K4 zIS0Gp4+5sNsYfQ|%ui6YSnU60;E|ZzqO?X6G#cf||AtMkS)@M#I$v|LPjQdMX8#|d zsfRc1u?VbS5dMUxEoRf7X%*Rhw2B^=8$QEfl}`2-9A9Z=pX0dwwyXXsjH%)Yx5sD< z52eC0d90OgZ;tulEFH@I)y^*jMTbRCOCdE*S;6CKguekE-EW!ncfrTiG~Y{)+XY_= zLf2mTk!td-&a6I@D-8}}`@@xj-5oTm$pHNZD{EE1op$F+x2 z=sy5&u~tp}R*>YVNE{x@p63J>QuyIZ^W@7r3c^2g9q|B6(Lc348PeUSta={sh_%uQ zOuxl>Vc1T0mYR&obdEe!bh1r0CzG(s=8#MbSG-|mgD_#UnJ!}#7rnMZQVKu;!}D)g z9fhJ7MNaXPkjkyDCkREj-{y1_3p$mN6IngCC+Q;dPzhRsXKWT}FvAT8%&Ziv>^A$5 z0lLl6NJ61(=b_{{6k~R)sf-3c-D{>z_XeOGSJ=%}!-N5yUb=1~invy|O%R6Ti}vaX z6+(g61^nhAiZY>DfFhY?BH=V0dkZxDI_T1o6Fh>bG_~S5htp&u zFLvB%t|Q0~cA-iU(;P|0)OaYWrYNC%s2+7-kE4n?ajV15s_4Q1lOPNJPlr`%^8TpC1%L2d{8GCanr>@lzTi>gN|hAI%JhbF^nB@ zu+iA#v^p;rnxUk^?@w{expol7;EPVXtC-hS5T^9BW$>%Y+r69u4j zCg_URouGntk`7W(W~iK}A)NuLNUzqxG~MvoHoCaDCsco4gY&EF*ks&LUCpLo-LEY5 z-`Dl{a%c4_lPd-rKpqII2_5xA6P~R$&j{%pjg`$i+vsvZScl26mMr&$Od2U=D*fmH zZ4Wf-IOSU<%bnD{F z!YNASIv4KD#KYv24thcDH!#AK_vC|wPVnV2)~u1z-ZUNMPL^dU zyS38`3|9|A66+6Jr>At93Q?ugm8FfL%*1)B9n(5PsU?qjpj}|OEor23vO`C7_l;x0 z%^M(t$4880op^r4DAq;4R-9N{%BJhB>!@`tZg5cozY<9*5Q0oHyt+pK+6%%<>XP?;{95U^weNYr~B? zpHe7W9u*^Hcw^HRp|a#0-2#tn5g>1Kv6d}Nd6FnsqTE4@h` zud9-N$Z+s6r)e%_JJ-YJBCZ~Qd6Zd>Ip`Hq9a$sIr_6oKDs?m5eatB>VEEoKC%X*~ zjU2%i;^~pq>~=gqvX(8v+EF$1Rybu;jkK8I_Tx@z3FW-wHEbzv8C7k%lSb%$q!MdR z6iCY$UUkAL-Nmqt9(OaGcf!f;!3m?QOv_2_%pScKLMAf7f7tAoO zWb|vCPmyk+doLjA#U)SD=G=!TM_03zcy4sfg!_dey#;1tGTowNP9H-a=tnzf$yFWp z!Gq+$#}>8;GNrNTlgW=5E;w0f zTi;KLw@c1?;2~sVY^Dvg4ytAu!7(3f>{k_42ZtMA6J_mFHY+m7%869g8_v=Vl}@Vs zbrF7yJ!3|&$8g)2TDAobQhO_&8dJp{?>jeU$`t8+6HcD(7%uTIQuKE|_g6j$U(sqz z^oa<6r;RNc0B_&C2G?&Mej&8AZ`N#=WCHryvvCeDC3erbN)n&+`p(W-DCOFC&)i=a z%^CCFH=3=t{>f-Y=N~khW4c?6=7ZgnjOOv~w{y+D0}GZI9rvlX)6IJ74Kw=^=PfdZ zW~2IETy)&fVM*MvVnp9Bm)wy@?(WMhTgir9eD{2Xr-nPYpM^={^D$V%y>M@4Uf)m%|9ZTTyHF;(lzS%D% zH?6%~n2f~8TBl*1#-6pK4WS(m^a~w$u3yOD)$8(Vop@Kj(1ow{3)B0)Ubm&h1bd3L z1Km>PApY%B`>Q<>=3zbX2GN9ic?^Q9Tz}|4MGW9ulXjq(IhsEwWb|b`NV)F) zIzLc%4k5k*&KLLhrE7^F&me%;3$*2>%rWLLLFI$F?q&4vUR_~eU#kfDcCdC}7>zrT zPRGttL-)~3bp1sHl^MKt34bMx+iBGt)iiEV3BY!zq5Ie+x}Q*AZ(pvh8Ot06lc{~U zUR&>@_Co4oTtGW8nK@?vz8K)(B%=@dWcVepDd(xY&LlMlyVVY zLgRiK)0VZH}PYq@I82BB^pXfaIqDU)SELo)IzSbr)$x+6KJw&3+N9x*)uV>_tR-X+o?(HJxjtBB_#AFjczPM zFYX2?rk+bNZOXM|Nnb(Xa0j_{on-HsPQuEJVQId^@?-9Ir@>cT!r#k>y4K)VT*9v+ z&vxedvlsJ4&`b8wnM^x*Be^z_lEP;s^xQ{{!Wl f!#3VkUHCrD?C`s^4-2H~!c;xwiC;6+=2ZVbGH)r3 delta 26629 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 D_b%L0 diff --git a/host/dxwndhost.rc b/host/dxwndhost.rc index dda6bbc72bd966479a9fe65356163cc1217feac1..4c19159f103251b64ea43ede06e5d7e61ee88446 100644 GIT binary patch delta 128 zcmbPsnr+X1whb~&(}l7a7i~VkB(Z(6K)TZ81OEkda~bj(N*Rh7QW+E&ihyJeLn1>7 zLncERSOg>sV&wvH9z)6G`~T(HeHeTh{24+g=SDY9mOISGZOmZFpu=FuV9a1P`Cz*6 V616Q%k!Hs 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 - - diff --git a/host/dxwndhostView.cpp b/host/dxwndhostView.cpp index 43b3779..1b13042 100644 --- a/host/dxwndhostView.cpp +++ b/host/dxwndhostView.cpp @@ -24,6 +24,7 @@ static char THIS_FILE[] = __FILE__; #endif #define WM_ICON_NOTIFY WM_APP+10 +#define strcasecmp lstrcmpi extern UINT m_StartToTray; extern UINT m_InitialState; @@ -176,6 +177,8 @@ static void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg) t->flags4 = 0; t->flags5 = 0; t->flags6 = 0; + t->flags7 = 0; + t->flags8 = 0; t->tflags = 0; if(dlg->m_UnNotify) t->flags |= UNNOTIFY; if(dlg->m_Windowize) t->flags2 |= WINDOWIZE; @@ -248,6 +251,7 @@ static void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg) if(dlg->m_HookDI) t->flags |= HOOKDI; if(dlg->m_HookDI8) t->flags |= HOOKDI8; + if(dlg->m_EmulateRelMouse) t->flags6 |= EMULATERELMOUSE; if(dlg->m_ModifyMouse) t->flags |= MODIFYMOUSE; if(dlg->m_VirtualJoystick) t->flags6 |= VIRTUALJOYSTICK; if(dlg->m_Unacquire) t->flags6 |= UNACQUIRE; @@ -411,12 +415,6 @@ static void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg) if(dlg->m_SyncPalette) t->flags6 |= SYNCPALETTE; if(dlg->m_AnalyticMode) t->flags3 |= ANALYTICMODE; if(dlg->m_ReplacePrivOps) t->flags5 |= REPLACEPRIVOPS; - t->initx = dlg->m_InitX; - t->inity = dlg->m_InitY; - t->minx = dlg->m_MinX; - t->miny = dlg->m_MinY; - t->maxx = dlg->m_MaxX; - t->maxy = dlg->m_MaxY; t->posx = dlg->m_PosX; t->posy = dlg->m_PosY; t->sizx = dlg->m_SizX; @@ -495,6 +493,7 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg) dlg->m_HookDI = t->flags & HOOKDI ? 1 : 0; dlg->m_HookDI8 = t->flags & HOOKDI8 ? 1 : 0; + dlg->m_EmulateRelMouse = t->flags6 & EMULATERELMOUSE ? 1 : 0; dlg->m_ModifyMouse = t->flags & MODIFYMOUSE ? 1 : 0; dlg->m_VirtualJoystick = t->flags6 & VIRTUALJOYSTICK ? 1 : 0; dlg->m_Unacquire = t->flags6 & UNACQUIRE ? 1 : 0; @@ -659,12 +658,6 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg) dlg->m_SyncPalette = t->flags6 & SYNCPALETTE ? 1 : 0; dlg->m_AnalyticMode = t->flags3 & ANALYTICMODE ? 1 : 0; dlg->m_ReplacePrivOps = t->flags5 & REPLACEPRIVOPS ? 1 : 0; - dlg->m_InitX = t->initx; - dlg->m_InitY = t->inity; - dlg->m_MinX = t->minx; - dlg->m_MinY = t->miny; - dlg->m_MaxX = t->maxx; - dlg->m_MaxY = t->maxy; dlg->m_PosX = t->posx; dlg->m_PosY = t->posy; dlg->m_SizX = t->sizx; @@ -718,27 +711,21 @@ static void SaveConfigItem(TARGETMAP *TargetMap, PRIVATEMAP *PrivateMap, int i, sprintf_s(key, sizeof(key), "flagk%i", i); sprintf_s(val, sizeof(val), "%i", TargetMap->flags6); WritePrivateProfileString("target", key, val, InitPath); + sprintf_s(key, sizeof(key), "flagl%i", i); + sprintf_s(val, sizeof(val), "%i", TargetMap->flags7); + WritePrivateProfileString("target", key, val, InitPath); + sprintf_s(key, sizeof(key), "flagm%i", i); + sprintf_s(val, sizeof(val), "%i", TargetMap->flags8); + WritePrivateProfileString("target", key, val, InitPath); + sprintf_s(key, sizeof(key), "flagl%i", i); + sprintf_s(val, sizeof(val), "%i", TargetMap->flags7); + WritePrivateProfileString("target", key, val, InitPath); + sprintf_s(key, sizeof(key), "flagm%i", i); + sprintf_s(val, sizeof(val), "%i", TargetMap->flags8); + WritePrivateProfileString("target", key, val, InitPath); sprintf_s(key, sizeof(key), "tflag%i", i); sprintf_s(val, sizeof(val), "%i", TargetMap->tflags); WritePrivateProfileString("target", key, val, InitPath); - sprintf_s(key, sizeof(key), "initx%i", i); - sprintf_s(val, sizeof(val), "%i", TargetMap->initx); - WritePrivateProfileString("target", key, val, InitPath); - sprintf_s(key, sizeof(key), "inity%i", i); - sprintf_s(val, sizeof(val), "%i", TargetMap->inity); - WritePrivateProfileString("target", key, val, InitPath); - sprintf_s(key, sizeof(key), "minx%i", i); - sprintf_s(val, sizeof(val), "%i", TargetMap->minx); - WritePrivateProfileString("target", key, val, InitPath); - sprintf_s(key, sizeof(key), "miny%i", i); - sprintf_s(val, sizeof(val), "%i", TargetMap->miny); - WritePrivateProfileString("target", key, val, InitPath); - sprintf_s(key, sizeof(key), "maxx%i", i); - sprintf_s(val, sizeof(val), "%i", TargetMap->maxx); - WritePrivateProfileString("target", key, val, InitPath); - sprintf_s(key, sizeof(key), "maxy%i", i); - sprintf_s(val, sizeof(val), "%i", TargetMap->maxy); - WritePrivateProfileString("target", key, val, InitPath); sprintf_s(key, sizeof(key), "posx%i", i); sprintf_s(val, sizeof(val), "%i", TargetMap->posx); WritePrivateProfileString("target", key, val, InitPath); @@ -795,6 +782,10 @@ static void ClearTarget(int i, char *InitPath) WritePrivateProfileString("target", key, 0, InitPath); sprintf_s(key, sizeof(key), "flagk%i", i); WritePrivateProfileString("target", key, 0, InitPath); + sprintf_s(key, sizeof(key), "flagl%i", i); + WritePrivateProfileString("target", key, 0, InitPath); + sprintf_s(key, sizeof(key), "flagm%i", i); + WritePrivateProfileString("target", key, 0, InitPath); sprintf_s(key, sizeof(key), "tflag%i", i); WritePrivateProfileString("target", key, 0, InitPath); sprintf_s(key, sizeof(key), "initx%i", i); @@ -894,27 +885,15 @@ static int LoadConfigItem(TARGETMAP *TargetMap, PRIVATEMAP *PrivateMap, int i, c sprintf_s(key, sizeof(key), "flagk%i", i); TargetMap->flags6 = GetPrivateProfileInt("target", key, 0, InitPath); // ------- + sprintf_s(key, sizeof(key), "flagl%i", i); + TargetMap->flags7 = GetPrivateProfileInt("target", key, 0, InitPath); + // ------- + sprintf_s(key, sizeof(key), "flagm%i", i); + TargetMap->flags8 = GetPrivateProfileInt("target", key, 0, InitPath); + // ------- sprintf_s(key, sizeof(key), "tflag%i", i); TargetMap->tflags = GetPrivateProfileInt("target", key, 0, InitPath); // ------- - sprintf_s(key, sizeof(key), "initx%i", i); - TargetMap->initx = GetPrivateProfileInt("target", key, 0, InitPath); - // ------- - sprintf_s(key, sizeof(key), "inity%i", i); - TargetMap->inity = GetPrivateProfileInt("target", key, 0, InitPath); - // ------- - sprintf_s(key, sizeof(key), "minx%i", i); - TargetMap->minx = GetPrivateProfileInt("target", key, 0, InitPath); - // ------- - sprintf_s(key, sizeof(key), "miny%i", i); - TargetMap->miny = GetPrivateProfileInt("target", key, 0, InitPath); - // ------- - sprintf_s(key, sizeof(key), "maxx%i", i); - TargetMap->maxx = GetPrivateProfileInt("target", key, 0, InitPath); - // ------- - sprintf_s(key, sizeof(key), "maxy%i", i); - TargetMap->maxy = GetPrivateProfileInt("target", key, 0, InitPath); - // ------- sprintf_s(key, sizeof(key), "posx%i", i); TargetMap->posx = GetPrivateProfileInt("target", key, 0, InitPath); // ------- @@ -1137,6 +1116,14 @@ void CDxwndhostView::OnExport() DWORD TFlags; TARGETMAP *TargetMap; strcpy(path, dlg.GetPathName().GetBuffer()); + // XP fix: + if(strlen(path)>4){ + char *p; + p = &path[strlen(path-4)]; + if(strcasecmp(p, ".dxw")) strcat(path, ".dxw"); + } + else + strcat(path, ".dxw"); //MessageBox(path, "PathName", MB_OK); // export with no trace flags active TargetMap = &TargetMaps[i]; @@ -1385,8 +1372,6 @@ void CDxwndhostView::OnSetRegistry() fclose(regfp); } -#define strcasecmp lstrcmpi - void CDxwndhostView::OnSort() { int i, itemcount; diff --git a/host/resource b/host/resource index bc9a140416c2859858c77123f8cb568a44305fab..205c43bb7348edd1502eabf5a12a50d6bd2e6d35 100644 GIT binary patch delta 46 zcmV+}0MY-bssh}m0 ECY@Xmpa1{> delta 127 zcmcb!jA_LxrVSUwCQp#znD|L+vH&C7bla(aoKthwVOvEOC;E@80T@sdK^=0s6 z@SFHid-4K#9!A5-hD!1fp~;DI=94#7$V}4VV2psuPiASCm@FX1#q7us0hUjK@Hbx) MYYN@GA!m&m0OsB*hX4Qo