Cosmos/source2/Tools/File2ByteArray Converter/Form1.cs
blah38621_cp 92dcac4a51 Made a few improvements to the speed of the ILScanner, including caching the resolved plugs.
Added the possibility for an optimization step in the IL2CPU MSBuild task. Currently commented out, but should work fine with a few modifications to the optimizer.
Moved classes that are dependent on Cosmos from the Orvid.Graphics, into the Orvid.Graphics.Cosmos assembly. 
Re-factored the font mechanism, added partially working .fnt Font support. 
Added a Rectangle class, and a Vec2d class, which is the same as Vec2, except with doubles for the X and Y values.
Made a small aesthetic improvement to the output of the File2ByteArray Converter.
2011-09-03 21:05:46 +00:00

123 lines
3.8 KiB
C#

using System;
using System.Windows.Forms;
using System.IO;
namespace File2ByteArray_Converter
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
textBox2.Text = openFileDialog1.FileName;
FileStream strm = new FileStream(openFileDialog1.FileName, FileMode.Open);
StreamWriter strw = new StreamWriter(openFileDialog1.FileName + ".ByteArray.txt");
textBox1.Text = "";
strw.Write("byte[] " + Path.GetFileName(openFileDialog1.FileName).Replace('.', '_') + " = new byte[] \r\n{\r\n");
int i = 0;
bool first = true;
for (int loc = 0; loc < strm.Length; loc++)
{
string byt = ConvertToHex((uint)strm.ReadByte());
if (i >= 8)
{
i = 0;
strw.Flush();
byt = ", \r\n" + byt;
}
else
{
if (!first)
{
byt = ", " + byt;
}
}
strw.Write(byt);
first = false;
i++;
}
strw.Write("\r\n};");
strw.Flush();
strw.Close();
strw.Dispose();
strm.Flush();
strm.Close();
strm.Dispose();
StreamReader strdr = new StreamReader(openFileDialog1.FileName + ".ByteArray.txt");
textBox1.Text = strdr.ReadToEnd();
strdr.Close();
strdr.Dispose();
MessageBox.Show("Conversion Complete!");
}
}
private static string ConvertToHex(UInt32 num)
{
string xHex = string.Empty;
if (num == 0)
{
xHex = "0";
}
else
{
while (num != 0)
{
//Note; char is converted to string because Cosmos crashes when adding char and string. Frode, 7.june.
//TODO: Is this still true? I think Cosmos can handle char + string just fine now.
xHex = SingleDigitToHex((byte)(num & 0xf)) + xHex;
num = num >> 4;
}
}
return "0x" + (xHex.PadLeft(2,'0'));
}
private static string SingleDigitToHex(byte d)
{
switch (d)
{
case 0:
return "0";
case 1:
return "1";
case 2:
return "2";
case 3:
return "3";
case 4:
return "4";
case 5:
return "5";
case 6:
return "6";
case 7:
return "7";
case 8:
return "8";
case 9:
return "9";
case 10:
return "A";
case 11:
return "B";
case 12:
return "C";
case 13:
return "D";
case 14:
return "E";
case 15:
return "F";
}
return " ";
}
}
}