Merge remote-tracking branch 'origin/master' into pandora

This commit is contained in:
ptitSeb 2014-08-18 21:15:11 +02:00
commit 8ebf06e0da
32 changed files with 1565 additions and 88 deletions

View File

@ -141,7 +141,9 @@ bool CHDDisc::TryOpen(wchar* file)
if (total_frames!=549300 || tracks.size()<3)
{
printf("WARNING: chd: Total frames is wrong: %d frames in %d tracks\n",total_frames,tracks.size());
#ifndef NOT_REICAST
msgboxf("This is an improper dump!",MBX_ICONEXCLAMATION);
#endif
return false;
}

View File

@ -25,8 +25,12 @@ u8 q_subchannel[96];
void PatchRegion_0(u8* sector,int size)
{
#ifndef NOT_REICAST
if (settings.imgread.PatchRegion==0)
return;
#else
return;
#endif
u8* usersect=sector;
@ -41,8 +45,12 @@ void PatchRegion_0(u8* sector,int size)
}
void PatchRegion_6(u8* sector,int size)
{
#ifndef NOT_REICAST
if (settings.imgread.PatchRegion==0)
return;
#else
return;
#endif
u8* usersect=sector;
@ -121,18 +129,29 @@ bool ConvertSector(u8* in_buff , u8* out_buff , int from , int to,int sector)
return true;
}
Disc* OpenDisc(wchar* fn)
{
Disc* rv;
for (int i=0;drivers[i] && !(rv=drivers[i](fn));i++) ;
return rv;
}
bool InitDrive_(wchar* fn)
{
TermDrive();
//try all drivers
for (int i=0;drivers[i] && !(disc=drivers[i](fn));i++) ;
disc = OpenDisc(fn);
if (disc!=0)
{
printf("gdrom: Opened image \"%s\"\n",fn);
NullDriveDiscType=Busy;
#ifndef NOT_REICAST
libCore_gdrom_disc_change();
#endif
// Sleep(400); //busy for a bit // what, really ?
return true;
}
@ -144,6 +163,7 @@ bool InitDrive_(wchar* fn)
return false;
}
#ifndef NOT_REICAST
bool InitDrive(u32 fileflags)
{
if (settings.imgread.LoadDefaultImage)
@ -185,11 +205,11 @@ bool InitDrive(u32 fileflags)
if (!InitDrive_(fn))
{
//msgboxf("Selected image failed to load",MBX_ICONERROR);
NullDriveDiscType=NoDisk;
gd_setdisc();
sns_asc=0x29;
sns_ascq=0x00;
sns_key=0x6;
NullDriveDiscType=NoDisk;
gd_setdisc();
sns_asc=0x29;
sns_ascq=0x00;
sns_key=0x6;
return true;
}
else
@ -257,6 +277,7 @@ bool DiscSwap(u32 fileflags)
return true;
}
}
#endif
void TermDrive()
{

View File

@ -240,7 +240,7 @@ struct Disc
{
u32 fmt=tracks[i].CTRL==4?2048:2352;
char fsto[1024];
sprintf(fsto,"%s%s%d.img",path.c_str(),"track",i);
sprintf(fsto,"%s%s%d.img",path.c_str(),".track",i);
FILE* fo=fopen(fsto,"wb");
@ -257,6 +257,8 @@ struct Disc
extern Disc* disc;
Disc* OpenDisc(wchar* fn);
struct RawTrackFile : TrackFile
{
FILE* file;

20
gdtool/gdtool.sln Normal file
View File

@ -0,0 +1,20 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gdtool", "gdtool.vcxproj", "{D56D49D9-3FA6-4463-8C96-925956E21FB0}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{D56D49D9-3FA6-4463-8C96-925956E21FB0}.Debug|Win32.ActiveCfg = Debug|Win32
{D56D49D9-3FA6-4463-8C96-925956E21FB0}.Debug|Win32.Build.0 = Debug|Win32
{D56D49D9-3FA6-4463-8C96-925956E21FB0}.Release|Win32.ActiveCfg = Release|Win32
{D56D49D9-3FA6-4463-8C96-925956E21FB0}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

140
gdtool/gdtool.vcxproj Normal file
View File

@ -0,0 +1,140 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{D56D49D9-3FA6-4463-8C96-925956E21FB0}</ProjectGuid>
<RootNamespace>gdtool</RootNamespace>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>$(ProjectDir)..\core\;$(ProjectDir)..\core\deps\;$(ProjectDir)src\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>NOT_REICAST;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<AdditionalIncludeDirectories>$(ProjectDir)..\core\;$(ProjectDir)..\core\deps\;$(ProjectDir)src\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>NOT_REICAST;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\core\deps\chdpsr\cdipsr.cpp" />
<ClCompile Include="..\core\deps\chdr\chdr.cpp" />
<ClCompile Include="..\core\deps\crypto\md5.cpp" />
<ClCompile Include="..\core\deps\crypto\sha1.cpp" />
<ClCompile Include="..\core\deps\libpng\png.c" />
<ClCompile Include="..\core\deps\libpng\pngerror.c" />
<ClCompile Include="..\core\deps\libpng\pngget.c" />
<ClCompile Include="..\core\deps\libpng\pngmem.c" />
<ClCompile Include="..\core\deps\libpng\pngpread.c" />
<ClCompile Include="..\core\deps\libpng\pngread.c" />
<ClCompile Include="..\core\deps\libpng\pngrio.c" />
<ClCompile Include="..\core\deps\libpng\pngrtran.c" />
<ClCompile Include="..\core\deps\libpng\pngrutil.c" />
<ClCompile Include="..\core\deps\libpng\pngset.c" />
<ClCompile Include="..\core\deps\libpng\pngtrans.c" />
<ClCompile Include="..\core\deps\libpng\pngwio.c" />
<ClCompile Include="..\core\deps\libpng\pngwrite.c" />
<ClCompile Include="..\core\deps\libpng\pngwtran.c" />
<ClCompile Include="..\core\deps\libpng\pngwutil.c" />
<ClCompile Include="..\core\deps\zlib\adler32.c" />
<ClCompile Include="..\core\deps\zlib\compress.c" />
<ClCompile Include="..\core\deps\zlib\crc32.c" />
<ClCompile Include="..\core\deps\zlib\deflate.c" />
<ClCompile Include="..\core\deps\zlib\infback.c" />
<ClCompile Include="..\core\deps\zlib\inffast.c" />
<ClCompile Include="..\core\deps\zlib\inflate.c" />
<ClCompile Include="..\core\deps\zlib\inftrees.c" />
<ClCompile Include="..\core\deps\zlib\trees.c" />
<ClCompile Include="..\core\deps\zlib\uncompr.c" />
<ClCompile Include="..\core\deps\zlib\zutil.c" />
<ClCompile Include="..\core\imgread\cdi.cpp" />
<ClCompile Include="..\core\imgread\chd.cpp" />
<ClCompile Include="..\core\imgread\common.cpp" />
<ClCompile Include="..\core\imgread\gdi.cpp" />
<ClCompile Include="..\core\imgread\ImgReader.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\core\imgread\ioctl.cpp" />
<ClCompile Include="src\cdromfs.cpp" />
<ClCompile Include="src\main.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\core\deps\chdpsr\cdipsr.h" />
<ClInclude Include="..\core\deps\chdr\chd.h" />
<ClInclude Include="..\core\deps\chdr\coretypes.h" />
<ClInclude Include="..\core\deps\crypto\md5.h" />
<ClInclude Include="..\core\deps\crypto\sha1.h" />
<ClInclude Include="..\core\deps\libpng\config.h" />
<ClInclude Include="..\core\deps\libpng\png.h" />
<ClInclude Include="..\core\deps\libpng\pngconf.h" />
<ClInclude Include="..\core\deps\libpng\pngpriv.h" />
<ClInclude Include="..\core\deps\zlib\crc32.h" />
<ClInclude Include="..\core\deps\zlib\deflate.h" />
<ClInclude Include="..\core\deps\zlib\inffast.h" />
<ClInclude Include="..\core\deps\zlib\inffixed.h" />
<ClInclude Include="..\core\deps\zlib\inflate.h" />
<ClInclude Include="..\core\deps\zlib\inftrees.h" />
<ClInclude Include="..\core\deps\zlib\trees.h" />
<ClInclude Include="..\core\deps\zlib\zconf.h" />
<ClInclude Include="..\core\deps\zlib\zconf.in.h" />
<ClInclude Include="..\core\deps\zlib\zlib.h" />
<ClInclude Include="..\core\deps\zlib\zutil.h" />
<ClInclude Include="..\core\imgread\common.h" />
<ClInclude Include="..\core\imgread\gd_driver.h" />
<ClInclude Include="..\core\imgread\ImgReader.h" />
<ClInclude Include="..\core\imgread\SCSIDEFS.H" />
<ClInclude Include="src\cdromfs.h" />
<ClInclude Include="src\cdromfs_imp.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -0,0 +1,225 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ClCompile Include="..\core\imgread\cdi.cpp">
<Filter>imgread</Filter>
</ClCompile>
<ClCompile Include="..\core\imgread\chd.cpp">
<Filter>imgread</Filter>
</ClCompile>
<ClCompile Include="..\core\imgread\common.cpp">
<Filter>imgread</Filter>
</ClCompile>
<ClCompile Include="..\core\imgread\gdi.cpp">
<Filter>imgread</Filter>
</ClCompile>
<ClCompile Include="..\core\imgread\ImgReader.cpp">
<Filter>imgread</Filter>
</ClCompile>
<ClCompile Include="..\core\imgread\ioctl.cpp">
<Filter>imgread</Filter>
</ClCompile>
<ClCompile Include="..\core\deps\chdpsr\cdipsr.cpp">
<Filter>deps\chdpsr</Filter>
</ClCompile>
<ClCompile Include="..\core\deps\chdr\chdr.cpp">
<Filter>deps\chdr</Filter>
</ClCompile>
<ClCompile Include="..\core\deps\libpng\png.c">
<Filter>deps\libpng</Filter>
</ClCompile>
<ClCompile Include="..\core\deps\libpng\pngerror.c">
<Filter>deps\libpng</Filter>
</ClCompile>
<ClCompile Include="..\core\deps\libpng\pngget.c">
<Filter>deps\libpng</Filter>
</ClCompile>
<ClCompile Include="..\core\deps\libpng\pngmem.c">
<Filter>deps\libpng</Filter>
</ClCompile>
<ClCompile Include="..\core\deps\libpng\pngpread.c">
<Filter>deps\libpng</Filter>
</ClCompile>
<ClCompile Include="..\core\deps\libpng\pngread.c">
<Filter>deps\libpng</Filter>
</ClCompile>
<ClCompile Include="..\core\deps\libpng\pngrio.c">
<Filter>deps\libpng</Filter>
</ClCompile>
<ClCompile Include="..\core\deps\libpng\pngrtran.c">
<Filter>deps\libpng</Filter>
</ClCompile>
<ClCompile Include="..\core\deps\libpng\pngrutil.c">
<Filter>deps\libpng</Filter>
</ClCompile>
<ClCompile Include="..\core\deps\libpng\pngset.c">
<Filter>deps\libpng</Filter>
</ClCompile>
<ClCompile Include="..\core\deps\libpng\pngtrans.c">
<Filter>deps\libpng</Filter>
</ClCompile>
<ClCompile Include="..\core\deps\libpng\pngwio.c">
<Filter>deps\libpng</Filter>
</ClCompile>
<ClCompile Include="..\core\deps\libpng\pngwrite.c">
<Filter>deps\libpng</Filter>
</ClCompile>
<ClCompile Include="..\core\deps\libpng\pngwtran.c">
<Filter>deps\libpng</Filter>
</ClCompile>
<ClCompile Include="..\core\deps\libpng\pngwutil.c">
<Filter>deps\libpng</Filter>
</ClCompile>
<ClCompile Include="..\core\deps\zlib\adler32.c">
<Filter>deps\zlib</Filter>
</ClCompile>
<ClCompile Include="..\core\deps\zlib\compress.c">
<Filter>deps\zlib</Filter>
</ClCompile>
<ClCompile Include="..\core\deps\zlib\crc32.c">
<Filter>deps\zlib</Filter>
</ClCompile>
<ClCompile Include="..\core\deps\zlib\deflate.c">
<Filter>deps\zlib</Filter>
</ClCompile>
<ClCompile Include="..\core\deps\zlib\infback.c">
<Filter>deps\zlib</Filter>
</ClCompile>
<ClCompile Include="..\core\deps\zlib\inffast.c">
<Filter>deps\zlib</Filter>
</ClCompile>
<ClCompile Include="..\core\deps\zlib\inflate.c">
<Filter>deps\zlib</Filter>
</ClCompile>
<ClCompile Include="..\core\deps\zlib\inftrees.c">
<Filter>deps\zlib</Filter>
</ClCompile>
<ClCompile Include="..\core\deps\zlib\trees.c">
<Filter>deps\zlib</Filter>
</ClCompile>
<ClCompile Include="..\core\deps\zlib\uncompr.c">
<Filter>deps\zlib</Filter>
</ClCompile>
<ClCompile Include="..\core\deps\zlib\zutil.c">
<Filter>deps\zlib</Filter>
</ClCompile>
<ClCompile Include="..\core\deps\crypto\md5.cpp">
<Filter>deps\crypto</Filter>
</ClCompile>
<ClCompile Include="..\core\deps\crypto\sha1.cpp">
<Filter>deps\crypto</Filter>
</ClCompile>
<ClCompile Include="src\main.cpp">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\cdromfs.cpp">
<Filter>src</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\core\imgread\SCSIDEFS.H">
<Filter>imgread</Filter>
</ClInclude>
<ClInclude Include="..\core\imgread\common.h">
<Filter>imgread</Filter>
</ClInclude>
<ClInclude Include="..\core\imgread\gd_driver.h">
<Filter>imgread</Filter>
</ClInclude>
<ClInclude Include="..\core\imgread\ImgReader.h">
<Filter>imgread</Filter>
</ClInclude>
<ClInclude Include="..\core\deps\chdpsr\cdipsr.h">
<Filter>deps\chdpsr</Filter>
</ClInclude>
<ClInclude Include="..\core\deps\chdr\chd.h">
<Filter>deps\chdr</Filter>
</ClInclude>
<ClInclude Include="..\core\deps\chdr\coretypes.h">
<Filter>deps\chdr</Filter>
</ClInclude>
<ClInclude Include="..\core\deps\libpng\config.h">
<Filter>deps\libpng</Filter>
</ClInclude>
<ClInclude Include="..\core\deps\libpng\png.h">
<Filter>deps\libpng</Filter>
</ClInclude>
<ClInclude Include="..\core\deps\libpng\pngconf.h">
<Filter>deps\libpng</Filter>
</ClInclude>
<ClInclude Include="..\core\deps\libpng\pngpriv.h">
<Filter>deps\libpng</Filter>
</ClInclude>
<ClInclude Include="..\core\deps\zlib\crc32.h">
<Filter>deps\zlib</Filter>
</ClInclude>
<ClInclude Include="..\core\deps\zlib\deflate.h">
<Filter>deps\zlib</Filter>
</ClInclude>
<ClInclude Include="..\core\deps\zlib\inffast.h">
<Filter>deps\zlib</Filter>
</ClInclude>
<ClInclude Include="..\core\deps\zlib\inffixed.h">
<Filter>deps\zlib</Filter>
</ClInclude>
<ClInclude Include="..\core\deps\zlib\inflate.h">
<Filter>deps\zlib</Filter>
</ClInclude>
<ClInclude Include="..\core\deps\zlib\inftrees.h">
<Filter>deps\zlib</Filter>
</ClInclude>
<ClInclude Include="..\core\deps\zlib\trees.h">
<Filter>deps\zlib</Filter>
</ClInclude>
<ClInclude Include="..\core\deps\zlib\zconf.h">
<Filter>deps\zlib</Filter>
</ClInclude>
<ClInclude Include="..\core\deps\zlib\zconf.in.h">
<Filter>deps\zlib</Filter>
</ClInclude>
<ClInclude Include="..\core\deps\zlib\zlib.h">
<Filter>deps\zlib</Filter>
</ClInclude>
<ClInclude Include="..\core\deps\zlib\zutil.h">
<Filter>deps\zlib</Filter>
</ClInclude>
<ClInclude Include="..\core\deps\crypto\md5.h">
<Filter>deps\crypto</Filter>
</ClInclude>
<ClInclude Include="..\core\deps\crypto\sha1.h">
<Filter>deps\crypto</Filter>
</ClInclude>
<ClInclude Include="src\cdromfs.h">
<Filter>src</Filter>
</ClInclude>
<ClInclude Include="src\cdromfs_imp.h">
<Filter>src</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<Filter Include="imgread">
<UniqueIdentifier>{c4ea89a6-8345-4dfd-a0c0-13353b12ba06}</UniqueIdentifier>
</Filter>
<Filter Include="src">
<UniqueIdentifier>{03cf0701-ea11-401c-aed7-53fa207cc55f}</UniqueIdentifier>
</Filter>
<Filter Include="deps">
<UniqueIdentifier>{c7643803-9308-49d9-a780-30671edc007c}</UniqueIdentifier>
</Filter>
<Filter Include="deps\chdpsr">
<UniqueIdentifier>{bac3e17f-8d1c-4aca-99cc-5735b171ca60}</UniqueIdentifier>
</Filter>
<Filter Include="deps\chdr">
<UniqueIdentifier>{d369171a-5aed-4b64-b4ed-f76525f508ad}</UniqueIdentifier>
</Filter>
<Filter Include="deps\libpng">
<UniqueIdentifier>{51b1b4a5-1788-411d-b879-4ccd78be8a35}</UniqueIdentifier>
</Filter>
<Filter Include="deps\zlib">
<UniqueIdentifier>{777115e4-4c86-4a7e-92e4-ebe90918e09e}</UniqueIdentifier>
</Filter>
<Filter Include="deps\crypto">
<UniqueIdentifier>{a78ba9fb-70ba-4319-89e7-926abca0794c}</UniqueIdentifier>
</Filter>
</ItemGroup>
</Project>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LocalDebuggerCommandArguments>c:\ika.chd</LocalDebuggerCommandArguments>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup>
</Project>

573
gdtool/src/cdromfs.cpp Normal file
View File

@ -0,0 +1,573 @@
/*
hacked from http://collaboration.cmc.ec.gc.ca/science/rpn/biblio/ddj/Website/articles/DDJ/1992/9212/9212i/9212i.htm
Is this bsd + adv license?
*/
#include "types.h"
#include "cdromfs_imp.h"
/* cdromcat -- A simple program to interpret the CDROM filesystem, and return.
* the contents of the file (directories are formatted and printed, files are
* returned untranslated). */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "cdromfs.h"
/* volume descriptor types -- type field of each descriptor */
#define VD_PRIMARY 1
#define VD_END 255
/* ISO 9660 primary descriptor */
#define ISODCL(from, to) (to - from + 1)
#define ISO_STANDARD_ID "CD001"
struct iso_primary_descriptor {
char type [ISODCL ( 1, 1)];
char id [ISODCL ( 2, 6)];
char version [ISODCL ( 7, 7)];
char reserved1 [ISODCL ( 8, 8)];
char system_id [ISODCL ( 9, 40)]; /* achars */
char volume_id [ISODCL ( 41, 72)]; /* dchars */
char reserved2 [ISODCL ( 73, 80)];
char volume_space_size [ISODCL ( 81, 88)];
char reserved3 [ISODCL ( 89, 120)];
char volume_set_size [ISODCL (121, 124)];
char volume_sequence_number [ISODCL (125, 128)];
char logical_block_size [ISODCL (129, 132)];
char path_table_size [ISODCL (133, 140)];
char type_1_path_table [ISODCL (141, 144)];
char opt_type_1_path_table [ISODCL (145, 148)];
char type_m_path_table [ISODCL (149, 152)];
char opt_type_m_path_table [ISODCL (153, 156)];
char root_directory_record [ISODCL (157, 190)];
char volume_set_id [ISODCL (191, 318)]; /* dchars */
char publisher_id [ISODCL (319, 446)]; /* achars */
char preparer_id [ISODCL (447, 574)]; /* achars */
char application_id [ISODCL (575, 702)]; /* achars */
char copyright_file_id [ISODCL (703, 739)]; /* dchars */
char abstract_file_id [ISODCL (740, 776)]; /* dchars */
char bibliographic_file_id [ISODCL (777, 813)]; /* dchars */
char creation_date [ISODCL (814, 830)];
char modification_date [ISODCL (831, 847)];
char expiration_date [ISODCL (848, 864)];
char effective_date [ISODCL (865, 881)];
char file_structure_version [ISODCL (882, 882)];
char reserved4 [ISODCL (883, 883)];
char application_data [ISODCL (884, 1395)];
char reserved5 [ISODCL (1396, 2048)];
};
/* High Sierra format primary descriptor */
#define HSFDCL(from, to) (to - from + 1)
#define HSF_STANDARD_ID "CDROM"
struct hsf_primary_descriptor {
char volume_lbn [HSFDCL ( 1, 8)];
char type [HSFDCL ( 9, 9)];
char id [HSFDCL ( 10, 14)];
char version [HSFDCL ( 15, 15)];
char reserved1 [HSFDCL ( 16, 16)];
char system_id [HSFDCL ( 17, 48)]; /* achars */
char volume_id [HSFDCL ( 49, 80)]; /* dchars */
char reserved2 [HSFDCL ( 81, 88)];
char volume_space_size [HSFDCL ( 89, 96)];
char reserved3 [HSFDCL ( 97, 128)];
char volume_set_size [HSFDCL (129, 132)];
char volume_sequence_number [HSFDCL (133, 136)];
char logical_block_size [HSFDCL (137, 140)];
char path_table_size [HSFDCL (141, 148)];
char manditory_path_table_lsb [HSFDCL (149, 152)];
char opt_path_table_lsb_1 [HSFDCL (153, 156)];
char opt_path_table_lsb_2 [HSFDCL (157, 160)];
char opt_path_table_lsb_3 [HSFDCL (161, 164)];
char manditory_path_table_msb [HSFDCL (165, 168)];
char opt_path_table_msb_1 [HSFDCL (169, 172)];
char opt_path_table_msb_2 [HSFDCL (173, 176)];
char opt_path_table_msb_3 [HSFDCL (177, 180)];
char root_directory_record [HSFDCL (181, 214)];
char volume_set_id [HSFDCL (215, 342)]; /* dchars */
char publisher_id [HSFDCL (343, 470)]; /* achars */
char preparer_id [HSFDCL (471, 598)]; /* achars */
char application_id [HSFDCL (599, 726)]; /* achars */
char copyright_file_id [HSFDCL (727, 758)]; /* dchars */
char abstract_file_id [HSFDCL (759, 790)]; /* dchars */
char creation_date [HSFDCL (791, 806)];
char modification_date [HSFDCL (807, 822)];
char expiration_date [HSFDCL (823, 838)];
char effective_date [HSFDCL (839, 854)];
char file_structure_version [HSFDCL (855, 855)];
char reserved4 [HSFDCL (856, 856)];
char application_data [HSFDCL (857, 1368)];
char reserved5 [HSFDCL (1369, 2048)];
};
/* CDROM file system directory entries */
/* file flags: */
#define CD_VISABLE 0x01 /* file name is hidden or visable to user */
#define CD_DIRECTORY 0x02 /* file is a directory and contains entries */
#define CD_ASSOCIATED 0x04/* file is opaque to filesystem, visable
to system implementation */
#define CD_EAHSFRECORD 0x04 /* file has HSF extended attribute record
fmt */
#define CD_PROTECTION 0x04 /* used extended attributes for protection */
#define CD_ANOTHEREXTNT 0x80 /* file has at least one more extent */
struct iso_directory_record {
char length [ISODCL (1, 1)];
char ext_attr_length [ISODCL (2, 2)];
char extent [ISODCL (3, 10)];
char size [ISODCL (11, 18)];
char date [ISODCL (19, 25)];
char flags [ISODCL (26, 26)];
char file_unit_size [ISODCL (27, 27)];
char interleave [ISODCL (28, 28)];
char volume_sequence_number [ISODCL (29, 32)];
char name_len [ISODCL (33, 33)];
/*char name [0];*/
char* name() { return (char*)this+sizeof(*this); }
};
struct hsf_directory_record {
char length [HSFDCL (1, 1)];
char ext_attr_length [HSFDCL (2, 2)];
char extent [HSFDCL (3, 10)];
char size [HSFDCL (11, 18)];
char date [HSFDCL (19, 24)];
char flags [HSFDCL (25, 25)];
char reserved1 [HSFDCL (26, 26)];
char interleave_size [HSFDCL (27, 27)];
char interleave [HSFDCL (28, 28)];
char volume_sequence_number [HSFDCL (29, 32)];
char name_len [HSFDCL (33, 33)];
/*char name [0];*/
char* name() { return (char*)this+sizeof(*this); }
};
/* per filesystem information */
struct fs {
char *name; /* kind of cdrom filesystem */
cdimage* fd; /* open file descriptor */
int lbs; /* logical block size */
int type; /* which flavor */
};
union fsdir {
struct iso_directory_record iso_dir;
struct hsf_directory_record hsf_dir;
};
/* filesystem directory entry */
struct directent {
union {
struct iso_directory_record iso_dir;
struct hsf_directory_record hsf_dir;
} fsd;
/* actually, name contains name, reserved field, and extensions area */
char name[255 - sizeof(union fsdir)/*32*/];
};
/* filesystem volume descriptors */
union voldesc {
struct iso_primary_descriptor iso_desc;
struct hsf_primary_descriptor hsf_desc;
};
char *iso_astring(char *, int len);
char *cdrom_time(struct cdromtime *, int);
void printdirent(struct directent *, struct fs *);
void printdirents(struct directent *, struct fs *);
void printdirentheader(char *p);
int searchdirent(struct directent *, struct directent *, struct directent *,
struct fs *);
void extractdirent(struct directent *, struct fs *, data_callback* dcb, void* dcbctx);
int lookup(struct directent *, struct directent *, char *, struct fs *);
/* "fetch directory value" */
#define FDV(b, f, t) (((t) == ISO) ? (b)->fsd.iso_dir.##f \
: (b)->fsd.hsf_dir.##f)
/* "fetch primary descriptor value" */
#define FPDV(b, f, t) (((t) == ISO) ? (b)->iso_desc.##f \
: (b)->hsf_desc.##f)
/* ----------- Filesystem primatives ------------------- */
/* Check for the presence of a cdrom filesystem. If present, pass back
* parameters for initialization, otherwise, pass back error. */
int
iscdromfs(struct directent *dp, struct fs *fs, int scan_from) {
char buffer[CDROM_LSECSZ];
union voldesc *vdp = (union voldesc *) buffer;
/* locate at the beginning of the descriptor table */
fs->fd->seek((scan_from + VD_LSN)*CDROM_LSECSZ);
/* walk descriptor table */
for(;;) {
unsigned char type;
/* obtain a descriptor */
fs->fd->read(buffer, sizeof(buffer));
/* determine ISO or HSF format of CDROM */
if (fs->type == 0) {
if (strncmp (vdp->iso_desc.id, ISO_STANDARD_ID,
sizeof(vdp->iso_desc.id)) == 0)
fs->type = ISO;
if (strncmp (vdp->hsf_desc.id, HSF_STANDARD_ID,
sizeof(vdp->hsf_desc.id)) == 0)
fs->type = HSF;
}
/* if determined, obtain root directory entry */
if (fs->type) {
type = ISO_BY(FPDV(vdp, type, fs->type));
if (type == VD_PRIMARY) {
memcpy (
dp,FPDV(vdp, root_directory_record, fs->type),
sizeof (union fsdir));
fs->lbs =
ISO_HWD(FPDV(vdp, logical_block_size, fs->type));
}
}
/* terminating volume */
if (type == VD_END)
break;
}
fs->name = cdromfmtnames[fs->type];
return (fs->type);
}
/* Obtain a "logical", i.e. relative to the directory entries beginning
* (or extent), block from the CDROM. */
int
getblkdirent(struct directent *dp, char *contents, long lbn, struct fs *fs) {
long filesize = ISO_WD(FDV(dp, size, fs->type)),
extent = ISO_WD(FDV(dp, extent, fs->type));
if (lbntob(fs, lbn) > roundup(filesize, fs->lbs))
return (0);
/* perform logical to physical translation */
(void) fs->fd->seek(lbntob(fs, extent + lbn));
/* obtain block */
return (fs->fd->read(contents, fs->lbs) == fs->lbs);
}
/* Search the contents of this directory entry, known to be a directory itself,
* looking for a component. If found, return directory entry associated with
* the component. */
int
searchdirent(struct directent *dp, struct directent *fdp,
struct directent *compdp, struct fs *fs) {
struct directent *ldp;
long filesize = ISO_WD(FDV(dp, size, fs->type)),
comp_namelen = ISO_BY(FDV(compdp, name_len, fs->type)),
lbn = 0, cnt;
char *buffer = (char *) malloc(fs->lbs);
while (getblkdirent(dp, buffer, lbn, fs)) {
cnt = filesize > fs->lbs ? fs->lbs : filesize;
filesize -= cnt;
ldp = (struct directent *) buffer;
/* have we a record to match? */
while (cnt > sizeof (union fsdir)) {
long entlen, namelen;
/* match against component's name and name length */
entlen = ISO_BY(FDV(ldp, length, fs->type));
namelen = ISO_BY(FDV(ldp, name_len, fs->type));
if (entlen >= comp_namelen + sizeof(union fsdir) && namelen == comp_namelen
&& strncmp(FDV(ldp,name(),fs->type),
FDV(compdp,name(),fs->type), namelen) == 0) {
memcpy (fdp, ldp, entlen);
memcpy (compdp, ldp, entlen);
free(buffer);
return 1;
} else {
cnt -= entlen;
ldp = (struct directent *)
(((char *) ldp) + entlen);
}
}
if (filesize == 0) break;
lbn++;
}
free(buffer);
return 0;
}
/* Lookup the pathname by interpreting the directory structure of the CDROM
* element by element, returning a directory entry if found. Name translation
* occurs here, out of the null terminated path name string. This routine
* works by recursion. */
int
lookup(struct directent *dp, struct directent *fdp, char *pathname,
struct fs *fs) {
struct directent *ldp;
struct directent thiscomp;
char *nextcomp;
unsigned len;
/* break off the next component of the pathname */
if ((nextcomp = strrchr(pathname, '/')) == NULL)
nextcomp = strrchr(pathname, '\0');
/* construct an entry for this component to match */
ISO_BY(FDV(&thiscomp, name_len, fs->type)) = len = nextcomp - pathname;
memcpy(thiscomp.name, pathname, len);
/* attempt a match, returning component if found */
if (searchdirent(dp, fdp, &thiscomp, fs)){
/* if no more components, return found value */
if (*nextcomp == '\0')
return 1;
/* otherwise, if this component is a directory,
* recursively satisfy lookup */
else if (ISO_BY(FDV(dp, flags, fs->type)) & CD_DIRECTORY)
return (lookup(&thiscomp, fdp, nextcomp + 1, fs));
}
/* if no match return fail */
else
return(0);
}
/* --------------- object output routines for application ------------ */
/* Extract the entire contents of a directory entry and write this on
* standard output. */
void
extractdirent(struct directent *dp, struct fs *fs, data_callback* dcb, void* dcbctx) {
long filesize = ISO_WD(FDV(dp, size, fs->type)),
lbn = 0, cnt;
char *buffer = (char *) malloc(fs->lbs);
/* iterate over all contents of the directory entry */
while (getblkdirent(dp, buffer, lbn, fs)) {
/* write out the valid portion of this logical block */
cnt = filesize > fs->lbs ? fs->lbs : filesize;
dcb(dcbctx, buffer, cnt);
/* next one? */
lbn++;
filesize -= cnt;
if (filesize == 0) break;
}
free(buffer);
}
/* Print directory header */
void
printdirentheader(char *path) {
printf("Directory(%s):\n", path);
printf("Flags:\tsize date sysa name\n");
}
/* Print all entries in the directory. */
void
printdirents(struct directent *dp, struct fs *fs) {
struct directent *ldp;
long filesize = ISO_WD(FDV(dp, size, fs->type)),
lbn = 0, cnt;
char *buffer = (char *) malloc(fs->lbs);
while (getblkdirent(dp, buffer, lbn, fs)) {
long entlen, namelen;
cnt = filesize > fs->lbs ? fs->lbs : filesize;
filesize -= cnt;
ldp = (struct directent *) buffer;
entlen = ISO_BY(FDV(ldp, length, fs->type));
namelen = ISO_BY(FDV(ldp, name_len, fs->type));
/* have we a record to match? */
while (cnt > sizeof (union fsdir) && entlen && namelen) {
printdirent(ldp, fs);
/* next entry? */
cnt -= entlen;
ldp = (struct directent *) (((char *) ldp) + entlen);
entlen = ISO_BY(FDV(ldp, length, fs->type));
namelen = ISO_BY(FDV(ldp, name_len, fs->type));
}
if (filesize == 0) break;
lbn++;
}
free(buffer);
}
/* print CDROM file modes */
void prmodes(int f) {
int i;
for(i=0; i < 8; i++) {
if(CD_FLAGBITS[i] == ' ')
continue;
if(f & (1<<i))
putchar(CD_FLAGBITS[i]);
else
putchar('-');
}
putchar(' ');
}
/* Print a directent on output, formatted. */
void
printdirent(struct directent *dp, struct fs *fs) {
unsigned extattlen;
unsigned fbname, name_len, entlen, enttaken;
/* mode flags */
prmodes(ISO_BY(FDV(dp, flags, fs->type)));
/* Note: this feature of HSF is not used because of lack of semantic def. */
#ifdef whybother
extattlen = ISO_BY(FDV(dp, ext_attr_length, fs->type));
if (extattlen)
printf(" E%3d", extattlen);
else
printf(" ");
#endif
/* size */
printf("\t%6d", ISO_WD(FDV(dp, size, fs->type)));
/* time */
printf(" %s",
cdrom_time((struct cdromtime *) FDV(dp, date, fs->type),fs->type));
/* compensate for reserved field used to word align directory entry */
entlen = ISO_BY(FDV(dp, length, fs->type));
name_len = ISO_BY(FDV(dp, name_len, fs->type));
enttaken = sizeof(union fsdir) + name_len;
if (enttaken & 1)
enttaken++;
fbname = ISO_BY(FDV(dp, name(), fs->type));
entlen -= enttaken;
/* print size of CDROM Extensions field if present */
if (entlen)
printf(" %3d", entlen);
else
printf(" ");
/* finally print name. compensate for unprintable names */
if (name_len == 1 && fbname <= 1) {
printf("\t%s\n", (fbname == 0) ? "." : "..");
} else
printf("\t%s\n",
iso_astring(FDV(dp, name(), fs->type), name_len));
};
/* attempt to print a CDROM file's creation time */
char *
cdrom_time(struct cdromtime *crt, int type) {
struct tm tm;
static char buf[32];
char *fmt;
/* step 1. convert into a ANSI C time description */
tm.tm_sec = min(crt->sec,60);
tm.tm_min = min(crt->min,60);
tm.tm_hour = min(crt->hour,23);
tm.tm_mday = min(crt->day, 31);
/* month starts with 1 */
tm.tm_mon = crt->month - 1;
tm.tm_year = crt->years;
tm.tm_isdst = 0;
/* Note: not all ISO-9660 disks have correct timezone field */
#ifdef whybother
/* ISO has time zone as 7th octet, HSF does not */
if (type == ISO) {
tm.tm_gmtoff = crt->tz*15*60;
tm.tm_zone = timezone(crt->tz*15, 0);
fmt = "%b %e %H:%M:%S %Z %Y";
} else
#endif
fmt = "%b %d %H:%M:%S %Y";
/* step 2. use ANSI C standard function to format time properly */
(void)strftime(buf, sizeof(buf), fmt, &tm);
return (buf);
}
static char __strbuf[200];
/* turn a blank padded character field into the null terminated strings
that POSIX/UNIX/WHATSIX likes so much */
char *iso_astring(char *sp, int len) {
memcpy(__strbuf, sp, len);
__strbuf[len] = 0;
for (sp = __strbuf + len - 1; sp > __strbuf ; sp--)
if (*sp == ' ')
*sp = 0;
return(__strbuf);
}
#if 0
/* user "application" program */
int
mainy(int argc, char *argv[])
{
struct directent openfile;
char pathname[80];
/* open the CDROM device */
if ((fsd.fd = open("/dev/ras2d", 0)) < 0) {
perror("cdromcat");
exit(1);
}
/* is there a filesystem we can understand here? */
if (iscdromfs(&rootent, &fsd) == 0) {
fprintf(stderr, "cdromcat: %s\n", fsd.name);
exit(1);
}
/* print the contents of the root directory to give user a start */
printf("Root Directory Listing:\n");
printdirentheader("/");
printdirents(&rootent, &fsd);
/* print files on demand from user */
for(;;){
/* prompt user for name to locate */
printf("Pathname to open? : ");
fflush(stdout);
/* obtain, if none, exit, else trim newline off */
if (fgets(pathname, sizeof(pathname), stdin) == NULL)
exit(0);
pathname[strlen(pathname) - 1] = '\0';
if (strlen(pathname) == 0)
exit(0);
/* lookup filename on CDROM */
if (lookup(&rootent, &openfile, pathname, &fsd)){
/* if a directory, format and list it */
if (ISO_BY(FDV(&openfile, flags, fsd.type))
& CD_DIRECTORY) {
printdirentheader(pathname);
printdirents(&openfile, &fsd);
}
/* if a file, print it on standard output */
else
extractdirent(&openfile, &fsd, 0);
} else
printf("Not found.\n");
}
/* NOTREACHED */
}
#endif
void find(directent* rootent, fs* fsd, char* pathname) {
struct directent openfile;
if (lookup(rootent, &openfile, pathname, fsd)) {
/* if a directory, format and list it */
if (ISO_BY(FDV(&openfile, flags, fsd->type)) & CD_DIRECTORY) {
printdirentheader(pathname);
printdirents(&openfile, fsd);
}
/* if a file, print it on standard output */
else
extractdirent(&openfile, fsd, 0, 0);
}
else
printf("Not found.\n");
}
void parse_cdfs(cdimage* cdio, int offs) {
//im
fs fsd;
directent rootent;
memset(&fsd, 0, sizeof(fsd));
memset(&rootent, 0, sizeof(rootent));
fsd.fd = cdio;
/* is there a filesystem we can understand here? */
if (iscdromfs(&rootent, &fsd, offs) ) {
/* print the contents of the root directory to give user a start */
printf("Root Directory Listing:\n");
printdirentheader("/");
printdirents(&rootent, &fsd);
}
}

25
gdtool/src/cdromfs.h Normal file
View File

@ -0,0 +1,25 @@
#pragma once
struct cdromtime {
unsigned char years; /* number of years since 1900 */
unsigned char month; /* month of the year */
unsigned char day; /* day of month */
unsigned char hour; /* hour of day */
unsigned char min; /* minute of the hour */
unsigned char sec; /* second of the minute */
unsigned char tz; /* timezones, in quarter hour increments */
/* or, longitude in 3.75 of a degree */
};
typedef void data_callback(void* ctx, void* data, int size);
struct cdimage {
virtual void seek(int to) = 0;
virtual int read(void* to, int count) = 0 ;
virtual ~cdimage() { }
};
void parse_cdfs(cdimage* cdio, int offs);

37
gdtool/src/cdromfs_imp.h Normal file
View File

@ -0,0 +1,37 @@
#pragma once
#include "cdromfs.h"
/* cdromfs.h: various definitions for CDROM filesystems. */
#define VD_LSN 16 /* first logical sector of volume descriptor table */
#define CDROM_LSECSZ 2048 /* initial logical sector size of a CDROM */
#define HSF 1
#define ISO 2
char *cdromfmtnames[] = {
"unknown format",
"High Sierra",
"ISO - 9660"
};
char *voltypenames[] = {
"Boot Record",
"Standard File Structure",
"Coded Character Set File Structure",
"Unspecified File Structure",
};
/* rude translation routines for interpreting strings, words, halfwords */
#define ISO_AS(s) (iso_astring(s, sizeof(s)))
#define ISO_WD(s) (*(unsigned *)(s))
#define ISO_HWD(s) (*(unsigned short *)(s))
#define ISO_BY(s) (*(unsigned char *)(s))
#define NVOLTYPENAMES (sizeof(voltypenames)/sizeof(char *))
#define CD_FLAGBITS "vdaEp m" /* file flag bits */
/* Handy macro's for block calculation */
#define lbntob(fs, n) ((fs)->lbs * (n))
#define btolbn(fs, n) ((fs)->lbs * (n))
#define trunc_lbn(fs, n) ((n) - ((n) % (fs)->lbs)
#define roundup(n, d) ((((n) + (d)) / (d)) * (d))

156
gdtool/src/main.cpp Normal file
View File

@ -0,0 +1,156 @@
/*
*/
#include "types.h"
#include "imgread/common.h"
#include "cdromfs.h"
int msgboxf(const wchar* text,unsigned int type,...) {
return MBX_OK;
}
void data_head() {
printf("---\nrv=\n");
}
void data_tail() {
printf("===\n");
}
void data_string(const char* s) {
data_head();
puts(s);
data_tail();
}
void data_kvp(const char* k, const char* v) {
printf("\t\"%s\":\"%s\",\n", k, v);
}
void parse_ip_meta(u8* ip_meta)
{
char temp[256];
const char* chm = (const char*)ip_meta;
#define HH(ofs, len, name) { strncpy(temp, chm+ofs, len); temp[len]=0; for (int i=len-1; i>=0; i--) if(temp[i]==' ') temp[i]=0; else break; data_kvp(#name, temp); }
data_head();
printf("{\n");
data_kvp("type", "\"meta-info\"");
HH(0x00, 16, hardwareId);
HH(0x10, 16, makerId);
HH(0x80, 128, productName);
HH(0x4A, 6, productVersion);
HH(0x50, 16, releaseDate);
HH(0x40, 10, productId);
HH(0x20, 16, discId);
HH(0x30, 8, areas);
HH(0x38, 8, peripherals);
HH(0x60, 16, bootfile);
HH(0x70, 16, publisher);
printf("}\n");
data_tail();
}
struct gdio : cdimage {
Disc* disc;
int pos;
int offs;
void seek(int to) {
pos = to;
}
int read(void* to, int count) {
u8 tmp[2048];
verify(count != 0);
int rem = count;
while (rem >= 2048) {
disc->ReadSectors( (pos/2048) + offs, 1, tmp, 2048);
int toread = min(2048, rem) - pos%2048;
memcpy(to, &tmp[pos%2048], toread),
(char*&)to += rem;
pos += toread;
rem -= toread;
}
return count;
}
gdio(Disc* d) {
pos = 0;
offs = 150; //FAD vs LBN
disc = d;
}
};
int main(int argc, char** argv)
{
for (int i=1; i<argc; i++) {
Disc* d = OpenDisc(argv[i]);
if (!d) {
printf("Invalid image\n");
//data_string("-1");
continue;
}
int start_fad = -1;
if (d->type == GdRom) {
printf("This is a gdrom image\n");
start_fad = d->tracks[2].StartFAD;
}
else {
printf("This is a cdrom image\n");
if (d->sessions.size() < 2) {
printf("Not a selfboot cd\n");
//data_string("-2");
continue;
}
start_fad = d->sessions[1].StartFAD;
}
u8 ip_meta[2048];
d->ReadSectors(start_fad,1,ip_meta,2048);
//d->Dump(argv[1]);
parse_ip_meta(ip_meta);
//im
gdio* image = new gdio(d);
if (d->type == GdRom) {
parse_cdfs(image, d->tracks[0].StartFAD-image->offs);
}
parse_cdfs(image, start_fad-image->offs);
delete image;
delete d;
}
}

View File

@ -1,3 +1,9 @@
<!--
File: strings.xml (French)
Author: Jérôme P. (AndroidGX)
Last Edit: 21 May 2014
-->
<resources>
<string name="menu_settings">Réglages</string>
@ -23,6 +29,7 @@
<string name="optimization_opts">Options d\'optimisations et de débogage</string>
<string name="experimental_opts">Experimental (peut causer des crashs)</string>
<string name="select_details">Activer le détail des jeux</string>
<string name="select_native">Activer l\'interface native</string>
<string name="select_dynarec">Dynarec</string>
<string name="select_unstable">Optimisations instables</string>
@ -41,13 +48,17 @@
<string name="default_disk">Réglage du disque par défaut</string>
<string name="games_listing">Liste des jeux disponibles</string>
<string name="game_details">Infos du jeu - %1$s</string>
<string name="info_unavailable">Infos du jeu non disponible</string>
<string name="disk_loading">Chargement des infos du disque</string>
<string name="report_issue">Crash détécté précédemment</string>
<string name="bios_config">Crash dans la configuration</string>
<string name="bios_config">Crash dans la configuration!</string>
<string name="customize_touch_controls">Personnaliser les contrôles tactiles</string>
<string name="launch_editor">Lancer l\'éditeur</string>
<string name="touch_vibration">Vibrations</string>
<string name="touch_vibration">Vibration</string>
<string name="controller_a">Manette A</string>
<string name="controller_b">Manette B</string>
<string name="controller_c">Manette C</string>
@ -89,6 +100,7 @@
<string name="about">A propos</string>
<string name="rateme">Evaluez-nous</string>
<string name="messages">Test Suite</string>
<string name="cloud">Cloud VMU</string>
<string name="textOn">ACTIF</string>
<string name="textOff">DESACT.</string>
@ -97,4 +109,10 @@
<string name="dismiss">Abandonner</string>
<string name="manual">Manuel</string>
<string name="options">Options</string>
<string name="cloudInfos">Avec cet outil vous pouvez envoyer/télécharger vos VMUs sur/depuis Dropbox, de manière à les synchroniser avec tous vos dispositifs!</string>
<string name="uploadWarning">ATTENTION: Vous êtes sur le point d\'envoyer vos VMUs sur Dropbox, veuillez s\'il vous plait prendre en considération que ceci va ECRASER votre dernier envoi!!</string>
<string name="downloadWarning">ATTENTION: Vous êtes sur le point de télécharger vos VMUs depuis Dropbox, veuillez s\'il vous plait prendre en considération que ceci va ECRASER vos VMUs actuelles!! Par ailleurs une copie de sauvegarde va être créé dans le dossier VmuBackups!</string>
<string name="uploadVMU">Envoyer VMU</string>
<string name="downloadVMU">Télécharger VMU</string>
</resources>

View File

@ -200,20 +200,8 @@
9C7A3C0218C851C50070BB5F /* 210-twitterbird@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 9C7A3BDC18C851C50070BB5F /* 210-twitterbird@2x.png */; };
9C7A3C0318C851C50070BB5F /* ABXYPad.png in Resources */ = {isa = PBXBuildFile; fileRef = 9C7A3BDD18C851C50070BB5F /* ABXYPad.png */; };
9C7A3C0418C851C50070BB5F /* ABXYPad@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 9C7A3BDE18C851C50070BB5F /* ABXYPad@2x.png */; };
9C7A3C0518C851C50070BB5F /* close.png in Resources */ = {isa = PBXBuildFile; fileRef = 9C7A3BDF18C851C50070BB5F /* close.png */; };
9C7A3C0618C851C50070BB5F /* close@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 9C7A3BE018C851C50070BB5F /* close@2x.png */; };
9C7A3C0718C851C50070BB5F /* config.png in Resources */ = {isa = PBXBuildFile; fileRef = 9C7A3BE118C851C50070BB5F /* config.png */; };
9C7A3C0818C851C50070BB5F /* config@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 9C7A3BE218C851C50070BB5F /* config@2x.png */; };
9C7A3C0918C851C50070BB5F /* disc.png in Resources */ = {isa = PBXBuildFile; fileRef = 9C7A3BE318C851C50070BB5F /* disc.png */; };
9C7A3C0A18C851C50070BB5F /* disc@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 9C7A3BE418C851C50070BB5F /* disc@2x.png */; };
9C7A3C0B18C851C50070BB5F /* disclosure.png in Resources */ = {isa = PBXBuildFile; fileRef = 9C7A3BE518C851C50070BB5F /* disclosure.png */; };
9C7A3C0C18C851C50070BB5F /* disclosure@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 9C7A3BE618C851C50070BB5F /* disclosure@2x.png */; };
9C7A3C0D18C851C50070BB5F /* DPad.png in Resources */ = {isa = PBXBuildFile; fileRef = 9C7A3BE718C851C50070BB5F /* DPad.png */; };
9C7A3C0E18C851C50070BB5F /* DPad@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 9C7A3BE818C851C50070BB5F /* DPad@2x.png */; };
9C7A3C0F18C851C50070BB5F /* HideEmulator.png in Resources */ = {isa = PBXBuildFile; fileRef = 9C7A3BE918C851C50070BB5F /* HideEmulator.png */; };
9C7A3C1018C851C50070BB5F /* HideEmulator@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 9C7A3BEA18C851C50070BB5F /* HideEmulator@2x.png */; };
9C7A3C1118C851C50070BB5F /* input.png in Resources */ = {isa = PBXBuildFile; fileRef = 9C7A3BEB18C851C50070BB5F /* input.png */; };
9C7A3C1218C851C50070BB5F /* input@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 9C7A3BEC18C851C50070BB5F /* input@2x.png */; };
9C7A3C1318C851C50070BB5F /* JoystickBackground.png in Resources */ = {isa = PBXBuildFile; fileRef = 9C7A3BED18C851C50070BB5F /* JoystickBackground.png */; };
9C7A3C1418C851C50070BB5F /* JoystickBackground@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 9C7A3BEE18C851C50070BB5F /* JoystickBackground@2x.png */; };
9C7A3C1518C851C50070BB5F /* JoystickButton.png in Resources */ = {isa = PBXBuildFile; fileRef = 9C7A3BEF18C851C50070BB5F /* JoystickButton.png */; };
@ -224,14 +212,11 @@
9C7A3C1A18C851C50070BB5F /* menuback@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 9C7A3BF418C851C50070BB5F /* menuback@2x.png */; };
9C7A3C1B18C851C50070BB5F /* menuicon.png in Resources */ = {isa = PBXBuildFile; fileRef = 9C7A3BF518C851C50070BB5F /* menuicon.png */; };
9C7A3C1C18C851C50070BB5F /* menuicon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 9C7A3BF618C851C50070BB5F /* menuicon@2x.png */; };
9C7A3C1D18C851C50070BB5F /* row.png in Resources */ = {isa = PBXBuildFile; fileRef = 9C7A3BF718C851C50070BB5F /* row.png */; };
9C7A3C1E18C851C50070BB5F /* row@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 9C7A3BF818C851C50070BB5F /* row@2x.png */; };
9C7A3C1F18C851C50070BB5F /* rowselected.png in Resources */ = {isa = PBXBuildFile; fileRef = 9C7A3BF918C851C50070BB5F /* rowselected.png */; };
9C7A3C2018C851C50070BB5F /* rowselected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 9C7A3BFA18C851C50070BB5F /* rowselected@2x.png */; };
9C7A3C2118C851C50070BB5F /* RTrigger.png in Resources */ = {isa = PBXBuildFile; fileRef = 9C7A3BFB18C851C50070BB5F /* RTrigger.png */; };
9C7A3C2218C851C50070BB5F /* RTrigger@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 9C7A3BFC18C851C50070BB5F /* RTrigger@2x.png */; };
9C7A3C2318C851C50070BB5F /* Start.png in Resources */ = {isa = PBXBuildFile; fileRef = 9C7A3BFD18C851C50070BB5F /* Start.png */; };
9C7A3C2418C851C50070BB5F /* Start@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 9C7A3BFE18C851C50070BB5F /* Start@2x.png */; };
9C7D581019301E140004EA2C /* CloudVMUViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C7D580F19301E140004EA2C /* CloudVMUViewController.m */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
@ -571,20 +556,8 @@
9C7A3BDC18C851C50070BB5F /* 210-twitterbird@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "210-twitterbird@2x.png"; path = "emulator/Images/210-twitterbird@2x.png"; sourceTree = "<group>"; };
9C7A3BDD18C851C50070BB5F /* ABXYPad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ABXYPad.png; path = emulator/Images/ABXYPad.png; sourceTree = "<group>"; };
9C7A3BDE18C851C50070BB5F /* ABXYPad@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "ABXYPad@2x.png"; path = "emulator/Images/ABXYPad@2x.png"; sourceTree = "<group>"; };
9C7A3BDF18C851C50070BB5F /* close.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = close.png; path = emulator/Images/close.png; sourceTree = "<group>"; };
9C7A3BE018C851C50070BB5F /* close@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "close@2x.png"; path = "emulator/Images/close@2x.png"; sourceTree = "<group>"; };
9C7A3BE118C851C50070BB5F /* config.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = config.png; path = emulator/Images/config.png; sourceTree = "<group>"; };
9C7A3BE218C851C50070BB5F /* config@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "config@2x.png"; path = "emulator/Images/config@2x.png"; sourceTree = "<group>"; };
9C7A3BE318C851C50070BB5F /* disc.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = disc.png; path = emulator/Images/disc.png; sourceTree = "<group>"; };
9C7A3BE418C851C50070BB5F /* disc@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "disc@2x.png"; path = "emulator/Images/disc@2x.png"; sourceTree = "<group>"; };
9C7A3BE518C851C50070BB5F /* disclosure.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = disclosure.png; path = emulator/Images/disclosure.png; sourceTree = "<group>"; };
9C7A3BE618C851C50070BB5F /* disclosure@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "disclosure@2x.png"; path = "emulator/Images/disclosure@2x.png"; sourceTree = "<group>"; };
9C7A3BE718C851C50070BB5F /* DPad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = DPad.png; path = emulator/Images/DPad.png; sourceTree = "<group>"; };
9C7A3BE818C851C50070BB5F /* DPad@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "DPad@2x.png"; path = "emulator/Images/DPad@2x.png"; sourceTree = "<group>"; };
9C7A3BE918C851C50070BB5F /* HideEmulator.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = HideEmulator.png; path = emulator/Images/HideEmulator.png; sourceTree = "<group>"; };
9C7A3BEA18C851C50070BB5F /* HideEmulator@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "HideEmulator@2x.png"; path = "emulator/Images/HideEmulator@2x.png"; sourceTree = "<group>"; };
9C7A3BEB18C851C50070BB5F /* input.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = input.png; path = emulator/Images/input.png; sourceTree = "<group>"; };
9C7A3BEC18C851C50070BB5F /* input@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "input@2x.png"; path = "emulator/Images/input@2x.png"; sourceTree = "<group>"; };
9C7A3BED18C851C50070BB5F /* JoystickBackground.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = JoystickBackground.png; path = emulator/Images/JoystickBackground.png; sourceTree = "<group>"; };
9C7A3BEE18C851C50070BB5F /* JoystickBackground@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "JoystickBackground@2x.png"; path = "emulator/Images/JoystickBackground@2x.png"; sourceTree = "<group>"; };
9C7A3BEF18C851C50070BB5F /* JoystickButton.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = JoystickButton.png; path = emulator/Images/JoystickButton.png; sourceTree = "<group>"; };
@ -595,14 +568,12 @@
9C7A3BF418C851C50070BB5F /* menuback@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "menuback@2x.png"; path = "emulator/Images/menuback@2x.png"; sourceTree = "<group>"; };
9C7A3BF518C851C50070BB5F /* menuicon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = menuicon.png; path = emulator/Images/menuicon.png; sourceTree = "<group>"; };
9C7A3BF618C851C50070BB5F /* menuicon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "menuicon@2x.png"; path = "emulator/Images/menuicon@2x.png"; sourceTree = "<group>"; };
9C7A3BF718C851C50070BB5F /* row.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = row.png; path = emulator/Images/row.png; sourceTree = "<group>"; };
9C7A3BF818C851C50070BB5F /* row@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "row@2x.png"; path = "emulator/Images/row@2x.png"; sourceTree = "<group>"; };
9C7A3BF918C851C50070BB5F /* rowselected.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = rowselected.png; path = emulator/Images/rowselected.png; sourceTree = "<group>"; };
9C7A3BFA18C851C50070BB5F /* rowselected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "rowselected@2x.png"; path = "emulator/Images/rowselected@2x.png"; sourceTree = "<group>"; };
9C7A3BFB18C851C50070BB5F /* RTrigger.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = RTrigger.png; path = emulator/Images/RTrigger.png; sourceTree = "<group>"; };
9C7A3BFC18C851C50070BB5F /* RTrigger@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "RTrigger@2x.png"; path = "emulator/Images/RTrigger@2x.png"; sourceTree = "<group>"; };
9C7A3BFD18C851C50070BB5F /* Start.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Start.png; path = emulator/Images/Start.png; sourceTree = "<group>"; };
9C7A3BFE18C851C50070BB5F /* Start@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Start@2x.png"; path = "emulator/Images/Start@2x.png"; sourceTree = "<group>"; };
9C7D580E19301E140004EA2C /* CloudVMUViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CloudVMUViewController.h; path = emulator/CloudVMUViewController.h; sourceTree = "<group>"; };
9C7D580F19301E140004EA2C /* CloudVMUViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CloudVMUViewController.m; path = emulator/CloudVMUViewController.m; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@ -692,6 +663,8 @@
9C7A393618C805F70070BB5F /* View Controller Subclasses */ = {
isa = PBXGroup;
children = (
9C7D580E19301E140004EA2C /* CloudVMUViewController.h */,
9C7D580F19301E140004EA2C /* CloudVMUViewController.m */,
9C7A3B6C18C820B40070BB5F /* InputViewController.h */,
9C7A3B6D18C820B40070BB5F /* InputViewController.m */,
9C7A3B6618C8208D0070BB5F /* SettingsViewController.h */,
@ -720,20 +693,8 @@
9C7A3BDC18C851C50070BB5F /* 210-twitterbird@2x.png */,
9C7A3BDD18C851C50070BB5F /* ABXYPad.png */,
9C7A3BDE18C851C50070BB5F /* ABXYPad@2x.png */,
9C7A3BDF18C851C50070BB5F /* close.png */,
9C7A3BE018C851C50070BB5F /* close@2x.png */,
9C7A3BE118C851C50070BB5F /* config.png */,
9C7A3BE218C851C50070BB5F /* config@2x.png */,
9C7A3BE318C851C50070BB5F /* disc.png */,
9C7A3BE418C851C50070BB5F /* disc@2x.png */,
9C7A3BE518C851C50070BB5F /* disclosure.png */,
9C7A3BE618C851C50070BB5F /* disclosure@2x.png */,
9C7A3BE718C851C50070BB5F /* DPad.png */,
9C7A3BE818C851C50070BB5F /* DPad@2x.png */,
9C7A3BE918C851C50070BB5F /* HideEmulator.png */,
9C7A3BEA18C851C50070BB5F /* HideEmulator@2x.png */,
9C7A3BEB18C851C50070BB5F /* input.png */,
9C7A3BEC18C851C50070BB5F /* input@2x.png */,
9C7A3BED18C851C50070BB5F /* JoystickBackground.png */,
9C7A3BEE18C851C50070BB5F /* JoystickBackground@2x.png */,
9C7A3BEF18C851C50070BB5F /* JoystickButton.png */,
@ -744,10 +705,6 @@
9C7A3BF418C851C50070BB5F /* menuback@2x.png */,
9C7A3BF518C851C50070BB5F /* menuicon.png */,
9C7A3BF618C851C50070BB5F /* menuicon@2x.png */,
9C7A3BF718C851C50070BB5F /* row.png */,
9C7A3BF818C851C50070BB5F /* row@2x.png */,
9C7A3BF918C851C50070BB5F /* rowselected.png */,
9C7A3BFA18C851C50070BB5F /* rowselected@2x.png */,
9C7A3BFB18C851C50070BB5F /* RTrigger.png */,
9C7A3BFC18C851C50070BB5F /* RTrigger@2x.png */,
9C7A3BFD18C851C50070BB5F /* Start.png */,
@ -1420,24 +1377,17 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
9C7A3C0618C851C50070BB5F /* close@2x.png in Resources */,
9C7A3C1818C851C50070BB5F /* LTrigger@2x.png in Resources */,
9C7A3C1318C851C50070BB5F /* JoystickBackground.png in Resources */,
9C7A393318C804A80070BB5F /* reicast.entitlements in Resources */,
9C7A3C1018C851C50070BB5F /* HideEmulator@2x.png in Resources */,
9C7A3C0018C851C50070BB5F /* 210-octocat@2x.png in Resources */,
9C7A3C0518C851C50070BB5F /* close.png in Resources */,
9C7A3C1718C851C50070BB5F /* LTrigger.png in Resources */,
9C7A3C0218C851C50070BB5F /* 210-twitterbird@2x.png in Resources */,
9C7A3C0918C851C50070BB5F /* disc.png in Resources */,
9C7A3AA418C806E00070BB5F /* core.mk in Resources */,
9C7A3C2218C851C50070BB5F /* RTrigger@2x.png in Resources */,
9C7A3C0F18C851C50070BB5F /* HideEmulator.png in Resources */,
9C7A3C0E18C851C50070BB5F /* DPad@2x.png in Resources */,
87078AA318A47FE90034C7A0 /* Shader.fsh in Resources */,
9C7A3C1E18C851C50070BB5F /* row@2x.png in Resources */,
9C7A3C2118C851C50070BB5F /* RTrigger.png in Resources */,
9C7A3C0B18C851C50070BB5F /* disclosure.png in Resources */,
9C7A3C1C18C851C50070BB5F /* menuicon@2x.png in Resources */,
9C7A3C0118C851C50070BB5F /* 210-twitterbird.png in Resources */,
9C7A3C0D18C851C50070BB5F /* DPad.png in Resources */,
@ -1445,7 +1395,6 @@
9C7A3BFF18C851C50070BB5F /* 210-octocat.png in Resources */,
9C7A3C1618C851C50070BB5F /* JoystickButton@2x.png in Resources */,
87078AAA18A47FE90034C7A0 /* Images.xcassets in Resources */,
9C7A3C0C18C851C50070BB5F /* disclosure@2x.png in Resources */,
9C7A3C1418C851C50070BB5F /* JoystickBackground@2x.png in Resources */,
9C7A3C1918C851C50070BB5F /* menuback.png in Resources */,
9C7A3BC418C84EA10070BB5F /* MainStoryboard.storyboard in Resources */,
@ -1454,17 +1403,9 @@
9C7A3C1B18C851C50070BB5F /* menuicon.png in Resources */,
9C7A3C0418C851C50070BB5F /* ABXYPad@2x.png in Resources */,
87078AA518A47FE90034C7A0 /* Shader.vsh in Resources */,
9C7A3C0818C851C50070BB5F /* config@2x.png in Resources */,
9C7A3C1D18C851C50070BB5F /* row.png in Resources */,
9C7A3C1118C851C50070BB5F /* input.png in Resources */,
9C7A3C0318C851C50070BB5F /* ABXYPad.png in Resources */,
9C7A3C2418C851C50070BB5F /* Start@2x.png in Resources */,
9C7A3C0718C851C50070BB5F /* config.png in Resources */,
9C7A3C0A18C851C50070BB5F /* disc@2x.png in Resources */,
9C7A3C1218C851C50070BB5F /* input@2x.png in Resources */,
9C7A3C2018C851C50070BB5F /* rowselected@2x.png in Resources */,
9C7A3C2318C851C50070BB5F /* Start.png in Resources */,
9C7A3C1F18C851C50070BB5F /* rowselected.png in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -1556,6 +1497,7 @@
9C7A3B0F18C806E00070BB5F /* maple_cfg.cpp in Sources */,
9C7A3AF318C806E00070BB5F /* crc32.c in Sources */,
9C7A3B5F18C81D090070BB5F /* BrowserTableViewController.m in Sources */,
9C7D581019301E140004EA2C /* CloudVMUViewController.m in Sources */,
9C7A3AE118C806E00070BB5F /* zip_set_file_comment.c in Sources */,
9C7A3B4118C806E00070BB5F /* audiostream.cpp in Sources */,
9C7A3AB118C806E00070BB5F /* pngread.c in Sources */,

View File

@ -0,0 +1,14 @@
//
// CloudVMUViewController.h
// emulator
//
// Created by Karen Tsai on 2014/5/23.
// Copyright (c) 2014 Karen Tsai (angelXwind). All rights reserved.
//
#import <UIKit/UIKit.h>
@interface CloudVMUViewController : UITableViewController
@property (weak, nonatomic) IBOutlet UIBarButtonItem *sidebarButton;
@end

View File

@ -0,0 +1,56 @@
//
// CloudVMUViewController.m
// emulator
//
// Created by Karen Tsai on 2014/5/23.
// Copyright (c) 2014 Karen Tsai (angelXwind). All rights reserved.
//
#import "CloudVMUViewController.h"
#import "SWRevealViewController.h"
@interface CloudVMUViewController ()
@end
@implementation CloudVMUViewController
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.title = @"Cloud VMU";
// Set the side bar button action. When it's tapped, it'll show up the sidebar.
_sidebarButton.target = self.revealViewController;
_sidebarButton.action = @selector(revealToggle:);
// Set the gesture
[self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];
// Uncomment the following line to preserve selection between presentations.
// self.clearsSelectionOnViewWillAppear = NO;
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - Table view data source
// TODO: write the rest of the view controller logic
@end

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

View File

@ -90,12 +90,13 @@
<autoresizingMask key="autoresizingMask"/>
<subviews>
<segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="bar" selectedSegmentIndex="0" id="2i9-9X-BIw">
<rect key="frame" x="20" y="36" width="280" height="30"/>
<rect key="frame" x="20" y="36" width="280" height="29"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
<segments>
<segment title="0"/>
<segment title="1"/>
<segment title="2"/>
<segment title="3"/>
</segments>
</segmentedControl>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Frame Skip" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" id="Mdm-Bf-hXu">
@ -431,7 +432,7 @@
<objects>
<viewController storyboardIdentifier="emulatorView" wantsFullScreenLayout="YES" id="WRM-pR-XCP" customClass="EmulatorViewController" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="JQE-db-ZiC">
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
<rect key="frame" x="0.0" y="0.0" width="568" height="320"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="60 FPS" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="mo4-qa-NUQ">
@ -446,7 +447,7 @@
<size key="shadowOffset" width="0.0" height="0.0"/>
</label>
<view opaque="NO" contentMode="scaleToFill" id="S6c-5v-781" userLabel="Controls Container">
<rect key="frame" x="1" y="328" width="320" height="240"/>
<rect key="frame" x="1" y="80" width="568" height="240"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
<subviews>
<view contentMode="scaleToFill" id="2r2-6d-4At" customClass="DirectionalControl">
@ -458,7 +459,7 @@
</connections>
</view>
<view contentMode="scaleToFill" id="wc7-x7-O1M" customClass="ButtonControl">
<rect key="frame" x="200" y="112" width="120" height="120"/>
<rect key="frame" x="448" y="112" width="120" height="120"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<connections>
@ -466,7 +467,7 @@
</connections>
</view>
<button opaque="NO" tag="5" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" adjustsImageWhenDisabled="NO" lineBreakMode="middleTruncation" id="DAf-Ip-ZfX">
<rect key="frame" x="136" y="206" width="48" height="26"/>
<rect key="frame" x="268" y="194" width="48" height="26"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" backgroundImage="Start.png">
@ -500,7 +501,7 @@
</connections>
</button>
<button opaque="NO" tag="11" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" adjustsImageWhenDisabled="NO" lineBreakMode="middleTruncation" id="YM6-fX-N4s">
<rect key="frame" x="253" y="0.0" width="67" height="44"/>
<rect key="frame" x="501" y="0.0" width="67" height="44"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
<state key="normal" backgroundImage="RTrigger.png">
@ -520,7 +521,7 @@
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
</view>
<button opaque="NO" alpha="0.5" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="VZZ-1B-BHQ">
<rect key="frame" x="147" y="1" width="26" height="26"/>
<rect key="frame" x="522" y="20" width="26" height="26"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<gestureRecognizers/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
@ -539,8 +540,10 @@
</subviews>
<color key="backgroundColor" cocoaTouchSystemColor="darkTextColor"/>
<gestureRecognizers/>
<simulatedOrientationMetrics key="simulatedOrientationMetrics" orientation="landscapeRight"/>
</view>
<nil key="simulatedStatusBarMetrics"/>
<simulatedOrientationMetrics key="simulatedOrientationMetrics" orientation="landscapeRight"/>
<connections>
<outlet property="buttonControl" destination="wc7-x7-O1M" id="DCv-Im-2AH"/>
<outlet property="controllerContainerView" destination="S6c-5v-781" id="PYO-ai-9Ym"/>
@ -827,15 +830,75 @@
</objects>
<point key="canvasLocation" x="451" y="-300"/>
</scene>
<!--Side Drawer View Controller-->
<scene sceneID="4Yv-XG-ZpS">
<!--CloudVMU View Controller - Cloud VMU-->
<scene sceneID="stw-rr-ydw">
<objects>
<placeholder placeholderIdentifier="IBFirstResponder" id="wHS-Li-Mt9" userLabel="First Responder" sceneMemberID="firstResponder"/>
<tableViewController storyboardIdentifier="Static" id="G5S-J0-8NS" customClass="SideDrawerViewController" sceneMemberID="viewController">
<simulatedStatusBarMetrics key="simulatedStatusBarMetrics" statusBarStyle="blackOpaque"/>
<tableViewController id="QUY-zj-qPU" customClass="CloudVMUViewController" sceneMemberID="viewController">
<tableView key="view" opaque="NO" clipsSubviews="YES" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="10" sectionFooterHeight="10" id="kEu-gD-vhT">
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" red="0.93725496529999996" green="0.93725496529999996" blue="0.95686280729999995" alpha="1" colorSpace="deviceRGB"/>
<sections>
<tableViewSection headerTitle="Cloud VMU" footerTitle="With this tool, you can upload/download your VMUs to/from Dropbox, in order to sync them with all your devices!" id="Vtc-3O-zog">
<cells>
<tableViewCell contentMode="scaleToFill" selectionStyle="gray" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" textLabel="ehb-54-ItN" style="IBUITableViewCellStyleDefault" id="pV4-Yd-r5B">
<rect key="frame" x="0.0" y="119" width="320" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="pV4-Yd-r5B" id="NvF-vc-Qfl">
<rect key="frame" x="0.0" y="0.0" width="320" height="43"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="Upload VMU" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="ehb-54-ItN">
<rect key="frame" x="15" y="0.0" width="290" height="43"/>
<autoresizingMask key="autoresizingMask"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</tableViewCell>
<tableViewCell contentMode="scaleToFill" selectionStyle="gray" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" textLabel="5e7-Ya-RZi" style="IBUITableViewCellStyleDefault" id="gIc-TL-8Xb">
<rect key="frame" x="0.0" y="163" width="320" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="gIc-TL-8Xb" id="W0G-Za-kmJ">
<rect key="frame" x="0.0" y="0.0" width="320" height="43"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="Download VMU" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="5e7-Ya-RZi">
<rect key="frame" x="15" y="0.0" width="290" height="43"/>
<autoresizingMask key="autoresizingMask"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</tableViewCell>
</cells>
</tableViewSection>
</sections>
<connections>
<outlet property="dataSource" destination="QUY-zj-qPU" id="c7s-hU-Z1a"/>
<outlet property="delegate" destination="QUY-zj-qPU" id="mgc-k7-dQf"/>
</connections>
</tableView>
<navigationItem key="navigationItem" title="Cloud VMU" id="a5r-gh-i6Z">
<barButtonItem key="leftBarButtonItem" image="menuicon.png" id="hGU-zT-SQS">
<color key="tintColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</barButtonItem>
</navigationItem>
<simulatedStatusBarMetrics key="simulatedStatusBarMetrics" statusBarStyle="lightContent"/>
<simulatedNavigationBarMetrics key="simulatedTopBarMetrics" prompted="NO"/>
<connections>
<outlet property="sidebarButton" destination="hGU-zT-SQS" id="JGs-W4-rTV"/>
</connections>
</tableViewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="vTj-SM-QWv" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="-41" y="356"/>
<point key="canvasLocation" x="-36" y="620"/>
</scene>
<!--Paths View Controller - Paths-->
<scene sceneID="B9d-x4-GUQ">
@ -902,6 +965,32 @@
</tableViewCell>
</cells>
</tableViewSection>
<tableViewSection headerTitle="Browser" id="cua-Bp-jdg">
<cells>
<tableViewCell contentMode="scaleToFill" selectionStyle="none" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" id="uqB-z2-zBm">
<rect key="frame" x="0.0" y="451" width="320" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="uqB-z2-zBm" id="n9V-hp-kxg">
<rect key="frame" x="0.0" y="0.0" width="320" height="43"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<switch opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" id="eYo-NN-Sn3">
<rect key="frame" x="251" y="6" width="51" height="31"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
</switch>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Enable Game Details" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="KdS-Rm-CVt">
<rect key="frame" x="17" y="11" width="184" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<color key="highlightedColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</label>
</subviews>
</tableViewCellContentView>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</tableViewCell>
</cells>
</tableViewSection>
</sections>
<connections>
<outlet property="dataSource" destination="XzS-kx-tLR" id="oxZ-lT-LSU"/>
@ -1120,8 +1209,8 @@
</view>
<simulatedNavigationBarMetrics key="simulatedTopBarMetrics" prompted="NO"/>
<connections>
<segue destination="G5S-J0-8NS" kind="custom" identifier="sw_rear" customClass="SWRevealViewControllerSegue" id="ANw-S3-tOC"/>
<segue destination="2a6-jc-CVw" kind="custom" identifier="sw_front" customClass="SWRevealViewControllerSegue" id="dKv-qL-02E"/>
<segue destination="ENP-dt-mAr" kind="custom" identifier="sw_rear" customClass="SWRevealViewControllerSegue" id="GUD-cD-jWj"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="V7a-XK-Rv3" userLabel="First Responder" sceneMemberID="firstResponder"/>
@ -1131,7 +1220,6 @@
<!--Navigation Controller-->
<scene sceneID="6mx-8l-fBn">
<objects>
<placeholder placeholderIdentifier="IBFirstResponder" id="mYK-ES-4ep" userLabel="First Responder" sceneMemberID="firstResponder"/>
<navigationController definesPresentationContext="YES" id="2a6-jc-CVw" sceneMemberID="viewController">
<simulatedNavigationBarMetrics key="simulatedTopBarMetrics" prompted="NO"/>
<navigationBar key="navigationBar" contentMode="scaleToFill" id="GEg-bW-l1t">
@ -1146,9 +1234,157 @@
<segue destination="12" kind="relationship" relationship="rootViewController" id="bPa-BK-u0Y"/>
</connections>
</navigationController>
<placeholder placeholderIdentifier="IBFirstResponder" id="mYK-ES-4ep" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="-41" y="-984"/>
</scene>
<!--Side Drawer View Controller-->
<scene sceneID="LAD-hJ-K38">
<objects>
<tableViewController id="ENP-dt-mAr" customClass="SideDrawerViewController" sceneMemberID="viewController">
<tableView key="view" opaque="NO" clipsSubviews="YES" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="none" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="rtd-Yh-HoI">
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" red="0.43137258290000002" green="0.44313728810000003" blue="0.45098042490000001" alpha="1" colorSpace="deviceRGB"/>
<prototypes>
<tableViewCell contentMode="scaleToFill" selectionStyle="gray" hidesAccessoryWhenEditing="NO" indentationWidth="0.0" reuseIdentifier="browser" textLabel="LjN-aL-Xol" style="IBUITableViewCellStyleDefault" id="nXF-UC-xee">
<rect key="frame" x="0.0" y="22" width="320" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="nXF-UC-xee" id="Rpb-HH-Luk">
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="Browser" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="LjN-aL-Xol">
<rect key="frame" x="15" y="0.0" width="290" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<fontDescription key="fontDescription" type="system" pointSize="18"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
<color key="backgroundColor" red="0.47843140360000003" green="0.49411767719999999" blue="0.50196081400000003" alpha="1" colorSpace="deviceRGB"/>
<connections>
<segue destination="12" kind="custom" customClass="SWRevealViewControllerSegue" trigger="accessoryAction" id="411-Zh-GVU"/>
</connections>
</tableViewCell>
<tableViewCell contentMode="scaleToFill" selectionStyle="gray" hidesAccessoryWhenEditing="NO" indentationWidth="0.0" reuseIdentifier="settings" textLabel="boW-ei-jb8" style="IBUITableViewCellStyleDefault" id="5hJ-8w-9QM">
<rect key="frame" x="0.0" y="66" width="320" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="5hJ-8w-9QM" id="D78-09-BjH">
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="Settings" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="boW-ei-jb8">
<rect key="frame" x="15" y="0.0" width="290" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<fontDescription key="fontDescription" type="system" pointSize="18"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
<color key="backgroundColor" red="0.47843140360000003" green="0.49411767719999999" blue="0.50196081400000003" alpha="1" colorSpace="deviceRGB"/>
<connections>
<segue destination="c3c-6p-wCh" kind="custom" customClass="SWRevealViewControllerSegue" trigger="accessoryAction" id="qWs-Gh-kki"/>
</connections>
</tableViewCell>
<tableViewCell contentMode="scaleToFill" selectionStyle="gray" hidesAccessoryWhenEditing="NO" indentationWidth="0.0" reuseIdentifier="paths" textLabel="0Rp-LV-XK4" style="IBUITableViewCellStyleDefault" id="aS4-ma-vSr">
<rect key="frame" x="0.0" y="110" width="320" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="aS4-ma-vSr" id="pSU-n5-hXs">
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="Paths" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="0Rp-LV-XK4">
<rect key="frame" x="15" y="0.0" width="290" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<fontDescription key="fontDescription" type="system" pointSize="18"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
<color key="backgroundColor" red="0.47843140360000003" green="0.49411767719999999" blue="0.50196081400000003" alpha="1" colorSpace="deviceRGB"/>
<connections>
<segue destination="XzS-kx-tLR" kind="custom" customClass="SWRevealViewControllerSegue" trigger="accessoryAction" id="cbk-By-SHg"/>
</connections>
</tableViewCell>
<tableViewCell contentMode="scaleToFill" selectionStyle="gray" hidesAccessoryWhenEditing="NO" indentationWidth="0.0" reuseIdentifier="input" textLabel="byd-dR-min" style="IBUITableViewCellStyleDefault" id="eLw-KV-Uyz">
<rect key="frame" x="0.0" y="154" width="320" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="eLw-KV-Uyz" id="YT8-Al-yNW">
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="Input" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="byd-dR-min">
<rect key="frame" x="15" y="0.0" width="290" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<fontDescription key="fontDescription" type="system" pointSize="18"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
<color key="backgroundColor" red="0.47843140360000003" green="0.49411767719999999" blue="0.50196081400000003" alpha="1" colorSpace="deviceRGB"/>
<connections>
<segue destination="PZu-Bi-7Xn" kind="custom" customClass="SWRevealViewControllerSegue" trigger="accessoryAction" id="eTG-s0-4Yk"/>
</connections>
</tableViewCell>
<tableViewCell contentMode="scaleToFill" selectionStyle="gray" hidesAccessoryWhenEditing="NO" indentationWidth="0.0" reuseIdentifier="about" textLabel="E7F-CS-7mV" style="IBUITableViewCellStyleDefault" id="laZ-wc-fYv">
<rect key="frame" x="0.0" y="198" width="320" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="laZ-wc-fYv" id="Bfi-5B-dCF">
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="About" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="E7F-CS-7mV">
<rect key="frame" x="15" y="0.0" width="290" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<fontDescription key="fontDescription" type="system" pointSize="18"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
<color key="backgroundColor" red="0.47843140360000003" green="0.49411767719999999" blue="0.50196081400000003" alpha="1" colorSpace="deviceRGB"/>
<connections>
<segue destination="kY3-6f-RlH" kind="custom" customClass="SWRevealViewControllerSegue" trigger="accessoryAction" id="a0d-ur-Jo6"/>
</connections>
</tableViewCell>
<tableViewCell contentMode="scaleToFill" selectionStyle="gray" hidesAccessoryWhenEditing="NO" indentationWidth="0.0" reuseIdentifier="cloudvmu" textLabel="wF5-AI-bOq" style="IBUITableViewCellStyleDefault" id="diS-hf-duh">
<rect key="frame" x="0.0" y="242" width="320" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="diS-hf-duh" id="oT7-OG-OsR">
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="Cloud VMU" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="wF5-AI-bOq">
<rect key="frame" x="15" y="0.0" width="290" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<fontDescription key="fontDescription" type="system" pointSize="18"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<nil key="highlightedColor"/>
</label>
</subviews>
</tableViewCellContentView>
<color key="backgroundColor" red="0.47843140360000003" green="0.49411767719999999" blue="0.50196081400000003" alpha="1" colorSpace="deviceRGB"/>
<connections>
<segue destination="QUY-zj-qPU" kind="custom" customClass="SWRevealViewControllerSegue" trigger="accessoryAction" id="9bz-PQ-d5V"/>
</connections>
</tableViewCell>
</prototypes>
<connections>
<outlet property="dataSource" destination="ENP-dt-mAr" id="3Gx-V9-fsT"/>
<outlet property="delegate" destination="ENP-dt-mAr" id="0Kg-33-QWc"/>
</connections>
</tableView>
<nil key="simulatedTopBarMetrics"/>
</tableViewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="1dy-nT-WkN" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="-36" y="-203"/>
</scene>
</scenes>
<resources>
<image name="210-octocat.png" width="22" height="22"/>
@ -1165,4 +1401,7 @@
<simulatedOrientationMetrics key="orientation"/>
<simulatedScreenMetrics key="destination" type="retina4"/>
</simulatedMetricsContainer>
<inferredMetricsTieBreakers>
<segue reference="411-Zh-GVU"/>
</inferredMetricsTieBreakers>
</document>