Browse Source

almost working WinPhone support.

Wei Mingzhi 9 years ago
parent
commit
ec56465bd0
8 changed files with 227 additions and 140 deletions
  1. 10 3
      common.h
  2. 5 3
      util.c
  3. 1 1
      video.c
  4. 1 0
      winphone/Assets/Data/README.txt
  5. 1 1
      winphone/SDL2/README.txt
  6. 110 45
      winphone/SDLPal.vcxproj
  7. 55 87
      winphone/SDLPal.vcxproj.filters
  8. 44 0
      winphone/WinPhoneUtil.cpp

+ 10 - 3
common.h

@@ -116,9 +116,16 @@ extern "C"
 
 #elif defined (__WINPHONE__)
 
-#define PAL_PREFIX            "./Assets/Data/"
-#define PAL_SAVE_PREFIX       "./" // ???
+#define PAL_PREFIX            "Assets\\Data\\"
+#define PAL_SAVE_PREFIX       "" // ???
 #define PAL_HAS_TOUCH         1
+#include <stdio.h>
+#ifdef __cplusplus
+#include <cstdio>
+#endif
+
+FILE *MY_fopen(const char *path, const char *mode);
+#define fopen MY_fopen
 
 #else
 
@@ -128,7 +135,7 @@ extern "C"
 #define PAL_ALLOW_KEYREPEAT   1
 #define PAL_HAS_CD            1
 #endif
-#if !defined (CYGWIN) && !defined (DINGOO) && !defined (GPH) && !defined (GEKKO)
+#if !defined (CYGWIN) && !defined (DINGOO) && !defined (GPH) && !defined (GEKKO) && !defined (__WINPHONE__)
 #define PAL_HAS_MP3           1
 #endif
 #endif

+ 5 - 3
util.c

@@ -30,6 +30,7 @@
 #endif
 
 #if SDL_VERSION_ATLEAST(2, 0, 0)
+#include "SDL_video.h"
 #include "SDL_messagebox.h"
 #endif
 
@@ -302,9 +303,10 @@ TerminateOnError(
    fprintf(stderr, "\nFATAL ERROR: %s\n", string);
 
 #if SDL_VERSION_ATLEAST(2, 0, 0)
-
-   SDL_ShowSimpleMessageBox(0, "FATAL ERROR", string, NULL);
-
+   {
+      extern SDL_Window *gpWindow;
+      SDL_ShowSimpleMessageBox(0, "FATAL ERROR", string, gpWindow);
+   }
 #else
 
 #ifdef _WIN32

+ 1 - 1
video.c

@@ -28,7 +28,7 @@ SDL_Surface              *gpScreen           = NULL;
 SDL_Surface              *gpScreenBak        = NULL;
 
 #if SDL_VERSION_ATLEAST(2,0,0)
-static SDL_Window        *gpWindow           = NULL;
+SDL_Window               *gpWindow           = NULL;
 static SDL_Renderer      *gpRenderer         = NULL;
 static SDL_Texture       *gpTexture          = NULL;
 static SDL_Texture       *gpTouchOverlay     = NULL;

+ 1 - 0
winphone/Assets/Data/README.txt

@@ -0,0 +1 @@
+Copy the data files here.

+ 1 - 1
winphone/SDL2/README.txt

@@ -1 +1 @@
-Download SDL2 sources from http://libsdl.org/ and extract here.
+Download SDL2 source code from http://libsdl.org/ and extract here.

+ 110 - 45
winphone/SDLPal.vcxproj

@@ -55,6 +55,18 @@
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
+    <IncludePath>.\SDL2\include;$(IncludePath)</IncludePath>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
+    <IncludePath>.\SDL2\include;$(IncludePath)</IncludePath>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <IncludePath>.\SDL2\include;$(IncludePath)</IncludePath>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <IncludePath>.\SDL2\include;$(IncludePath)</IncludePath>
+  </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
       <PreprocessorDefinitions>PSAPI_VERSION=2;%(PreprocessorDefinitions);__WINPHONE__=1</PreprocessorDefinitions>
@@ -85,11 +97,11 @@
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
     <ClCompile>
-      <PreprocessorDefinitions>PSAPI_VERSION=2;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <PrecompiledHeader>Use</PrecompiledHeader>
+      <PreprocessorDefinitions>PSAPI_VERSION=2;%(PreprocessorDefinitions);__WINPHONE__=1</PreprocessorDefinitions>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
       <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
       <AdditionalIncludeDirectories>$(ProjectDir);$(IntermediateOutputPath);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <CompileAsWinRT>true</CompileAsWinRT>
+      <CompileAsWinRT>false</CompileAsWinRT>
     </ClCompile>
     <Link>
       <AdditionalDependencies>d3d11.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -99,11 +111,11 @@
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
     <ClCompile>
-      <PreprocessorDefinitions>PSAPI_VERSION=2;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <PrecompiledHeader>Use</PrecompiledHeader>
+      <PreprocessorDefinitions>PSAPI_VERSION=2;%(PreprocessorDefinitions);__WINPHONE__=1</PreprocessorDefinitions>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
       <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
       <AdditionalIncludeDirectories>$(ProjectDir);$(IntermediateOutputPath);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <CompileAsWinRT>true</CompileAsWinRT>
+      <CompileAsWinRT>false</CompileAsWinRT>
     </ClCompile>
     <Link>
       <AdditionalDependencies>d3d11.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -118,13 +130,27 @@
     </Reference>
   </ItemGroup>
   <ItemGroup>
-    <Image Include="Assets\ApplicationIcon.png" />
-    <Image Include="Assets\AlignmentGrid.png" />
-    <Image Include="Assets\Tiles\FlipCycleTileLarge.png" />
-    <Image Include="Assets\Tiles\FlipCycleTileMedium.png" />
-    <Image Include="Assets\Tiles\FlipCycleTileSmall.png" />
-    <Image Include="Assets\Tiles\IconicTileMediumLarge.png" />
-    <Image Include="Assets\Tiles\IconicTileSmall.png" />
+    <Image Include="Assets\ApplicationIcon.png">
+      <DeploymentContent>true</DeploymentContent>
+    </Image>
+    <Image Include="Assets\AlignmentGrid.png">
+      <DeploymentContent>true</DeploymentContent>
+    </Image>
+    <Image Include="Assets\Tiles\FlipCycleTileLarge.png">
+      <DeploymentContent>true</DeploymentContent>
+    </Image>
+    <Image Include="Assets\Tiles\FlipCycleTileMedium.png">
+      <DeploymentContent>true</DeploymentContent>
+    </Image>
+    <Image Include="Assets\Tiles\FlipCycleTileSmall.png">
+      <DeploymentContent>true</DeploymentContent>
+    </Image>
+    <Image Include="Assets\Tiles\IconicTileMediumLarge.png">
+      <DeploymentContent>true</DeploymentContent>
+    </Image>
+    <Image Include="Assets\Tiles\IconicTileSmall.png">
+      <DeploymentContent>true</DeploymentContent>
+    </Image>
   </ItemGroup>
   <ItemGroup>
     <Xml Include="WMAppManifest.xml">
@@ -154,20 +180,6 @@
     <ClInclude Include="..\global.h" />
     <ClInclude Include="..\input.h" />
     <ClInclude Include="..\itemmenu.h" />
-    <ClInclude Include="..\libmad\bit.h" />
-    <ClInclude Include="..\libmad\decoder.h" />
-    <ClInclude Include="..\libmad\fixed.h" />
-    <ClInclude Include="..\libmad\frame.h" />
-    <ClInclude Include="..\libmad\huffman.h" />
-    <ClInclude Include="..\libmad\layer12.h" />
-    <ClInclude Include="..\libmad\layer3.h" />
-    <ClInclude Include="..\libmad\libmad_config.h" />
-    <ClInclude Include="..\libmad\libmad_global.h" />
-    <ClInclude Include="..\libmad\mad.h" />
-    <ClInclude Include="..\libmad\music_mad.h" />
-    <ClInclude Include="..\libmad\stream.h" />
-    <ClInclude Include="..\libmad\synth.h" />
-    <ClInclude Include="..\libmad\timer.h" />
     <ClInclude Include="..\magicmenu.h" />
     <ClInclude Include="..\main.h" />
     <ClInclude Include="..\map.h" />
@@ -206,17 +218,6 @@
     <ClCompile Include="..\global.c" />
     <ClCompile Include="..\input.c" />
     <ClCompile Include="..\itemmenu.c" />
-    <ClCompile Include="..\libmad\bit.c" />
-    <ClCompile Include="..\libmad\decoder.c" />
-    <ClCompile Include="..\libmad\fixed.c" />
-    <ClCompile Include="..\libmad\frame.c" />
-    <ClCompile Include="..\libmad\huffman.c" />
-    <ClCompile Include="..\libmad\layer12.c" />
-    <ClCompile Include="..\libmad\layer3.c" />
-    <ClCompile Include="..\libmad\music_mad.c" />
-    <ClCompile Include="..\libmad\stream.c" />
-    <ClCompile Include="..\libmad\synth.c" />
-    <ClCompile Include="..\libmad\timer.c" />
     <ClCompile Include="..\magicmenu.c" />
     <ClCompile Include="..\main.c" />
     <ClCompile Include="..\map.c" />
@@ -239,20 +240,84 @@
     <ClCompile Include="SDL2\src\main\winrt\SDL_winrt_main_NonXAML.cpp">
       <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</CompileAsWinRT>
       <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</CompileAsWinRT>
+      <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</CompileAsWinRT>
+      <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</CompileAsWinRT>
+    </ClCompile>
+    <ClCompile Include="WinPhoneUtil.cpp">
+      <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</CompileAsWinRT>
+      <CompileAsWinRT Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</CompileAsWinRT>
     </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="..\libmad\D.dat" />
-    <None Include="..\libmad\imdct_s.dat" />
-    <None Include="..\libmad\qc_table.dat" />
-    <None Include="..\libmad\rq_table.dat" />
-    <None Include="..\libmad\sf_table.dat" />
   </ItemGroup>
   <ItemGroup>
     <ProjectReference Include="SDL2\VisualC-WinRT\WinPhone80_VS2012\SDL-WinPhone80.vcxproj">
       <Project>{33048af1-031a-4ce6-b61e-fad2db832e9e}</Project>
     </ProjectReference>
   </ItemGroup>
+  <ItemGroup>
+    <_CustomResource Include="Assets\Data\**\*">
+      <Link>Assets\Data\%(RecursiveDir)%(FileName)%(Extension)</Link>
+      <DeploymentContent>true</DeploymentContent>
+    </_CustomResource>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Assets\Data\ABC.MKF">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="Assets\Data\BALL.MKF">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="Assets\Data\DATA.MKF">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="Assets\Data\F.MKF">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="Assets\Data\FBP.MKF">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="Assets\Data\FIRE.MKF">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="Assets\Data\GOP.MKF">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="Assets\Data\M.MSG">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="Assets\Data\MAP.MKF">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="Assets\Data\MGO.MKF">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="Assets\Data\MUS.MKF">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="Assets\Data\PAT.MKF">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="Assets\Data\RGM.MKF">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="Assets\Data\RNG.MKF">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="Assets\Data\SSS.MKF">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="Assets\Data\VOC.MKF">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="Assets\Data\WOR16.ASC">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="Assets\Data\wor16.fon">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+    <None Include="Assets\Data\WORD.DAT">
+      <DeploymentContent>true</DeploymentContent>
+    </None>
+  </ItemGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <Import Project="$(MSBuildExtensionsPath)\Microsoft\WindowsPhone\v$(TargetPlatformVersion)\Microsoft.Cpp.WindowsPhone.$(TargetPlatformVersion).targets" />
   <ImportGroup Label="ExtensionTargets">

+ 55 - 87
winphone/SDLPal.vcxproj.filters

@@ -8,8 +8,8 @@
     <Filter Include="adplug">
       <UniqueIdentifier>{e0154447-2329-47d7-8713-a66a8cc6b0c8}</UniqueIdentifier>
     </Filter>
-    <Filter Include="libmad">
-      <UniqueIdentifier>{d7305349-86de-434f-93f2-ee998fc710e6}</UniqueIdentifier>
+    <Filter Include="Assets\Data">
+      <UniqueIdentifier>{b92e17f5-b5dd-48b2-924f-59695abbed55}</UniqueIdentifier>
     </Filter>
   </ItemGroup>
   <ItemGroup>
@@ -101,48 +101,6 @@
     <ClInclude Include="..\adplug\surroundopl.h">
       <Filter>adplug</Filter>
     </ClInclude>
-    <ClInclude Include="..\libmad\bit.h">
-      <Filter>libmad</Filter>
-    </ClInclude>
-    <ClInclude Include="..\libmad\decoder.h">
-      <Filter>libmad</Filter>
-    </ClInclude>
-    <ClInclude Include="..\libmad\fixed.h">
-      <Filter>libmad</Filter>
-    </ClInclude>
-    <ClInclude Include="..\libmad\frame.h">
-      <Filter>libmad</Filter>
-    </ClInclude>
-    <ClInclude Include="..\libmad\huffman.h">
-      <Filter>libmad</Filter>
-    </ClInclude>
-    <ClInclude Include="..\libmad\layer3.h">
-      <Filter>libmad</Filter>
-    </ClInclude>
-    <ClInclude Include="..\libmad\layer12.h">
-      <Filter>libmad</Filter>
-    </ClInclude>
-    <ClInclude Include="..\libmad\libmad_config.h">
-      <Filter>libmad</Filter>
-    </ClInclude>
-    <ClInclude Include="..\libmad\libmad_global.h">
-      <Filter>libmad</Filter>
-    </ClInclude>
-    <ClInclude Include="..\libmad\mad.h">
-      <Filter>libmad</Filter>
-    </ClInclude>
-    <ClInclude Include="..\libmad\music_mad.h">
-      <Filter>libmad</Filter>
-    </ClInclude>
-    <ClInclude Include="..\libmad\stream.h">
-      <Filter>libmad</Filter>
-    </ClInclude>
-    <ClInclude Include="..\libmad\synth.h">
-      <Filter>libmad</Filter>
-    </ClInclude>
-    <ClInclude Include="..\libmad\timer.h">
-      <Filter>libmad</Filter>
-    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="..\battle.c" />
@@ -200,56 +158,66 @@
     <ClCompile Include="..\adplug\surroundopl.cpp">
       <Filter>adplug</Filter>
     </ClCompile>
-    <ClCompile Include="..\libmad\bit.c">
-      <Filter>libmad</Filter>
-    </ClCompile>
-    <ClCompile Include="..\libmad\decoder.c">
-      <Filter>libmad</Filter>
-    </ClCompile>
-    <ClCompile Include="..\libmad\fixed.c">
-      <Filter>libmad</Filter>
-    </ClCompile>
-    <ClCompile Include="..\libmad\frame.c">
-      <Filter>libmad</Filter>
-    </ClCompile>
-    <ClCompile Include="..\libmad\huffman.c">
-      <Filter>libmad</Filter>
-    </ClCompile>
-    <ClCompile Include="..\libmad\layer3.c">
-      <Filter>libmad</Filter>
-    </ClCompile>
-    <ClCompile Include="..\libmad\layer12.c">
-      <Filter>libmad</Filter>
-    </ClCompile>
-    <ClCompile Include="..\libmad\music_mad.c">
-      <Filter>libmad</Filter>
-    </ClCompile>
-    <ClCompile Include="..\libmad\stream.c">
-      <Filter>libmad</Filter>
-    </ClCompile>
-    <ClCompile Include="..\libmad\synth.c">
-      <Filter>libmad</Filter>
-    </ClCompile>
-    <ClCompile Include="..\libmad\timer.c">
-      <Filter>libmad</Filter>
-    </ClCompile>
     <ClCompile Include="SDL2\src\main\winrt\SDL_winrt_main_NonXAML.cpp" />
+    <ClCompile Include="WinPhoneUtil.cpp" />
   </ItemGroup>
   <ItemGroup>
-    <None Include="..\libmad\D.dat">
-      <Filter>libmad</Filter>
+    <None Include="Assets\Data\DATA.MKF">
+      <Filter>Assets\Data</Filter>
+    </None>
+    <None Include="Assets\Data\ABC.MKF">
+      <Filter>Assets\Data</Filter>
+    </None>
+    <None Include="Assets\Data\BALL.MKF">
+      <Filter>Assets\Data</Filter>
+    </None>
+    <None Include="Assets\Data\F.MKF">
+      <Filter>Assets\Data</Filter>
+    </None>
+    <None Include="Assets\Data\FBP.MKF">
+      <Filter>Assets\Data</Filter>
+    </None>
+    <None Include="Assets\Data\FIRE.MKF">
+      <Filter>Assets\Data</Filter>
+    </None>
+    <None Include="Assets\Data\GOP.MKF">
+      <Filter>Assets\Data</Filter>
+    </None>
+    <None Include="Assets\Data\MAP.MKF">
+      <Filter>Assets\Data</Filter>
+    </None>
+    <None Include="Assets\Data\M.MSG">
+      <Filter>Assets\Data</Filter>
+    </None>
+    <None Include="Assets\Data\MGO.MKF">
+      <Filter>Assets\Data</Filter>
+    </None>
+    <None Include="Assets\Data\MUS.MKF">
+      <Filter>Assets\Data</Filter>
+    </None>
+    <None Include="Assets\Data\PAT.MKF">
+      <Filter>Assets\Data</Filter>
+    </None>
+    <None Include="Assets\Data\RGM.MKF">
+      <Filter>Assets\Data</Filter>
+    </None>
+    <None Include="Assets\Data\RNG.MKF">
+      <Filter>Assets\Data</Filter>
+    </None>
+    <None Include="Assets\Data\VOC.MKF">
+      <Filter>Assets\Data</Filter>
     </None>
-    <None Include="..\libmad\imdct_s.dat">
-      <Filter>libmad</Filter>
+    <None Include="Assets\Data\SSS.MKF">
+      <Filter>Assets\Data</Filter>
     </None>
-    <None Include="..\libmad\qc_table.dat">
-      <Filter>libmad</Filter>
+    <None Include="Assets\Data\WOR16.ASC">
+      <Filter>Assets\Data</Filter>
     </None>
-    <None Include="..\libmad\rq_table.dat">
-      <Filter>libmad</Filter>
+    <None Include="Assets\Data\wor16.fon">
+      <Filter>Assets\Data</Filter>
     </None>
-    <None Include="..\libmad\sf_table.dat">
-      <Filter>libmad</Filter>
+    <None Include="Assets\Data\WORD.DAT">
+      <Filter>Assets\Data</Filter>
     </None>
   </ItemGroup>
 </Project>

+ 44 - 0
winphone/WinPhoneUtil.cpp

@@ -0,0 +1,44 @@
+#include <wrl.h>
+#include <stdio.h>
+
+static const char *
+GetRootPath()
+{
+	static char buf[1024] = "";
+	if (buf[0] == '\0')
+	{
+		Platform::String^ localfolder = Windows::Storage::ApplicationData::Current->LocalFolder->Path;
+		const char16 *begin = localfolder->Begin();
+		WideCharToMultiByte(CP_ACP, 0, begin, -1, buf, 256, NULL, FALSE);
+	}
+	return buf;
+}
+
+static const char *
+GetInstallPath()
+{
+	static char buf[1024] = "";
+	if (buf[0] == '\0')
+	{
+		Platform::String^ installfolder = Windows::ApplicationModel::Package::Current->InstalledLocation->Path;
+		const char16 *begin = installfolder->Begin();
+		WideCharToMultiByte(CP_ACP, 0, begin, -1, buf, 256, NULL, FALSE);
+	}
+	return buf;
+}
+
+extern "C" FILE *
+MY_fopen(const char *path, const char *mode)
+{
+	const char *p = GetRootPath();
+	char buf[1024];
+	_snprintf_s(buf, 1024, "%s\\%s", p, path);
+	FILE *fp = _fsopen(buf, mode, 0x40);
+	if (fp == NULL)
+	{
+		p = GetInstallPath();
+		_snprintf_s(buf, 1024, "%s\\%s", p, path);
+		fp = _fsopen(buf, mode, 0x40);
+	}
+	return fp;
+}