using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.IO; namespace BCDD { class Program { static List getFiles(string[] args) { List filenames = new List(); foreach (String arg in args) { if (File.Exists(arg)) { filenames.Add(arg); } } if (filenames.Count == 0) { OpenFileDialog fd = new OpenFileDialog(); fd.Multiselect = true; fd.Filter = "PBN files (*.pbn)|*.pbn|All files (*.*)|*.*"; if (fd.ShowDialog() == DialogResult.OK) { filenames = new List(fd.FileNames); } } return filenames; } [STAThread] static void Main(string[] args) { List files = Program.getFiles(args); List errors = new List(); if (files.Count > 0) { foreach (String filename in files) { try { Console.WriteLine("Analyzing " + filename); PBNFile file = new PBNFile(filename); foreach (PBNBoard board in file.Boards) { DDTable table = new DDTable(board); String boardNo; try { boardNo = board.GetNumber(); } catch (FieldNotFoundException) { boardNo = "?"; } try { int[,] ddTable = table.GetDDTable(); if (ddTable != null) { Console.WriteLine("Board " + boardNo); DDTable.PrintTable(ddTable); ParScore par = new ParScore(board); ParContract contract = par.GetParContract(ddTable); Console.WriteLine(contract); Console.WriteLine(); board.SaveDDTable(ddTable); board.SaveParContract(contract); file.WriteBoard(board); } else { String error = "unable to determine DD table for board " + boardNo; errors.Add(String.Format("[{0}] {1}", filename, error)); Console.WriteLine("ERROR: " + error); } } catch (DllNotFoundException) { throw; } catch (Exception e) { errors.Add(String.Format("[{0}:{1}] {2}", filename, boardNo, e.Message)); Console.WriteLine("ERROR: " + e.Message); } } file.Save(); } catch (DllNotFoundException e) { errors.Add("libbcalcdds.dll could not be loaded - make sure it's present in application directory!"); Console.WriteLine("ERROR: " + e.Message); break; } catch (Exception e) { errors.Add(e.Message); Console.WriteLine("ERROR: " + e.Message); } } if (errors.Count > 0) { Console.WriteLine("Following ERRORs occured:"); foreach (String error in errors) { Console.WriteLine(error); } Console.WriteLine("Press any key to continue..."); Console.ReadKey(); } } } } }