public static void Main(string[] args)
{
//// According http://msdn.microsoft.com/en-us/magazine/cc300474.aspx
LifetimeServices.LeaseTime = TimeSpan.FromMinutes(10);
LifetimeServices.RenewOnCallTime = TimeSpan.FromMinutes(15);
LifetimeServices.SponsorshipTimeout = TimeSpan.FromMinutes(1);
Machine machine = null;
string imageloadname = GetImageFileName(args);
if (imageloadname != null)
{
var stream = File.Open(imageloadname, FileMode.Open);
var reader = new BinaryReader(stream);
ImageSerializer serializer = new ImageSerializer(reader, null);
machine = (Machine)serializer.Deserialize();
Machine.SetCurrent(machine);
reader.Close();
object pgm = machine.GetGlobalObject("Program");
if (pgm != null)
{
IBehavior program = (IBehavior)pgm;
machine.SendMessage(program, "main", null, null);
return;
}
}
else
machine = new Machine();
foreach (string arg in GetFileNames(args))
{
Loader ldr = new Loader(arg, new VmCompiler());
try
{
ldr.LoadAndExecute(machine);
}
catch (Exception ex)
{
System.Console.Error.WriteLine(ex.Message);
System.Console.Error.WriteLine(ex.StackTrace);
}
}
string imagesavename = GetOption("save", "s", args);
if (imagesavename != null)
{
var stream = File.Open(imagesavename, FileMode.Create);
var writer = new BinaryWriter(stream);
ImageSerializer serializer = new ImageSerializer(writer);
serializer.Serialize(machine);
writer.Close();
return;
}
Loader loader = new Loader(System.Console.In, new VmCompiler());
while (true)
{
try
{
loader.LoadAndExecute(machine);
}
catch (Exception ex)
{
System.Console.Error.WriteLine(ex.Message);
System.Console.Error.WriteLine(ex.StackTrace);
}
}
}