-Made the GUID for ImportVBM uniform with the other cases.

--Because there are way more bytes used to represent the other GUIDs than this one, I just appended -0000-0000-0000-000000000000 to this per zeromus' request.
-Got rid of the hex part of the BytesToString function. We apparently have BizHawk.Util.BytesToHexString.
-Converted BytesToString to r.ReadStringFixedAscii, an extension method. I've determined that extension methods are cool and that I should use them more often.
This commit is contained in:
brandman211 2012-03-06 05:27:50 +00:00
parent c9b5f9989a
commit e7e8402af0
2 changed files with 33 additions and 38 deletions

View File

@ -492,6 +492,15 @@ namespace BizHawk
return 0;
}
// Read bytes from a BinaryReader and translate them into the UTF-8 string they represent.
public static string ReadStringFixedAscii(this BinaryReader r, int bytes)
{
byte[] read = new byte[bytes];
for (int b = 0; b < bytes; b++)
read[b] = r.ReadByte();
return System.Text.Encoding.UTF8.GetString(read);
}
/// <summary>
/// conerts bytes to an uppercase string of hex numbers in upper case without any spacing or anything
/// //could be extension method

View File

@ -83,20 +83,6 @@ namespace BizHawk.MultiClient
return false;
}
/*
Read bytes from a BinaryReader and translate them into a string for either the hexidecimal representation of the
binary numbers or the UTF-8 string they represent.
*/
private static string BytesToString(BinaryReader r, int size, bool hexadecimal = false)
{
byte[] bytes = new byte[size];
for (int b = 0; b < size; b++)
bytes[b] = r.ReadByte();
if (hexadecimal)
return string.Concat(bytes.Select(b => string.Format("{0:x2}", b)));
return System.Text.Encoding.UTF8.GetString(bytes);
}
// Import a text-based movie format. This works for .FM2 and .MC2.
private static Movie ImportText(string path, out string errorMsg, out string warningMsg)
{
@ -302,7 +288,7 @@ namespace BizHawk.MultiClient
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
BinaryReader r = new BinaryReader(fs);
// 000 4-byte signature: 46 43 4D 1A "FCM\x1A"
string signature = BytesToString(r, 4);
string signature = r.ReadStringFixedAscii(4);
if (signature != "FCM\x1A")
{
errorMsg = "This is not a valid .FCM file.";
@ -350,7 +336,7 @@ namespace BizHawk.MultiClient
*/
m.Header.SetHeaderLine("PAL", pal.ToString());
bool movieSyncHackOn = ((flags & 16) != 0);
m.Header.SetHeaderLine("SyncHack", movieSyncHackOn.ToString());
m.Header.Comments.Add("SyncHack " + movieSyncHackOn.ToString());
/*
009 1-byte flags: reserved, set to 0
00A 1-byte flags: reserved, set to 0
@ -374,8 +360,8 @@ namespace BizHawk.MultiClient
// 01C 4-byte little-endian unsigned int: offset to the controller data inside file
uint firstFrameOffset = r.ReadUInt32();
// 020 16-byte md5sum of the ROM used
string MD5 = BytesToString(r, 16, true);
m.Header.SetHeaderLine("MD5", MD5);
byte[] MD5 = r.ReadBytes(16);
m.Header.SetHeaderLine("MD5", BizHawk.Util.BytesToHexString(MD5).ToLower());
// 030 4-byte little-endian unsigned int: version of the emulator used
uint emuVersion = r.ReadUInt32();
m.Header.Comments.Add(EMULATIONORIGIN + " FCEU " + emuVersion.ToString());
@ -553,7 +539,7 @@ namespace BizHawk.MultiClient
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
BinaryReader r = new BinaryReader(fs);
// 000 4-byte signature: 46 4D 56 1A "FMV\x1A"
string signature = BytesToString(r, 4);
string signature = r.ReadStringFixedAscii(4);
if (signature != "FMV\x1A")
{
errorMsg = "This is not a valid .FMV file.";
@ -604,10 +590,10 @@ namespace BizHawk.MultiClient
// 00E 2-byte little-endian unsigned int: unknown, set to 0000
r.ReadInt16();
// 010 64-byte zero-terminated emulator identifier string
string emuVersion = RemoveNull(BytesToString(r, 64));
string emuVersion = RemoveNull(r.ReadStringFixedAscii(64));
m.Header.Comments.Add(EMULATIONORIGIN + " Famtasia version " + emuVersion);
// 050 64-byte zero-terminated movie title string
string gameName = RemoveNull(BytesToString(r, 64));
string gameName = RemoveNull(r.ReadStringFixedAscii(64));
m.Header.SetHeaderLine(MovieHeader.GAMENAME, gameName);
if (!controller1 && !controller2 && !FDS)
{
@ -699,7 +685,7 @@ namespace BizHawk.MultiClient
BinaryReader r = new BinaryReader(fs);
// Check signature
string signature = BytesToString(r, 15);
string signature = r.ReadStringFixedAscii(15);
if (signature != "Gens Movie TEST")
{
errorMsg = "This is not a valid .GMV file.";
@ -709,16 +695,16 @@ namespace BizHawk.MultiClient
}
// Retrieve ASCII encoded file format version (most recent is 'A')
string emuVersion = BytesToString(r, 1);
string emuVersion = r.ReadStringFixedAscii(1);
m.Header.Comments.Add("emuOrigin Gens version " + emuVersion);
uint rerecordCount = r.ReadUInt32();
m.SetRerecords((int)rerecordCount);
// ASCII-encoded controller config for player 1. '3' or '6'.
string player1Config = BytesToString(r, 1);
string player1Config = r.ReadStringFixedAscii(1);
// ASCII-encoded controller config for player 2. '3' or '6'.
string player2Config = BytesToString(r, 1);
string player2Config = r.ReadStringFixedAscii(1);
if (player1Config == "6" || player2Config == "6")
{
@ -746,7 +732,7 @@ namespace BizHawk.MultiClient
r.ReadByte();
// 40-byte zero-terminated ASCII movie name string
string movieName = RemoveNull(BytesToString(r, 40));
string movieName = RemoveNull(r.ReadStringFixedAscii(40));
string[] stdButtons = new string[8] { "Up", "Down", "Left", "Right", "A", "B", "C", "Start" };
string[] xyzButtons = new string[4] { "X", "Y", "Z", "Mode" };
@ -834,7 +820,7 @@ namespace BizHawk.MultiClient
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
BinaryReader r = new BinaryReader(fs);
// 000 4-byte signature: 4E 53 53 1A "NSS\x1A"
string signature = BytesToString(r, 4);
string signature = r.ReadStringFixedAscii(4);
if (signature != "NSS\x1A")
{
errorMsg = "This is not a valid .NMV file.";
@ -875,7 +861,7 @@ namespace BizHawk.MultiClient
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
BinaryReader r = new BinaryReader(fs);
// 0000: 4-byte signature: "MMV\0"
string signature = BytesToString(r, 4);
string signature = r.ReadStringFixedAscii(4);
if (signature != "MMV\0")
{
errorMsg = "This is not a valid .MMV file.";
@ -907,7 +893,7 @@ namespace BizHawk.MultiClient
// 001c: 4-byte little endian unsigned int: size of input packet
r.ReadUInt32();
// 0020-005f: string: author info (UTF-8)
string author = RemoveNull(BytesToString(r, 64));
string author = RemoveNull(r.ReadStringFixedAscii(64));
m.Header.SetHeaderLine(MovieHeader.AUTHOR, author);
// 0060: 4-byte little endian flags
byte flags = r.ReadByte();
@ -933,11 +919,11 @@ namespace BizHawk.MultiClient
// bits 4-31: unused
r.ReadBytes(3);
// 0064-00e3: string: rom name (ASCII)
string gameName = RemoveNull(BytesToString(r, 128));
string gameName = RemoveNull(r.ReadStringFixedAscii(128));
m.Header.SetHeaderLine(MovieHeader.GAMENAME, gameName);
// 00e4-00f3: binary: rom MD5 digest
string MD5 = BytesToString(r, 16, true);
m.Header.SetHeaderLine("MD5", MD5);
byte[] MD5 = r.ReadBytes(16);
m.Header.SetHeaderLine("MD5", String.Format("{0:x8}", BizHawk.Util.BytesToHexString(MD5).ToLower()));
/*
76543210
* bit 0 (0x01): up
@ -1102,7 +1088,7 @@ namespace BizHawk.MultiClient
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
BinaryReader r = new BinaryReader(fs);
// 000 4-byte signature: 56 42 4D 1A "VBM\x1A"
string signature = BytesToString(r, 4);
string signature = r.ReadStringFixedAscii(4);
if (signature != "VBM\x1A")
{
errorMsg = "This is not a valid .VBM file.";
@ -1124,7 +1110,7 @@ namespace BizHawk.MultiClient
recording time in Unix epoch format
*/
uint uid = r.ReadUInt32();
m.Header.SetHeaderLine(MovieHeader.GUID, uid.ToString());
m.Header.SetHeaderLine(MovieHeader.GUID, String.Format("{0:x8}", uid) + "-0000-0000-0000-000000000000");
// 00C 4-byte little-endian unsigned int: number of frames
uint frameCount = r.ReadUInt32();
// 010 4-byte little-endian unsigned int: rerecord count
@ -1233,7 +1219,7 @@ namespace BizHawk.MultiClient
024 12-byte character array: the internal game title of the ROM used while recording, not necessarily
null-terminated (ASCII?)
*/
string gameName = RemoveNull(BytesToString(r, 12));
string gameName = RemoveNull(r.ReadStringFixedAscii(12));
m.Header.SetHeaderLine(MovieHeader.GAMENAME, gameName);
// 030 1-byte unsigned char: minor version/revision number of current VBM version, the latest is "1"
byte minorVersion = r.ReadByte();
@ -1250,10 +1236,10 @@ namespace BizHawk.MultiClient
// 03C 4-byte little-endian unsigned int: offset to the controller data inside file
uint firstFrameOffset = r.ReadUInt32();
// After the header is 192 bytes of text. The first 64 of these 192 bytes are for the author's name (or names).
string author = RemoveNull(BytesToString(r, 64));
string author = RemoveNull(r.ReadStringFixedAscii(64));
m.Header.SetHeaderLine(MovieHeader.AUTHOR, author);
// The following 128 bytes are for a description of the movie. Both parts must be null-terminated.
string movieDescription = RemoveNull(BytesToString(r, 128));
string movieDescription = RemoveNull(r.ReadStringFixedAscii(128));
m.Header.Comments.Add("comment " + movieDescription);
/*
TODO: implement start data. There are no specifics on the googlecode page as to how long the SRAM or savestate
@ -1338,7 +1324,7 @@ namespace BizHawk.MultiClient
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
BinaryReader r = new BinaryReader(fs);
// 000 12-byte signature: "VirtuaNES MV"
string signature = BytesToString(r, 12);
string signature = r.ReadStringFixedAscii(12);
if (signature != "VirtuaNES MV")
{
errorMsg = "This is not a valid .VMV file.";