├── .gitattributes ├── DirectedGraphEditor ├── App.config ├── DirectedGraphEditor.csproj ├── Form1.Designer.cs ├── Form1.cs ├── Form1.resx ├── Helper.cs ├── Program.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ └── Settings.settings └── bin │ └── Release │ ├── DirectedGraphEditor.exe │ ├── DirectedGraphEditor.exe.config │ ├── DirectedGraphLibWV.dll │ └── bin │ ├── Pathplan.dll │ ├── cdt.dll │ ├── cgraph.dll │ ├── config6 │ ├── dot.exe │ ├── freetype6.dll │ ├── gvc.dll │ ├── gvplugin_dot_layout.dll │ ├── gvplugin_pango.dll │ ├── iconv.dll │ ├── libcairo-2.dll │ ├── libexpat.dll │ ├── libfontconfig-1.dll │ ├── libfreetype-6.dll │ ├── libglib-2.0-0.dll │ ├── libgmodule-2.0-0.dll │ ├── libgobject-2.0-0.dll │ ├── libgthread-2.0-0.dll │ ├── libgtk-win32-2.0-0.dll │ ├── libgtkglext-win32-1.0-0.dll │ ├── libltdl-3.dll │ ├── libpango-1.0-0.dll │ ├── libpangocairo-1.0-0.dll │ ├── libpangoft2-1.0-0.dll │ ├── libpangowin32-1.0-0.dll │ ├── libpng12.dll │ ├── libpng14-14.dll │ ├── libxml2.dll │ ├── ltdl.dll │ └── zlib1.dll ├── DirectedGraphLibWV ├── DirectedGraphLibWV.csproj ├── Graph.cs ├── Properties │ └── AssemblyInfo.cs └── bin │ └── Release │ └── DirectedGraphLibWV.dll ├── DirectedGraphs.sln ├── DirectedGraphs.v11.suo ├── How to write a basic control flow decompiler.pdf ├── README.md └── XEXDecompiler3 ├── ABSBlock.cs ├── ACSESERegion.cs ├── ASMFile.cs ├── App.config ├── CodeBlock.cs ├── CodeLine.cs ├── Decompiler.cs ├── Form1.Designer.cs ├── Form1.cs ├── Form1.resx ├── Program.cs ├── Properties ├── AssemblyInfo.cs ├── Resources.Designer.cs ├── Resources.resx ├── Settings.Designer.cs └── Settings.settings ├── SubFunction.cs ├── XEXDecompiler3.csproj └── bin └── Release ├── DirectedGraphLibWV.dll ├── XEXDecompiler3.exe ├── XEXDecompiler3.exe.config └── bin ├── Pathplan.dll ├── cdt.dll ├── cgraph.dll ├── config6 ├── dot.exe ├── freetype6.dll ├── gvc.dll ├── gvplugin_dot_layout.dll ├── gvplugin_pango.dll ├── iconv.dll ├── libcairo-2.dll ├── libexpat.dll ├── libfontconfig-1.dll ├── libfreetype-6.dll ├── libglib-2.0-0.dll ├── libgmodule-2.0-0.dll ├── libgobject-2.0-0.dll ├── libgthread-2.0-0.dll ├── libgtk-win32-2.0-0.dll ├── libgtkglext-win32-1.0-0.dll ├── libltdl-3.dll ├── libpango-1.0-0.dll ├── libpangocairo-1.0-0.dll ├── libpangoft2-1.0-0.dll ├── libpangowin32-1.0-0.dll ├── libpng12.dll ├── libpng14-14.dll ├── libxml2.dll ├── ltdl.dll └── zlib1.dll /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | 7 | # Standard to msysgit 8 | *.doc diff=astextplain 9 | *.DOC diff=astextplain 10 | *.docx diff=astextplain 11 | *.DOCX diff=astextplain 12 | *.dot diff=astextplain 13 | *.DOT diff=astextplain 14 | *.pdf diff=astextplain 15 | *.PDF diff=astextplain 16 | *.rtf diff=astextplain 17 | *.RTF diff=astextplain 18 | -------------------------------------------------------------------------------- /DirectedGraphEditor/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /DirectedGraphEditor/DirectedGraphEditor.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {03830A61-9A29-4BEA-9A8B-15B308B73BC7} 8 | WinExe 9 | Properties 10 | DirectedGraphEditor 11 | DirectedGraphEditor 12 | v4.5 13 | 512 14 | 15 | 16 | AnyCPU 17 | true 18 | full 19 | false 20 | bin\Debug\ 21 | DEBUG;TRACE 22 | prompt 23 | 4 24 | 25 | 26 | AnyCPU 27 | pdbonly 28 | true 29 | bin\Release\ 30 | TRACE 31 | prompt 32 | 4 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | Form 49 | 50 | 51 | Form1.cs 52 | 53 | 54 | 55 | 56 | Form1.cs 57 | 58 | 59 | ResXFileCodeGenerator 60 | Resources.Designer.cs 61 | Designer 62 | 63 | 64 | True 65 | Resources.resx 66 | 67 | 68 | SettingsSingleFileGenerator 69 | Settings.Designer.cs 70 | 71 | 72 | True 73 | Settings.settings 74 | True 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | {e9b141a7-11bb-4f22-9de2-e4399de37d95} 83 | DirectedGraphLibWV 84 | 85 | 86 | 87 | 94 | -------------------------------------------------------------------------------- /DirectedGraphEditor/Form1.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Data; 5 | using System.Diagnostics; 6 | using System.Drawing; 7 | using System.IO; 8 | using System.Linq; 9 | using System.Text; 10 | using System.Threading.Tasks; 11 | using System.Windows.Forms; 12 | using DirectedGraphLibWV; 13 | 14 | namespace DirectedGraphEditor 15 | { 16 | public partial class Form1 : Form 17 | { 18 | public Graph graph = null; 19 | 20 | public Form1() 21 | { 22 | InitializeComponent(); 23 | } 24 | 25 | private void Form1_Load(object sender, EventArgs e) 26 | { 27 | NewFile(); 28 | } 29 | 30 | private void newToolStripMenuItem_Click(object sender, EventArgs e) 31 | { 32 | NewFile(); 33 | } 34 | 35 | public void NewFile() 36 | { 37 | graph = new Graph(); 38 | graph.nodes.Add(new Node("Hello")); 39 | graph.nodes.Add(new Node("World")); 40 | graph.nodes.Add(new Node("!")); 41 | graph.edges.Add(new Edge(0, 1, "A")); 42 | graph.edges.Add(new Edge(0, 2, "B")); 43 | graph.edges.Add(new Edge(1, 2, "C")); 44 | RefreshStuff(); 45 | } 46 | 47 | public void RefreshStuff() 48 | { 49 | if (graph == null) 50 | return; 51 | listBox1.Items.Clear(); 52 | for (int i = 0; i < graph.nodes.Count; i++) 53 | listBox1.Items.Add("Node" + i + " : " + graph.nodes[i].data.ToString()); 54 | listBox2.Items.Clear(); 55 | for (int i = 0; i < graph.edges.Count; i++) 56 | listBox2.Items.Add("Edge" + i + " : " + graph.edges[i].start + " - " + graph.edges[i].end + " - \"" + graph.edges[i].text + "\""); 57 | comboBox1.Items.Clear(); 58 | comboBox2.Items.Clear(); 59 | for (int i = 0; i < graph.nodes.Count; i++) 60 | { 61 | comboBox1.Items.Add(i.ToString()); 62 | comboBox2.Items.Add(i.ToString()); 63 | } 64 | Render(); 65 | } 66 | 67 | public void Render() 68 | { 69 | pb1.Image = null; 70 | string path = Path.GetDirectoryName(Application.ExecutablePath) + "\\bin\\"; 71 | if (File.Exists(path + "dot.exe")) 72 | { 73 | Delete(path + "graph.dot"); 74 | Delete(path + "graph.png"); 75 | graph.GenerateDotFile(path + "graph.dot"); 76 | RunShell(path + "dot.exe", "\"" + path + "graph.dot\" -Tpng -o graph.png"); 77 | if (File.Exists(path + "graph.png")) 78 | pb1.Image = LoadImageCopy(path + "graph.png"); 79 | Delete(path + "graph.dot"); 80 | Delete(path + "graph.png"); 81 | } 82 | } 83 | 84 | public void Delete(string file) 85 | { 86 | if (File.Exists(file)) 87 | File.Delete(file); 88 | } 89 | 90 | public string RunShell(string file, string command) 91 | { 92 | Process process = new System.Diagnostics.Process(); 93 | ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); 94 | startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 95 | startInfo.FileName = file; 96 | startInfo.Arguments = command; 97 | startInfo.CreateNoWindow = true; 98 | startInfo.UseShellExecute = false; 99 | startInfo.WorkingDirectory = Path.GetDirectoryName(file) + "\\"; 100 | startInfo.RedirectStandardOutput = true; 101 | startInfo.RedirectStandardError = true; 102 | process.StartInfo = startInfo; 103 | process.Start(); 104 | process.WaitForExit(); 105 | return process.StandardOutput.ReadToEnd(); 106 | } 107 | 108 | public static Bitmap LoadImageCopy(string path) 109 | { 110 | FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); 111 | Bitmap loaded = new Bitmap(fs); 112 | Bitmap result = (Bitmap)loaded.Clone(); 113 | fs.Close(); 114 | GC.Collect(); 115 | return result; 116 | } 117 | 118 | private void contextMenuStrip1_Opening(object sender, CancelEventArgs e) 119 | { 120 | removeNodeToolStripMenuItem.Enabled = (listBox1.SelectedIndex != -1 && listBox1.Items.Count > 1); 121 | } 122 | 123 | private void addNodeToolStripMenuItem_Click(object sender, EventArgs e) 124 | { 125 | graph.addNode(new Node(), listBox1.SelectedIndex); 126 | RefreshStuff(); 127 | } 128 | 129 | private void removeNodeToolStripMenuItem_Click(object sender, EventArgs e) 130 | { 131 | graph.removeNode(listBox1.SelectedIndex); 132 | RefreshStuff(); 133 | } 134 | 135 | private void listBox2_SelectedIndexChanged(object sender, EventArgs e) 136 | { 137 | int n = listBox2.SelectedIndex; 138 | if (n == -1) 139 | return; 140 | Edge ed = graph.edges[n]; 141 | comboBox1.SelectedIndex = ed.start; 142 | comboBox2.SelectedIndex = ed.end; 143 | textBox2.Text = ed.text; 144 | } 145 | 146 | private void addEdgeToolStripMenuItem_Click(object sender, EventArgs e) 147 | { 148 | graph.edges.Add(new Edge(0, 0, "")); 149 | RefreshStuff(); 150 | } 151 | 152 | private void contextMenuStrip2_Opening(object sender, CancelEventArgs e) 153 | { 154 | removeEdgeToolStripMenuItem.Enabled = (listBox2.SelectedIndex != -1); 155 | } 156 | 157 | private void removeEdgeToolStripMenuItem_Click(object sender, EventArgs e) 158 | { 159 | int n = listBox2.SelectedIndex; 160 | if (n == -1) 161 | return; 162 | graph.edges.RemoveAt(n); 163 | RefreshStuff(); 164 | } 165 | 166 | private void button1_Click(object sender, EventArgs e) 167 | { 168 | int n = listBox2.SelectedIndex; 169 | if (n == -1) 170 | return; 171 | graph.edges[n].start = comboBox1.SelectedIndex; 172 | graph.edges[n].end = comboBox2.SelectedIndex; 173 | graph.edges[n].text = textBox2.Text; 174 | RefreshStuff(); 175 | } 176 | 177 | private void saveToolStripMenuItem_Click(object sender, EventArgs e) 178 | { 179 | if (graph == null) 180 | return; 181 | SaveFileDialog d = new SaveFileDialog(); 182 | d.Filter = "*.gr|*.gr"; 183 | if (d.ShowDialog() == System.Windows.Forms.DialogResult.OK) 184 | { 185 | graph.Save(d.FileName); 186 | MessageBox.Show("Done."); 187 | } 188 | } 189 | 190 | private void openToolStripMenuItem_Click(object sender, EventArgs e) 191 | { 192 | if (graph == null) 193 | return; 194 | OpenFileDialog d = new OpenFileDialog(); 195 | d.Filter = "*.gr|*.gr"; 196 | if (d.ShowDialog() == System.Windows.Forms.DialogResult.OK) 197 | { 198 | graph.Load(d.FileName); 199 | RefreshStuff(); 200 | } 201 | } 202 | 203 | private void listBox1_SelectedIndexChanged(object sender, EventArgs e) 204 | { 205 | int n = listBox1.SelectedIndex; 206 | if (n == -1) 207 | return; 208 | textBox1.Text = graph.nodes[n].data.ToString(); 209 | } 210 | 211 | private void button2_Click(object sender, EventArgs e) 212 | { 213 | int n = listBox1.SelectedIndex; 214 | if (n == -1) 215 | return; 216 | graph.nodes[n].data = textBox1.Text; 217 | RefreshStuff(); 218 | } 219 | 220 | public void Log(string s) 221 | { 222 | rtb1.Invoke((MethodInvoker)delegate() 223 | { 224 | rtb1.AppendText(s + "\n"); 225 | rtb1.SelectionStart = rtb1.Text.Length; 226 | rtb1.ScrollToCaret(); 227 | }); 228 | } 229 | 230 | private void getPreOrderToolStripMenuItem_Click(object sender, EventArgs e) 231 | { 232 | if (graph == null) 233 | return; 234 | Log(Helper.ListToText("Pre Order", graph.getOrder(false))); 235 | } 236 | 237 | private void getPostOrderToolStripMenuItem_Click(object sender, EventArgs e) 238 | { 239 | if (graph == null) 240 | return; 241 | Log(Helper.ListToText("Post Order", graph.getOrder(true))); 242 | } 243 | 244 | private void getDominatorTreeToolStripMenuItem_Click(object sender, EventArgs e) 245 | { 246 | if (graph == null) 247 | return; 248 | Log(Helper.TreeToText(graph.getDominatorTree(false)).Trim()); 249 | } 250 | 251 | private void getPostDominatorTreeToolStripMenuItem_Click(object sender, EventArgs e) 252 | { 253 | if (graph == null) 254 | return; 255 | Log(Helper.TreeToText(graph.getDominatorTree(true)).Trim()); 256 | } 257 | 258 | private void checkForCyclesToolStripMenuItem_Click(object sender, EventArgs e) 259 | { 260 | if (graph == null) 261 | return; 262 | Log("Is cyclic:" + graph.isCyclic()); 263 | } 264 | 265 | private void getStronglyConnectedComponentsToolStripMenuItem_Click(object sender, EventArgs e) 266 | { 267 | if (graph == null) 268 | return; 269 | List> clist = graph.getAllStronglyConnectedComponents(); 270 | int count = 0; 271 | foreach (List component in clist) 272 | { 273 | string s = (count++) + ". SCComponent = {"; 274 | for (int i = 0; i < component.Count - 1; i++) 275 | s += component[i] + ", "; 276 | s += component[component.Count - 1] + "}"; 277 | Log(s); 278 | } 279 | } 280 | 281 | private void getAllSimpleCyclePathsToolStripMenuItem_Click(object sender, EventArgs e) 282 | { 283 | if (graph == null) 284 | return; 285 | List> clist = graph.getAllStronglyConnectedComponents(); 286 | int count = 0; 287 | foreach (List component in clist) 288 | { 289 | if (component.Count > 1) 290 | { 291 | Log("Loop paths for component " + count + " :"); 292 | List> cyclist = graph.getAllSimpleCyclePaths(component); 293 | int count2 = 0; 294 | foreach (List path in cyclist) 295 | { 296 | string s = (count2++) + ". Path = {"; 297 | for (int i = 0; i < path.Count - 1; i++) 298 | s += path[i] + ", "; 299 | s += path[path.Count - 1] + "}"; 300 | Log(s); 301 | } 302 | } 303 | count++; 304 | } 305 | } 306 | 307 | private void getAllSimpleLoopsToolStripMenuItem_Click(object sender, EventArgs e) 308 | { 309 | if (graph == null) 310 | return; 311 | List> clist = graph.getAllStronglyConnectedComponents(); 312 | int count = 0; 313 | foreach (List component in clist) 314 | { 315 | if (component.Count > 1) 316 | { 317 | Log("Simple Loops for component " + count + " :"); 318 | List> loops = graph.getAllSimpleLoops(component); 319 | int count2 = 0; 320 | foreach (List loop in loops) 321 | { 322 | string s = (count2) + ". Loop Header = " + loop[0] + ", Loop Body = {"; 323 | for (int i = 1; i < loop.Count - 1; i++) 324 | s += loop[i] + ", "; 325 | if (loop.Count > 1) 326 | s += loop[loop.Count - 1] + "}"; 327 | else 328 | s += "}"; 329 | Log(s); 330 | count2++; 331 | } 332 | } 333 | count++; 334 | } 335 | } 336 | 337 | private void getAllBackedgesToolStripMenuItem_Click(object sender, EventArgs e) 338 | { 339 | if (graph == null) 340 | return; 341 | graph.getOrder(true); 342 | Log("Backedges:"); 343 | for (int i = 0; i < graph.edges.Count; i++) 344 | if (graph.edges[i].backEdge) 345 | Log("Edge " + i); 346 | } 347 | 348 | private void getAllSimpleLoopInformationToolStripMenuItem_Click(object sender, EventArgs e) 349 | { 350 | if (graph == null) 351 | return; 352 | List> clist = graph.getAllStronglyConnectedComponents(); 353 | int count = 0; 354 | foreach (List component in clist) 355 | { 356 | if (component.Count > 1) 357 | { 358 | Log("Simple Loop Information for component " + count + " :"); 359 | List> loops = graph.getAllSimpleLoops(component); 360 | int count2 = 0; 361 | foreach (List loop in loops) 362 | { 363 | Loop l = graph.getLoopInformation(loop); 364 | string s = (count2) + ". Loop\n Header : " + l.header + "\n"; 365 | s +=" Body : {"; 366 | foreach (LoopPart p in l.body) 367 | s += "\n " + p.ToString(); 368 | s += "\n }\n"; 369 | s += " HasMultipleExits=" + l.isMultiExit; 370 | Log(s); 371 | count2++; 372 | } 373 | } 374 | count++; 375 | } 376 | } 377 | 378 | private void refreshToolStripMenuItem_Click(object sender, EventArgs e) 379 | { 380 | RefreshStuff(); 381 | } 382 | 383 | private void getAllReachingPathsToolStripMenuItem_Click(object sender, EventArgs e) 384 | { 385 | if (graph == null) 386 | return; 387 | for (int i = 1; i < graph.nodes.Count; i++) 388 | { 389 | List> paths = graph.getAllReachingPaths(i); 390 | Log("Reaching paths for Node " + i + " : "); 391 | foreach (List path in paths) 392 | { 393 | if (path.Count > 0) 394 | { 395 | StringBuilder sb = new StringBuilder(); 396 | sb.Append(" " + path[0]); 397 | for (int j = 1; j < path.Count; j++) 398 | sb.Append("->" + path[j]); 399 | Log(sb.ToString()); 400 | } 401 | } 402 | } 403 | } 404 | 405 | private void saveImageToolStripMenuItem_Click(object sender, EventArgs e) 406 | { 407 | if (pb1.Image != null) 408 | { 409 | SaveFileDialog d = new SaveFileDialog(); 410 | d.Filter = "*.png|*.png"; 411 | if (d.ShowDialog() == System.Windows.Forms.DialogResult.OK) 412 | { 413 | pb1.Image.Save(d.FileName, System.Drawing.Imaging.ImageFormat.Png); 414 | MessageBox.Show("Done."); 415 | } 416 | } 417 | } 418 | 419 | private void getAllSESERegionsToolStripMenuItem_Click(object sender, EventArgs e) 420 | { 421 | if (graph == null) 422 | return; 423 | List> list = graph.getAllSESERegions(); 424 | Log("All SESE possible regions:"); 425 | foreach (List region in list) 426 | { 427 | StringBuilder sb = new StringBuilder(); 428 | sb.Append(" "); 429 | sb.Append(region[0]); 430 | for (int i = 1; i < region.Count; i++) 431 | sb.Append(", " + region[i]); 432 | Log(sb.ToString()); 433 | } 434 | } 435 | 436 | private void getTopologicalOrderToolStripMenuItem_Click(object sender, EventArgs e) 437 | { 438 | if (graph == null) 439 | return; 440 | Log(Helper.ListToText("Topoligical Order", graph.getTopogicalOrder())); 441 | } 442 | } 443 | } 444 | -------------------------------------------------------------------------------- /DirectedGraphEditor/Form1.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 17, 17 122 | 123 | 124 | 126, 17 125 | 126 | 127 | 271, 17 128 | 129 | -------------------------------------------------------------------------------- /DirectedGraphEditor/Helper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace DirectedGraphEditor 9 | { 10 | public static class Helper 11 | { 12 | public static void WriteInt32(Stream s, int i) 13 | { 14 | s.Write(BitConverter.GetBytes(i), 0, 4); 15 | } 16 | 17 | public static int ReadInt32(Stream s) 18 | { 19 | byte[] buff = new byte[4]; 20 | s.Read(buff, 0, 4); 21 | return BitConverter.ToInt32(buff, 0); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /DirectedGraphEditor/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using System.Windows.Forms; 6 | 7 | namespace DirectedGraphEditor 8 | { 9 | static class Program 10 | { 11 | /// 12 | /// Der Haupteinstiegspunkt für die Anwendung. 13 | /// 14 | [STAThread] 15 | static void Main() 16 | { 17 | Application.EnableVisualStyles(); 18 | Application.SetCompatibleTextRenderingDefault(false); 19 | Application.Run(new Form1()); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /DirectedGraphEditor/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // Allgemeine Informationen über eine Assembly werden über die folgenden 6 | // Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, 7 | // die mit einer Assembly verknüpft sind. 8 | [assembly: AssemblyTitle("DirectedGraphEditor")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("DirectedGraphEditor")] 13 | [assembly: AssemblyCopyright("Copyright © 2017")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar 18 | // für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von 19 | // COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest. 20 | [assembly: ComVisible(false)] 21 | 22 | // Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird 23 | [assembly: Guid("972d15e3-9ba2-4bc0-b57b-2e263d593c8b")] 24 | 25 | // Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: 26 | // 27 | // Hauptversion 28 | // Nebenversion 29 | // Buildnummer 30 | // Revision 31 | // 32 | // Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern 33 | // übernehmen, indem Sie "*" eingeben: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /DirectedGraphEditor/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // Dieser Code wurde von einem Tool generiert. 4 | // Laufzeitversion:4.0.30319.42000 5 | // 6 | // Änderungen an dieser Datei können fehlerhaftes Verhalten verursachen und gehen verloren, wenn 7 | // der Code neu generiert wird. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace DirectedGraphEditor.Properties 12 | { 13 | 14 | 15 | /// 16 | /// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. 17 | /// 18 | // Diese Klasse wurde von der StronglyTypedResourceBuilder-Klasse 19 | // über ein Tool wie ResGen oder Visual Studio automatisch generiert. 20 | // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen 21 | // mit der Option /str erneut aus, oder erstellen Sie Ihr VS-Projekt neu. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources 26 | { 27 | 28 | private static global::System.Resources.ResourceManager resourceMan; 29 | 30 | private static global::System.Globalization.CultureInfo resourceCulture; 31 | 32 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 33 | internal Resources() 34 | { 35 | } 36 | 37 | /// 38 | /// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. 39 | /// 40 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 41 | internal static global::System.Resources.ResourceManager ResourceManager 42 | { 43 | get 44 | { 45 | if ((resourceMan == null)) 46 | { 47 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("DirectedGraphEditor.Properties.Resources", typeof(Resources).Assembly); 48 | resourceMan = temp; 49 | } 50 | return resourceMan; 51 | } 52 | } 53 | 54 | /// 55 | /// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle 56 | /// Ressourcenlookups, die diese stark typisierte Ressourcenklasse verwenden. 57 | /// 58 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 59 | internal static global::System.Globalization.CultureInfo Culture 60 | { 61 | get 62 | { 63 | return resourceCulture; 64 | } 65 | set 66 | { 67 | resourceCulture = value; 68 | } 69 | } 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /DirectedGraphEditor/Properties/Resources.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | text/microsoft-resx 107 | 108 | 109 | 2.0 110 | 111 | 112 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 113 | 114 | 115 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | -------------------------------------------------------------------------------- /DirectedGraphEditor/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace DirectedGraphEditor.Properties 12 | { 13 | 14 | 15 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 16 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] 17 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase 18 | { 19 | 20 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 21 | 22 | public static Settings Default 23 | { 24 | get 25 | { 26 | return defaultInstance; 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /DirectedGraphEditor/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /DirectedGraphEditor/bin/Release/DirectedGraphEditor.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/DirectedGraphEditor/bin/Release/DirectedGraphEditor.exe -------------------------------------------------------------------------------- /DirectedGraphEditor/bin/Release/DirectedGraphEditor.exe.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /DirectedGraphEditor/bin/Release/DirectedGraphLibWV.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/DirectedGraphEditor/bin/Release/DirectedGraphLibWV.dll -------------------------------------------------------------------------------- /DirectedGraphEditor/bin/Release/bin/Pathplan.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/DirectedGraphEditor/bin/Release/bin/Pathplan.dll -------------------------------------------------------------------------------- /DirectedGraphEditor/bin/Release/bin/cdt.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/DirectedGraphEditor/bin/Release/bin/cdt.dll -------------------------------------------------------------------------------- /DirectedGraphEditor/bin/Release/bin/cgraph.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/DirectedGraphEditor/bin/Release/bin/cgraph.dll -------------------------------------------------------------------------------- /DirectedGraphEditor/bin/Release/bin/config6: -------------------------------------------------------------------------------- 1 | # This file was generated by "dot -c" at time of install. 2 | 3 | # You may temporarily disable a plugin by removing or commenting out 4 | # a line in this file, or you can modify its "quality" value to affect 5 | # default plugin selection. 6 | 7 | # Manual edits to this file **will be lost** on upgrade. 8 | 9 | gvplugin_core.dll core { 10 | device { 11 | dot:dot 1 12 | gv:dot 1 13 | canon:dot 1 14 | plain:dot 1 15 | plain-ext:dot 1 16 | xdot:xdot 1 17 | xdot1.2:xdot 1 18 | xdot1.4:xdot 1 19 | } 20 | device { 21 | fig:fig 1 22 | } 23 | device { 24 | ismap:map 1 25 | cmap:map 1 26 | imap:map 1 27 | cmapx:map 1 28 | imap_np:map 1 29 | cmapx_np:map 1 30 | } 31 | device { 32 | ps:ps 1 33 | ps2:ps 1 34 | eps:ps 1 35 | } 36 | device { 37 | svg:svg 1 38 | svgz:svg 1 39 | } 40 | device { 41 | tk:tk 1 42 | } 43 | device { 44 | vml:vml 1 45 | vmlz:vml 1 46 | } 47 | device { 48 | pic:pic -1 49 | } 50 | device { 51 | pov:pov 1 52 | } 53 | render { 54 | dot 1 55 | xdot 1 56 | } 57 | render { 58 | fig 1 59 | } 60 | render { 61 | map 1 62 | } 63 | render { 64 | ps 1 65 | } 66 | render { 67 | svg 1 68 | } 69 | render { 70 | tk 1 71 | } 72 | render { 73 | vml 1 74 | } 75 | render { 76 | pic -1 77 | } 78 | render { 79 | pov 1 80 | } 81 | loadimage { 82 | png:svg 1 83 | gif:svg 1 84 | jpeg:svg 1 85 | jpe:svg 1 86 | jpg:svg 1 87 | png:fig 1 88 | gif:fig 1 89 | jpeg:fig 1 90 | jpe:fig 1 91 | jpg:fig 1 92 | png:vrml 1 93 | gif:vrml 1 94 | jpeg:vrml 1 95 | jpe:vrml 1 96 | jpg:vrml 1 97 | eps:ps 1 98 | ps:ps 1 99 | (lib):ps 1 100 | png:map 1 101 | gif:map 1 102 | jpeg:map 1 103 | jpe:map 1 104 | jpg:map 1 105 | ps:map 1 106 | eps:map 1 107 | svg:map 1 108 | png:dot 1 109 | gif:dot 1 110 | jpeg:dot 1 111 | jpe:dot 1 112 | jpg:dot 1 113 | ps:dot 1 114 | eps:dot 1 115 | svg:dot 1 116 | png:xdot 1 117 | gif:xdot 1 118 | jpeg:xdot 1 119 | jpe:xdot 1 120 | jpg:xdot 1 121 | ps:xdot 1 122 | eps:xdot 1 123 | svg:xdot 1 124 | svg:svg 1 125 | png:vml 1 126 | gif:vml 1 127 | jpeg:vml 1 128 | jpe:vml 1 129 | jpg:vml 1 130 | gif:tk 1 131 | } 132 | } 133 | gvplugin_dot_layout.dll dot_layout { 134 | layout { 135 | dot 0 136 | } 137 | } 138 | gvplugin_gd.dll gd { 139 | render { 140 | gd 1 141 | } 142 | render { 143 | vrml 1 144 | } 145 | textlayout { 146 | textlayout 2 147 | } 148 | loadimage { 149 | gd:gd 1 150 | gd2:gd 1 151 | gif:gd 1 152 | jpeg:gd 1 153 | jpe:gd 1 154 | jpg:gd 1 155 | png:gd 1 156 | gd:ps 1 157 | #FAILS gd:lasi 1 158 | gd2:ps 1 159 | #FAILS gd2:lasi 1 160 | gif:ps 1 161 | #FAILS gif:lasi 1 162 | jpeg:ps 1 163 | jpg:ps 1 164 | jpe:ps 1 165 | #FAILS jpeg:lasi 1 166 | #FAILS jpg:lasi 1 167 | #FAILS jpe:lasi 1 168 | png:ps 1 169 | #FAILS png:lasi 1 170 | gd:cairo 1 171 | gd2:cairo 1 172 | gif:cairo 1 173 | jpeg:cairo 1 174 | jpg:cairo 1 175 | jpe:cairo 1 176 | png:cairo -1 177 | } 178 | device { 179 | gif:cairo 10 180 | wbmp:cairo 5 181 | jpe:cairo 5 182 | jpeg:cairo 5 183 | jpg:cairo 5 184 | png:cairo 5 185 | gd:cairo 5 186 | gd2:cairo 5 187 | } 188 | device { 189 | gif:gd 1 190 | wbmp:gd 1 191 | jpe:gd 1 192 | jpeg:gd 1 193 | jpg:gd 1 194 | png:gd 1 195 | gd:gd 1 196 | gd2:gd 1 197 | } 198 | device { 199 | vrml:vrml 1 200 | } 201 | } 202 | gvplugin_gdiplus.dll gdiplus { 203 | render { 204 | gdiplus 1 205 | } 206 | textlayout { 207 | textlayout 8 208 | } 209 | loadimage { 210 | bmp:gdiplus 8 211 | gif:gdiplus 8 212 | jpe:gdiplus 8 213 | jpeg:gdiplus 8 214 | jpg:gdiplus 8 215 | png:gdiplus 8 216 | } 217 | device { 218 | metafile:gdiplus 8 219 | bmp:gdiplus 8 220 | emf:gdiplus 8 221 | emfplus:gdiplus 8 222 | gif:gdiplus 8 223 | jpe:gdiplus 8 224 | jpeg:gdiplus 8 225 | jpg:gdiplus 8 226 | png:gdiplus 8 227 | tif:gdiplus 8 228 | tiff:gdiplus 8 229 | } 230 | device { 231 | bmp:cairo 8 232 | gif:cairo 8 233 | jpe:cairo 8 234 | jpeg:cairo 8 235 | jpg:cairo 8 236 | png:cairo 8 237 | tif:cairo 8 238 | tiff:cairo 8 239 | } 240 | } 241 | gvplugin_neato_layout.dll neato_layout { 242 | layout { 243 | neato 0 244 | fdp 0 245 | sfdp 0 246 | twopi 0 247 | circo 0 248 | patchwork 0 249 | osage 0 250 | nop 0 251 | nop1 0 252 | nop2 0 253 | } 254 | } 255 | gvplugin_pango.dll cairo { 256 | render { 257 | cairo 10 258 | } 259 | textlayout { 260 | textlayout 10 261 | } 262 | loadimage { 263 | png:cairo 1 264 | #FAILS png:lasi 2 265 | png:ps 2 266 | } 267 | device { 268 | png:cairo 10 269 | ps:cairo -10 270 | pdf:cairo 10 271 | svg:cairo -10 272 | } 273 | } 274 | -------------------------------------------------------------------------------- /DirectedGraphEditor/bin/Release/bin/dot.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/DirectedGraphEditor/bin/Release/bin/dot.exe -------------------------------------------------------------------------------- /DirectedGraphEditor/bin/Release/bin/freetype6.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/DirectedGraphEditor/bin/Release/bin/freetype6.dll -------------------------------------------------------------------------------- /DirectedGraphEditor/bin/Release/bin/gvc.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/DirectedGraphEditor/bin/Release/bin/gvc.dll -------------------------------------------------------------------------------- /DirectedGraphEditor/bin/Release/bin/gvplugin_dot_layout.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/DirectedGraphEditor/bin/Release/bin/gvplugin_dot_layout.dll -------------------------------------------------------------------------------- /DirectedGraphEditor/bin/Release/bin/gvplugin_pango.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/DirectedGraphEditor/bin/Release/bin/gvplugin_pango.dll -------------------------------------------------------------------------------- /DirectedGraphEditor/bin/Release/bin/iconv.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/DirectedGraphEditor/bin/Release/bin/iconv.dll -------------------------------------------------------------------------------- /DirectedGraphEditor/bin/Release/bin/libcairo-2.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/DirectedGraphEditor/bin/Release/bin/libcairo-2.dll -------------------------------------------------------------------------------- /DirectedGraphEditor/bin/Release/bin/libexpat.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/DirectedGraphEditor/bin/Release/bin/libexpat.dll -------------------------------------------------------------------------------- /DirectedGraphEditor/bin/Release/bin/libfontconfig-1.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/DirectedGraphEditor/bin/Release/bin/libfontconfig-1.dll -------------------------------------------------------------------------------- /DirectedGraphEditor/bin/Release/bin/libfreetype-6.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/DirectedGraphEditor/bin/Release/bin/libfreetype-6.dll -------------------------------------------------------------------------------- /DirectedGraphEditor/bin/Release/bin/libglib-2.0-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/DirectedGraphEditor/bin/Release/bin/libglib-2.0-0.dll -------------------------------------------------------------------------------- /DirectedGraphEditor/bin/Release/bin/libgmodule-2.0-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/DirectedGraphEditor/bin/Release/bin/libgmodule-2.0-0.dll -------------------------------------------------------------------------------- /DirectedGraphEditor/bin/Release/bin/libgobject-2.0-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/DirectedGraphEditor/bin/Release/bin/libgobject-2.0-0.dll -------------------------------------------------------------------------------- /DirectedGraphEditor/bin/Release/bin/libgthread-2.0-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/DirectedGraphEditor/bin/Release/bin/libgthread-2.0-0.dll -------------------------------------------------------------------------------- /DirectedGraphEditor/bin/Release/bin/libgtk-win32-2.0-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/DirectedGraphEditor/bin/Release/bin/libgtk-win32-2.0-0.dll -------------------------------------------------------------------------------- /DirectedGraphEditor/bin/Release/bin/libgtkglext-win32-1.0-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/DirectedGraphEditor/bin/Release/bin/libgtkglext-win32-1.0-0.dll -------------------------------------------------------------------------------- /DirectedGraphEditor/bin/Release/bin/libltdl-3.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/DirectedGraphEditor/bin/Release/bin/libltdl-3.dll -------------------------------------------------------------------------------- /DirectedGraphEditor/bin/Release/bin/libpango-1.0-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/DirectedGraphEditor/bin/Release/bin/libpango-1.0-0.dll -------------------------------------------------------------------------------- /DirectedGraphEditor/bin/Release/bin/libpangocairo-1.0-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/DirectedGraphEditor/bin/Release/bin/libpangocairo-1.0-0.dll -------------------------------------------------------------------------------- /DirectedGraphEditor/bin/Release/bin/libpangoft2-1.0-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/DirectedGraphEditor/bin/Release/bin/libpangoft2-1.0-0.dll -------------------------------------------------------------------------------- /DirectedGraphEditor/bin/Release/bin/libpangowin32-1.0-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/DirectedGraphEditor/bin/Release/bin/libpangowin32-1.0-0.dll -------------------------------------------------------------------------------- /DirectedGraphEditor/bin/Release/bin/libpng12.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/DirectedGraphEditor/bin/Release/bin/libpng12.dll -------------------------------------------------------------------------------- /DirectedGraphEditor/bin/Release/bin/libpng14-14.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/DirectedGraphEditor/bin/Release/bin/libpng14-14.dll -------------------------------------------------------------------------------- /DirectedGraphEditor/bin/Release/bin/libxml2.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/DirectedGraphEditor/bin/Release/bin/libxml2.dll -------------------------------------------------------------------------------- /DirectedGraphEditor/bin/Release/bin/ltdl.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/DirectedGraphEditor/bin/Release/bin/ltdl.dll -------------------------------------------------------------------------------- /DirectedGraphEditor/bin/Release/bin/zlib1.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/DirectedGraphEditor/bin/Release/bin/zlib1.dll -------------------------------------------------------------------------------- /DirectedGraphLibWV/DirectedGraphLibWV.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {E9B141A7-11BB-4F22-9DE2-E4399DE37D95} 8 | Library 9 | Properties 10 | DirectedGraphLibWV 11 | DirectedGraphLibWV 12 | v4.5 13 | 512 14 | 15 | 16 | true 17 | full 18 | false 19 | bin\Debug\ 20 | DEBUG;TRACE 21 | prompt 22 | 4 23 | 24 | 25 | pdbonly 26 | true 27 | bin\Release\ 28 | TRACE 29 | prompt 30 | 4 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 54 | -------------------------------------------------------------------------------- /DirectedGraphLibWV/Graph.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | using System.Windows.Forms; 8 | 9 | namespace DirectedGraphLibWV 10 | { 11 | public class Graph 12 | { 13 | public List nodes; 14 | public List edges; 15 | public Graph() 16 | { 17 | nodes = new List(); 18 | edges = new List(); 19 | } 20 | 21 | public void GenerateDotFile(string path) 22 | { 23 | StringBuilder sb = new StringBuilder(); 24 | sb.AppendLine("digraph G {"); 25 | for (int i = 0; i < nodes.Count; i++) 26 | sb.AppendLine("\tNode" + i + " [shape=box, fontname = \"Lucida Console\", fontsize=8, fillcolor=azure2, style=filled, label=\"Node " + i + "\\l" + nodes[i].data.ToString() + "\"];"); 27 | for (int i = 0; i < edges.Count; i++) 28 | sb.AppendLine("\tNode" + edges[i].start + " -> Node" + edges[i].end + "[label=\"" + edges[i].text + "\"" + (edges[i].backEdge ? "color=\"1 1 .7\"" : "") + "];"); 29 | sb.AppendLine("}"); 30 | File.WriteAllText(path, sb.ToString()); 31 | } 32 | 33 | public void Save(string file) 34 | { 35 | MemoryStream m = new MemoryStream(); 36 | Helper.WriteInt32(m, 0x78563412); 37 | Helper.WriteInt32(m, nodes.Count); 38 | foreach (Node n in nodes) 39 | Helper.WriteString(m, n.data.ToString()); 40 | Helper.WriteInt32(m, edges.Count); 41 | foreach (Edge e in edges) 42 | { 43 | Helper.WriteInt32(m, e.start); 44 | Helper.WriteInt32(m, e.end); 45 | Helper.WriteString(m, e.text); 46 | } 47 | File.WriteAllBytes(file, m.ToArray()); 48 | } 49 | public void Load(string file) 50 | { 51 | nodes = new List(); 52 | edges = new List(); 53 | FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read); 54 | if (Helper.ReadInt32(fs) == 0x78563412) 55 | { 56 | int count = Helper.ReadInt32(fs); 57 | for (int i = 0; i < count; i++) 58 | nodes.Add(new Node(Helper.ReadString(fs))); 59 | count = Helper.ReadInt32(fs); 60 | for (int i = 0; i < count; i++) 61 | edges.Add(new Edge(Helper.ReadInt32(fs), Helper.ReadInt32(fs), Helper.ReadString(fs))); 62 | } 63 | fs.Close(); 64 | } 65 | 66 | public void invertGraph() 67 | { 68 | int t; 69 | int maxIdx = nodes.Count - 1; 70 | foreach (Edge e in edges) 71 | { 72 | t = maxIdx - e.start; 73 | e.start = maxIdx - e.end; 74 | e.end = t; 75 | } 76 | List tmp = new List(); 77 | for (int i = maxIdx; i >= 0; i--) 78 | tmp.Add(nodes[i]); 79 | nodes = tmp; 80 | } 81 | public void invertEdges() 82 | { 83 | int tmp; 84 | foreach (Edge e in edges) 85 | { 86 | tmp = e.start; 87 | e.start = e.end; 88 | e.end = tmp; 89 | } 90 | } 91 | public void addNode(Node n, int at = -1) 92 | { 93 | if (at == -1) 94 | { 95 | nodes.Add(n); 96 | } 97 | else 98 | { 99 | nodes.Insert(at, n); 100 | foreach (Edge e in edges) 101 | { 102 | if (e.start >= at) 103 | e.start++; 104 | if (e.end >= at) 105 | e.end++; 106 | } 107 | } 108 | } 109 | public void removeNode(int at) 110 | { 111 | nodes.RemoveAt(at); 112 | for (int i = 0; i < edges.Count; i++) 113 | if (edges[i].start == at || edges[i].end == at) 114 | { 115 | edges.RemoveAt(i); 116 | i--; 117 | } 118 | foreach (Edge e in edges) 119 | { 120 | if (e.start > at) 121 | e.start--; 122 | if (e.end > at) 123 | e.end--; 124 | } 125 | } 126 | public void removeEdge(int s, int e) 127 | { 128 | for(int i=0;i getChildren(int node) 137 | { 138 | List result = new List(); 139 | foreach (Edge e in edges) 140 | if (e.start == node) 141 | result.Add(e.end); 142 | result.Sort(); 143 | return result; 144 | } 145 | public List getParents(int node) 146 | { 147 | List result = new List(); 148 | foreach (Edge e in edges) 149 | if (e.end == node) 150 | result.Add(e.start); 151 | return result; 152 | } 153 | public void setAllNodes(bool visited) 154 | { 155 | foreach (Node n in nodes) 156 | n.visited = visited; 157 | } 158 | public void setAllEdges(bool backEdge) 159 | { 160 | foreach (Edge e in edges) 161 | e.backEdge = backEdge; 162 | } 163 | 164 | public List getOrder(bool post) 165 | { 166 | List result = new List(); 167 | setAllNodes(false); 168 | setAllEdges(false); 169 | for (int i = 0; i < nodes.Count; i++) 170 | if (!nodes[i].visited) 171 | DFSOrder(i, new List(), result, post); 172 | return result; 173 | } 174 | public TreeNode getDominatorTree(bool post = false) 175 | { 176 | if (post) invertGraph(); 177 | List postOrder = getOrder(true); 178 | if (post) setAllEdges(false); 179 | TreeNode tree; 180 | if (post) 181 | tree = new TreeNode("PostDominator Tree"); 182 | else 183 | tree = new TreeNode("Dominator Tree"); 184 | List> dominators = new List>(); 185 | for (int i = 0; i < nodes.Count; i++) 186 | { 187 | List tmp = new List(); 188 | for (int j = 0; j < nodes.Count; j++) 189 | tmp.Add(j); 190 | dominators.Add(tmp); 191 | } 192 | bool changed = true; 193 | while (changed) 194 | { 195 | changed = false; 196 | for (int i = 0; i < postOrder.Count; i++) 197 | { 198 | int current = postOrder[i]; 199 | List currDoms; 200 | List pred = getParents(current); 201 | if (pred.Count > 0) 202 | { 203 | currDoms = dominators[pred[0]]; 204 | foreach (int j in pred) 205 | currDoms = Helper.ListIntersection(currDoms, dominators[j]); 206 | } 207 | else 208 | currDoms = new List(); 209 | if (!currDoms.Contains(current)) 210 | currDoms.Add(current); 211 | if (Helper.ListChanged(dominators[current], currDoms)) 212 | { 213 | dominators[current] = currDoms; 214 | changed = true; 215 | } 216 | } 217 | } 218 | if (post) 219 | { 220 | invertGraph(); 221 | for (int i = 0; i < dominators.Count; i++) 222 | for (int j = 0; j < dominators[i].Count; j++) 223 | dominators[i][j] = (nodes.Count - 1) - dominators[i][j]; 224 | } 225 | foreach (List list in dominators) 226 | tree = Helper.AddPath(tree, list); 227 | return tree; 228 | } 229 | public bool isCyclic() 230 | { 231 | List white = new List(); 232 | List grey = new List(); 233 | List black = new List(); 234 | for (int i = 0; i < nodes.Count; i++) 235 | white.Add(i); 236 | while (white.Count > 0) 237 | if (DFSCycleCheck(white[0], white, grey, black)) 238 | return true; 239 | return false; 240 | } 241 | public List> getAllStronglyConnectedComponents() 242 | { 243 | List> result = new List>(); 244 | List finished = new List(); 245 | setAllNodes(false); 246 | for (int i = 0; i < nodes.Count; i++) 247 | if (!nodes[i].visited) 248 | DFSStronglyConnectedComponents(i, finished); 249 | invertEdges(); 250 | setAllNodes(false); 251 | for (int i = finished.Count - 1; i >= 0; i--) 252 | if (!nodes[finished[i]].visited) 253 | result.Add(getStronglyConnectedComponent(finished[i])); 254 | invertEdges(); 255 | return result; 256 | } 257 | public List getStronglyConnectedComponent(int node) 258 | { 259 | List result = new List(); 260 | result.Add(node); 261 | nodes[node].visited = true; 262 | List childs = getChildren(node); 263 | foreach (int child in childs) 264 | if (!nodes[child].visited) 265 | result.AddRange(getStronglyConnectedComponent(child)); 266 | return result; 267 | } 268 | public List> getAllSimpleCyclePaths(List component) 269 | { 270 | List> result = new List>(); 271 | setAllNodes(false); 272 | for (int i = 0; i < component.Count; i++) 273 | { 274 | DFSSimpleCycles(component, component[i], component[i], new List(), new List(), new List>(), result); 275 | nodes[component[i]].visited = true; 276 | } 277 | setAllNodes(true); 278 | return result; 279 | } 280 | public List> getAllSimpleLoops(List component) 281 | { 282 | List> result = new List>(); 283 | getOrder(true); 284 | List hnodes = new List(); 285 | foreach (Edge e in edges) 286 | if (e.backEdge && !hnodes.Contains(e.end)) 287 | hnodes.Add(e.end); 288 | List> cyclist = getAllSimpleCyclePaths(component); 289 | foreach (int hnode in hnodes) 290 | if (component.Contains(hnode)) 291 | { 292 | List> simplePaths = new List>(); 293 | foreach (List path in cyclist) 294 | { 295 | if (!path.Contains(hnode)) 296 | continue; 297 | bool skip = false; 298 | foreach (int hn2 in hnodes) 299 | if (hn2 != hnode && path.Contains(hn2)) 300 | { 301 | skip = true; 302 | break; 303 | } 304 | if (skip) 305 | continue; 306 | simplePaths.Add(path); 307 | } 308 | if (simplePaths.Count == 0) 309 | continue; 310 | List loopParts = new List(); 311 | loopParts.Add(hnode); 312 | foreach (List path in simplePaths) 313 | loopParts = Helper.ListUnion(loopParts, path); 314 | result.Add(loopParts); 315 | } 316 | return result; 317 | } 318 | public Loop getLoopInformation(List loop) 319 | { 320 | List b = new List(); 321 | LoopPart h = new LoopPart(loop[0], true); 322 | List childs = getChildren(loop[0]); 323 | List exits = new List(); 324 | foreach (int c in childs) 325 | if (!loop.Contains(c)) 326 | { 327 | h.isBreak = true; 328 | if (!exits.Contains(c)) exits.Add(c); 329 | } 330 | for (int i = 1; i < loop.Count; i++) 331 | { 332 | childs = getChildren(loop[i]); 333 | bool isContinue = false; 334 | bool isBreak = false; 335 | bool isTail = true; 336 | foreach (int c in childs) 337 | if (c == h.index) 338 | isContinue = true; 339 | else if (loop.Contains(c)) 340 | isTail = false; 341 | else 342 | { 343 | isBreak = true; 344 | if (!exits.Contains(c)) exits.Add(c); 345 | } 346 | bool hasOutsideEntry = false; 347 | List parents = getParents(loop[i]); 348 | foreach (int p in parents) 349 | if (!loop.Contains(p)) 350 | hasOutsideEntry = true; 351 | b.Add(new LoopPart(loop[i], false, isTail, isBreak, isContinue, hasOutsideEntry)); 352 | } 353 | return new Loop(h, b, exits.Count > 1); 354 | } 355 | public List> getAllReachingPaths(int idx) 356 | { 357 | List> result = new List>(); 358 | DFSReachingPath(idx, 0, new List(), result); 359 | return result; 360 | } 361 | public List> getAllSESERegions() 362 | { 363 | TreeNode domTree = getDominatorTree(false); 364 | TreeNode postDomTree = getDominatorTree(true); 365 | List> result = new List>(); 366 | for (int i = 0; i < nodes.Count; i++) 367 | for (int j = 0; j < nodes.Count; j++) 368 | if (i != j && 369 | Helper.ADominatesB(i, j, domTree.Nodes[0]) && 370 | Helper.ADominatesB(j, i, postDomTree.Nodes[0]) && 371 | getChildren(j).Count < 2 && 372 | getParents(i).Count < 2) 373 | { 374 | List region = new List(); 375 | DFSRegionParts(i, region, j); 376 | region.Add(j); 377 | result.Add(region); 378 | } 379 | return result; 380 | } 381 | public List getTopogicalOrder() 382 | { 383 | List result = new List(); 384 | setAllNodes(false); 385 | while (true) 386 | { 387 | bool found = false; 388 | for (int i = 0; i < nodes.Count; i++) 389 | if (!nodes[i].visited) 390 | { 391 | bool found2 = false; 392 | foreach (Edge e in edges) 393 | if (e.end == i && !nodes[e.start].visited) 394 | { 395 | found2 = true; 396 | break; 397 | } 398 | if (!found2) 399 | { 400 | nodes[i].visited = true; 401 | result.Add(i); 402 | found = true; 403 | break; 404 | } 405 | } 406 | if (!found) 407 | break; 408 | } 409 | return result; 410 | } 411 | public Graph getCutOut(List idxList) 412 | { 413 | Graph result = new Graph(); 414 | int[] idxTrans = new int[nodes.Count]; 415 | foreach (int i in idxList) 416 | { 417 | idxTrans[i] = result.nodes.Count; 418 | result.nodes.Add(nodes[i]); 419 | } 420 | foreach(Edge e in edges) 421 | if (idxList.Contains(e.start) && idxList.Contains(e.end)) 422 | { 423 | Edge copy = new Edge(idxTrans[e.start], idxTrans[e.end], e.text); 424 | copy.backEdge = e.backEdge; 425 | result.edges.Add(copy); 426 | } 427 | return result; 428 | } 429 | 430 | #region DFS 431 | public void DFSOrder(int index, List stack, List result, bool post) 432 | { 433 | nodes[index].visited = true; 434 | if (!post) result.Add(index); 435 | stack.Add(index); 436 | List childs = getChildren(index); 437 | foreach (int i in childs) 438 | if (!nodes[i].visited) 439 | DFSOrder(i, stack, result, post); 440 | else if (stack.Contains(i)) 441 | foreach (Edge e in edges) 442 | if (e.start == index && e.end == i && post) 443 | e.backEdge = true; 444 | if (post) result.Add(index); 445 | stack.Remove(index); 446 | } 447 | public bool DFSCycleCheck(int current, List white, List grey, List black) 448 | { 449 | Helper.ListMoveIndex(current, white, grey); 450 | List neighbours = getChildren(current); 451 | foreach (int i in neighbours) 452 | { 453 | if (black.Contains(i)) 454 | continue; 455 | if (grey.Contains(i)) 456 | return true; 457 | if (DFSCycleCheck(i, white, grey, black)) 458 | return true; 459 | } 460 | Helper.ListMoveIndex(current, grey, black); 461 | return false; 462 | } 463 | public void DFSStronglyConnectedComponents(int node, List finished) 464 | { 465 | nodes[node].visited = true; 466 | List childs = getChildren(node); 467 | foreach (int child in childs) 468 | if (!nodes[child].visited) 469 | DFSStronglyConnectedComponents(child, finished); 470 | finished.Add(node); 471 | } 472 | public bool DFSSimpleCycles(List component, int sindex, int index, List stack, List blocked, List> blockMap, List> result) 473 | { 474 | bool foundCycle = false; 475 | stack.Add(index); 476 | blocked.Add(index); 477 | List childs = getChildren(index); 478 | foreach (int n in childs) 479 | if (!nodes[n].visited && component.Contains(n)) 480 | { 481 | if (n == sindex) 482 | { 483 | List tmp = new List(); 484 | foreach (int m in stack) 485 | tmp.Add(m); 486 | result.Add(tmp); 487 | foundCycle = true; 488 | } 489 | else if (!blocked.Contains(n) && DFSSimpleCycles(component, sindex, n, stack, blocked, blockMap, result)) 490 | foundCycle = true; 491 | } 492 | if (foundCycle) 493 | Helper.Unblock(index, blocked, blockMap); 494 | else 495 | foreach (int n in childs) 496 | if (!nodes[n].visited && component.Contains(n)) 497 | blockMap.Add(new Tuple(index, n)); 498 | stack.Remove(index); 499 | return foundCycle; 500 | } 501 | public void DFSReachingPath(int target, int current, List path, List> stack) 502 | { 503 | path.Add(current); 504 | List childs = getChildren(current); 505 | foreach (int child in childs) 506 | { 507 | List npath = new List(); 508 | npath.AddRange(path); 509 | if (child == target) 510 | { 511 | npath.Add(target); 512 | stack.Add(npath); 513 | continue; 514 | } 515 | if (path.Contains(child)) 516 | continue; 517 | DFSReachingPath(target, child, npath, stack); 518 | } 519 | } 520 | public void DFSRegionParts(int current, List stack, int end) 521 | { 522 | if (stack.Contains(current)) return; 523 | stack.Add(current); 524 | List childs = getChildren(current); 525 | foreach (int c in childs) 526 | if (c != end) 527 | DFSRegionParts(c, stack, end); 528 | } 529 | #endregion 530 | } 531 | 532 | public class Edge 533 | { 534 | public int start; 535 | public int end; 536 | public bool backEdge; 537 | public string text; 538 | public Edge(int s, int e, string t) 539 | { 540 | start = s; 541 | end = e; 542 | backEdge = false; 543 | text = t; 544 | } 545 | } 546 | 547 | public class Node 548 | { 549 | public bool visited; 550 | public int srcId; 551 | public object data; 552 | public Node(object d = null, int src = -1) 553 | { 554 | visited = false; 555 | srcId = src; 556 | data = d; 557 | } 558 | } 559 | 560 | public class Loop 561 | { 562 | public LoopPart header; 563 | public List body; 564 | public bool isMultiExit; 565 | public Loop(LoopPart h, List b, bool multi) 566 | { 567 | header = h; 568 | body = b; 569 | isMultiExit = multi; 570 | } 571 | } 572 | 573 | public class LoopPart 574 | { 575 | public int index; 576 | public bool isHeader; 577 | public bool isTail; 578 | public bool isBreak; 579 | public bool isContinue; 580 | public bool hasOutsideEntry; 581 | public LoopPart(int idx, bool header = false, bool tail = false, bool brk= false, bool cont = false, bool outEnt = false) 582 | { 583 | index = idx; 584 | isHeader = header; 585 | isTail = tail; 586 | isBreak = brk; 587 | isContinue = cont; 588 | hasOutsideEntry = outEnt; 589 | } 590 | public override string ToString() 591 | { 592 | StringBuilder sb = new StringBuilder(); 593 | sb.Append("Idx=" + index); 594 | if (isHeader) sb.Append(", IsHeader"); 595 | if (isTail) sb.Append(", IsTail"); 596 | if (isBreak) sb.Append(", IsBreak"); 597 | if (isContinue) sb.Append(", IsContinue"); 598 | if (hasOutsideEntry) sb.Append(", HasOutsideEntry"); 599 | return sb.ToString(); 600 | } 601 | } 602 | 603 | public static class Helper 604 | { 605 | public static void WriteInt32(Stream s, int i) 606 | { 607 | s.Write(BitConverter.GetBytes(i), 0, 4); 608 | } 609 | 610 | public static void WriteString(Stream s, string t) 611 | { 612 | WriteInt32(s, t.Length); 613 | foreach (char c in t) 614 | s.WriteByte((byte)c); 615 | } 616 | 617 | public static int ReadInt32(Stream s) 618 | { 619 | byte[] buff = new byte[4]; 620 | s.Read(buff, 0, 4); 621 | return BitConverter.ToInt32(buff, 0); 622 | } 623 | 624 | public static string ReadString(Stream s) 625 | { 626 | StringBuilder sb = new StringBuilder(); 627 | int count = ReadInt32(s); 628 | for (int i = 0; i < count; i++) 629 | sb.Append((char)s.ReadByte()); 630 | return sb.ToString(); 631 | } 632 | 633 | public static string ListToText(string name, List data) 634 | { 635 | StringBuilder s = new StringBuilder(); 636 | s.Append(name + " = {"); 637 | for (int i = 0; i < data.Count - 1; i++) 638 | s.Append(data[i] + ", "); 639 | if (data.Count > 0) 640 | s.Append(data[data.Count - 1]); 641 | s.Append("}"); 642 | return s.ToString(); 643 | } 644 | 645 | public static string TreeToText(TreeNode t, int tabs = 0) 646 | { 647 | StringBuilder sb = new StringBuilder(); 648 | for (int i = 0; i < tabs - 1; i++) 649 | sb.Append("| "); 650 | if (tabs > 0) 651 | sb.Append("+-"); 652 | sb.AppendLine(t.Text); 653 | foreach (TreeNode t2 in t.Nodes) 654 | sb.Append(TreeToText(t2, tabs + 1)); 655 | return sb.ToString(); 656 | } 657 | 658 | public static TreeNode AddPath(TreeNode t, List path) 659 | { 660 | if (path.Count > 0) 661 | { 662 | TreeNode t2 = null; 663 | bool found = false; 664 | foreach (TreeNode t3 in t.Nodes) 665 | if (t3.Text == path[0].ToString()) 666 | { 667 | t2 = t3; 668 | found = true; 669 | break; 670 | } 671 | if (!found) 672 | { 673 | t2 = new TreeNode(path[0].ToString()); 674 | t2.Name = t2.Text; 675 | } 676 | List tmp = new List(); 677 | for (int i = 1; i < path.Count; i++) 678 | tmp.Add(path[i]); 679 | t2 = AddPath(t2, tmp); 680 | if (!found) 681 | t.Nodes.Add(t2); 682 | } 683 | return t; 684 | } 685 | 686 | public static bool ListChanged(List before, List after) 687 | { 688 | if (before.Count != after.Count) 689 | return true; 690 | bool differs = false; 691 | foreach (int i in before) 692 | if (!after.Contains(i)) 693 | { 694 | differs = true; 695 | break; 696 | } 697 | return differs; 698 | } 699 | 700 | public static bool ListContained(List inner, List outer) 701 | { 702 | if (inner.Count > outer.Count) 703 | return false; 704 | foreach (int i in inner) 705 | if (!outer.Contains(i)) 706 | return false; 707 | return true; 708 | } 709 | 710 | public static List ListIntersection(List a, List b) 711 | { 712 | List result = new List(); 713 | foreach (int i in a) 714 | if (b.Contains(i)) 715 | result.Add(i); 716 | return result; 717 | } 718 | 719 | public static List ListUnion(List a, List b) 720 | { 721 | List result = new List(); 722 | result.AddRange(a); 723 | foreach (int i in b) 724 | if (!result.Contains(i)) 725 | result.Add(i); 726 | return result; 727 | } 728 | 729 | public static void ListMoveIndex(int index, List a, List b) 730 | { 731 | for (int i = 0; i < a.Count; i++) 732 | if (a[i] == index) 733 | { 734 | a.RemoveAt(i); 735 | break; 736 | } 737 | b.Add(index); 738 | } 739 | 740 | public static void Unblock(int index, List blocked, List> blockMap) 741 | { 742 | blocked.Remove(index); 743 | for (int i = 0; i < blockMap.Count; i++) 744 | { 745 | if (blockMap[i].Item1 == index) 746 | Unblock(blockMap[i].Item2, blocked, blockMap); 747 | blockMap.RemoveAt(i); 748 | i--; 749 | } 750 | } 751 | 752 | public static bool ADominatesB(int a, int b, TreeNode t) 753 | { 754 | TreeNode tmp = t; 755 | if (t.Text != a.ToString()) 756 | { 757 | TreeNode[] res = t.Nodes.Find(a.ToString(), true); 758 | if (res.Length != 1) 759 | return false; 760 | tmp = res[0]; 761 | } 762 | if (tmp.Nodes.Find(b.ToString(), true).Length != 1) 763 | return false; 764 | return true; 765 | } 766 | } 767 | } 768 | -------------------------------------------------------------------------------- /DirectedGraphLibWV/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // Allgemeine Informationen über eine Assembly werden über die folgenden 6 | // Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, 7 | // die mit einer Assembly verknüpft sind. 8 | [assembly: AssemblyTitle("DirectedGraphLibWV")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("DirectedGraphLibWV")] 13 | [assembly: AssemblyCopyright("Copyright © 2017")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar 18 | // für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von 19 | // COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest. 20 | [assembly: ComVisible(false)] 21 | 22 | // Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird 23 | [assembly: Guid("132e34bc-09cf-45a5-ac52-d5e584e452cd")] 24 | 25 | // Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: 26 | // 27 | // Hauptversion 28 | // Nebenversion 29 | // Buildnummer 30 | // Revision 31 | // 32 | // Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern 33 | // übernehmen, indem Sie "*" eingeben: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /DirectedGraphLibWV/bin/Release/DirectedGraphLibWV.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/DirectedGraphLibWV/bin/Release/DirectedGraphLibWV.dll -------------------------------------------------------------------------------- /DirectedGraphs.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 2012 4 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DirectedGraphEditor", "DirectedGraphEditor\DirectedGraphEditor.csproj", "{03830A61-9A29-4BEA-9A8B-15B308B73BC7}" 5 | EndProject 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DirectedGraphLibWV", "DirectedGraphLibWV\DirectedGraphLibWV.csproj", "{E9B141A7-11BB-4F22-9DE2-E4399DE37D95}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XEXDecompiler3", "XEXDecompiler3\XEXDecompiler3.csproj", "{E617310E-8B39-4397-B79E-A6D6BA9254DF}" 9 | EndProject 10 | Global 11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 12 | Debug|Any CPU = Debug|Any CPU 13 | Release|Any CPU = Release|Any CPU 14 | EndGlobalSection 15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 16 | {03830A61-9A29-4BEA-9A8B-15B308B73BC7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 17 | {03830A61-9A29-4BEA-9A8B-15B308B73BC7}.Debug|Any CPU.Build.0 = Debug|Any CPU 18 | {03830A61-9A29-4BEA-9A8B-15B308B73BC7}.Release|Any CPU.ActiveCfg = Release|Any CPU 19 | {03830A61-9A29-4BEA-9A8B-15B308B73BC7}.Release|Any CPU.Build.0 = Release|Any CPU 20 | {E9B141A7-11BB-4F22-9DE2-E4399DE37D95}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 21 | {E9B141A7-11BB-4F22-9DE2-E4399DE37D95}.Debug|Any CPU.Build.0 = Debug|Any CPU 22 | {E9B141A7-11BB-4F22-9DE2-E4399DE37D95}.Release|Any CPU.ActiveCfg = Release|Any CPU 23 | {E9B141A7-11BB-4F22-9DE2-E4399DE37D95}.Release|Any CPU.Build.0 = Release|Any CPU 24 | {E617310E-8B39-4397-B79E-A6D6BA9254DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 25 | {E617310E-8B39-4397-B79E-A6D6BA9254DF}.Debug|Any CPU.Build.0 = Debug|Any CPU 26 | {E617310E-8B39-4397-B79E-A6D6BA9254DF}.Release|Any CPU.ActiveCfg = Release|Any CPU 27 | {E617310E-8B39-4397-B79E-A6D6BA9254DF}.Release|Any CPU.Build.0 = Release|Any CPU 28 | EndGlobalSection 29 | GlobalSection(SolutionProperties) = preSolution 30 | HideSolutionNode = FALSE 31 | EndGlobalSection 32 | EndGlobal 33 | -------------------------------------------------------------------------------- /DirectedGraphs.v11.suo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/DirectedGraphs.v11.suo -------------------------------------------------------------------------------- /How to write a basic control flow decompiler.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/How to write a basic control flow decompiler.pdf -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Directed Graph Editor, Directed Graph Library and a XEX asm decompiler 2 | 3 | Directed Graph Editor: this tool can open .gr files that contain graph definitions and run various algorithms over it 4 | 5 | DirectedGraphLibWV: this contains most graph algorithm 6 | 7 | XEXDecompiler3: example program to decompile xbox 360 XEX files in combination with IDA Pro, how to use see here: https://www.youtube.com/watch?v=ysqez-bdSO8 8 | 9 | based on the paper "no more gotos": https://net.cs.uni-bonn.de/fileadmin/ag/martini/Staff/yakdan/dream_ndss2015.pdf 10 | 11 | Credits: pavel 12 | -------------------------------------------------------------------------------- /XEXDecompiler3/ABSBlock.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace XEXDecompiler3 8 | { 9 | public class ABSBlock 10 | { 11 | public enum absType 12 | { 13 | SEQUENCE, 14 | SIMPLEWHILE, 15 | IFTHEN, 16 | IFTHENELSE, 17 | BREAK, 18 | CONTINUE, 19 | WHILE, 20 | DOWHILE, 21 | ACSESEREGION 22 | } 23 | 24 | public absType type; 25 | public object data; 26 | 27 | public ABSBlock() 28 | { 29 | } 30 | 31 | public ABSBlock(absType t) 32 | { 33 | type = t; 34 | } 35 | 36 | public override string ToString() 37 | { 38 | return type.ToString(); 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /XEXDecompiler3/ACSESERegion.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using DirectedGraphLibWV; 7 | 8 | namespace XEXDecompiler3 9 | { 10 | public class ACSESERegion 11 | { 12 | public Graph graph; 13 | public List decNodes = new List(); 14 | public List codeNodes = new List(); 15 | public ACSESERegion(Graph gr) 16 | { 17 | graph = gr; 18 | for (int i = 0; i < gr.nodes.Count; i++) 19 | if (gr.getChildren(i).Count > 1) 20 | decNodes.Add(i); 21 | else 22 | codeNodes.Add(i); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /XEXDecompiler3/ASMFile.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | using System.Windows.Forms; 8 | 9 | namespace XEXDecompiler3 10 | { 11 | public class ASMFile 12 | { 13 | public List subs; 14 | public Dictionary funcOffsets = new Dictionary(); 15 | public Dictionary sections = new Dictionary(); 16 | 17 | public ASMFile(string path, ToolStripProgressBar pb = null) 18 | { 19 | subs = new List(); 20 | string[] lines = File.ReadAllLines(path); 21 | bool hasStart = false; 22 | int start = -1; 23 | if (pb != null) 24 | { 25 | pb.Maximum = lines.Length; 26 | pb.Value = 0; 27 | } 28 | for (int i = 0; i < lines.Length; i++) 29 | { 30 | if (!hasStart && lines[i].StartsWith("# =============== S U B")) 31 | { 32 | hasStart = true; 33 | start = i + 1; 34 | } 35 | if (hasStart && lines[i].StartsWith("# End of function")) 36 | { 37 | if (pb != null) 38 | pb.Value = i; 39 | string name = lines[i].Substring(18); 40 | hasStart = false; 41 | List lin = new List(); 42 | for (int j = start; j < i; j++) 43 | lin.Add(lines[j]); 44 | subs.Add(new SubFunction(name, lin.ToArray())); 45 | } 46 | } 47 | if (pb != null) 48 | pb.Value = 0; 49 | string basepath = Path.GetDirectoryName(path) + "\\"; 50 | if (!File.Exists(basepath + "functions.txt")) 51 | throw new Exception("Functions.txt not found!"); 52 | string[] offsets = File.ReadAllLines(basepath + "functions.txt"); 53 | funcOffsets = new Dictionary(); 54 | foreach (string line in offsets) 55 | if (line.Trim() != "") 56 | { 57 | string[] parts = line.Split(';'); 58 | if (parts.Length != 2) 59 | continue; 60 | if (!funcOffsets.ContainsKey(parts[1])) 61 | funcOffsets.Add(parts[1], Convert.ToInt64(parts[0], 16)); 62 | } 63 | string[] files = Directory.GetFiles(basepath, "*.bin", SearchOption.TopDirectoryOnly); 64 | sections = new Dictionary(); 65 | pb.Maximum = files.Length; 66 | foreach (string file in files) 67 | { 68 | pb.Value++; 69 | try 70 | { 71 | sections.Add(Convert.ToInt64(Path.GetFileNameWithoutExtension(file), 16), File.ReadAllBytes(file)); 72 | } 73 | catch { } 74 | } 75 | pb.Value = 0; 76 | } 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /XEXDecompiler3/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /XEXDecompiler3/CodeBlock.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | using System.Windows.Forms; 8 | 9 | namespace XEXDecompiler3 10 | { 11 | public class CodeBlock 12 | { 13 | public List codeLines; 14 | public bool alwaysBranch; 15 | public bool isLocation; 16 | public bool canBranch; 17 | public bool retBranch; 18 | public int targetIndex; 19 | public int myIndex; 20 | public long offset; 21 | public List subBlocks; 22 | 23 | public CodeBlock() 24 | { } 25 | 26 | public CodeBlock(List lines, ref long off, Dictionary sections, int index = -1) 27 | { 28 | subBlocks = new List(); 29 | codeLines = new List(); 30 | offset = off; 31 | myIndex = index; 32 | targetIndex = -1; 33 | MemoryStream secData = null; 34 | long secOffset = -1; 35 | foreach (KeyValuePair sec in sections) 36 | if (off >= sec.Key && off < sec.Key + sec.Value.Length) 37 | { 38 | secData = new MemoryStream(sec.Value); 39 | secOffset = sec.Key; 40 | break; 41 | } 42 | if (secData == null || secOffset == -1) 43 | throw new Exception("Cant find section data for this subfunction!"); 44 | foreach (string s in lines) 45 | { 46 | if (s.StartsWith("loc_") || s.StartsWith("locret_")) 47 | codeLines.Add(new CodeLine(s, off, new byte[0])); 48 | else 49 | { 50 | byte[] tmp = new byte[4]; 51 | secData.Seek(off - secOffset, 0); 52 | secData.Read(tmp, 0, 4); 53 | codeLines.Add(new CodeLine(s, off, tmp)); 54 | off += 4; 55 | } 56 | } 57 | if (lines.Count > 0) 58 | { 59 | string line = lines[lines.Count - 1]; 60 | if (lines[0].StartsWith("loc_") || lines[0].StartsWith("locret_")) 61 | isLocation = true; 62 | if (Decompiler.isBranchOPC(line) && Decompiler.isUnconditional(line)) 63 | { 64 | alwaysBranch = true; 65 | retBranch = Decompiler.isReturningBranch(line); 66 | } 67 | else if (Decompiler.isBranchOPC(line)) 68 | canBranch = true; 69 | } 70 | } 71 | 72 | public override string ToString() 73 | { 74 | return ToString(0).Replace("\"", "'").Replace("\n","\\l"); 75 | } 76 | 77 | public string ToString(int tabs) 78 | { 79 | string tab = ""; 80 | for (int i = 0; i < tabs; i++) 81 | tab += '\t'; 82 | StringBuilder sb = new StringBuilder(); 83 | sb.Append(tab + "Block " + myIndex + ": "); 84 | if (alwaysBranch) 85 | sb.Append("[ALWAYS BRANCH] "); 86 | if (isLocation) 87 | sb.Append("[IS LOCATION] "); 88 | if (canBranch) 89 | sb.Append("[CAN BRANCH] "); 90 | if (targetIndex != -1) 91 | sb.Append("[TARGET BLOCK=" + targetIndex + "] "); 92 | sb.AppendLine(); 93 | foreach (CodeLine line in codeLines) 94 | { 95 | sb.Append(line.offset.ToString("X8") + " : "); 96 | foreach (byte b in line.opcBytes) 97 | sb.Append(b.ToString("X2") + " "); 98 | sb.AppendLine(tab + line.text); 99 | } 100 | if (subBlocks.Count > 0) 101 | { 102 | sb.AppendLine(tab + "{"); 103 | foreach (CodeBlock block in subBlocks) 104 | sb.Append(block.ToString(tabs + 1)); 105 | sb.AppendLine(tab + "}"); 106 | } 107 | return sb.ToString(); 108 | } 109 | } 110 | } 111 | -------------------------------------------------------------------------------- /XEXDecompiler3/CodeLine.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace XEXDecompiler3 8 | { 9 | public class CodeLine 10 | { 11 | public long offset; 12 | public byte[] opcBytes; 13 | public uint opcDWORD; 14 | public string text; 15 | public string withoutComment; 16 | public CodeLine(string s, long off, byte[] data) 17 | { 18 | text = s; 19 | if (s.Contains("#")) 20 | withoutComment = text.Split('#')[0].Trim(); 21 | else 22 | withoutComment = text.Trim(); 23 | offset = off; 24 | opcBytes = data; 25 | if (data.Length == 4) 26 | opcDWORD = BitConverter.ToUInt32(opcBytes, 0); 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /XEXDecompiler3/Form1.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace XEXDecompiler3 2 | { 3 | partial class Form1 4 | { 5 | /// 6 | /// Erforderliche Designervariable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Verwendete Ressourcen bereinigen. 12 | /// 13 | /// True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Vom Windows Form-Designer generierter Code 24 | 25 | /// 26 | /// Erforderliche Methode für die Designerunterstützung. 27 | /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); 32 | this.tabControl1 = new System.Windows.Forms.TabControl(); 33 | this.tabPage1 = new System.Windows.Forms.TabPage(); 34 | this.splitContainer1 = new System.Windows.Forms.SplitContainer(); 35 | this.listBox1 = new System.Windows.Forms.ListBox(); 36 | this.toolStrip1 = new System.Windows.Forms.ToolStrip(); 37 | this.toolStripTextBox1 = new System.Windows.Forms.ToolStripTextBox(); 38 | this.toolStripButton1 = new System.Windows.Forms.ToolStripButton(); 39 | this.tabControl2 = new System.Windows.Forms.TabControl(); 40 | this.tabPage3 = new System.Windows.Forms.TabPage(); 41 | this.rtb1 = new System.Windows.Forms.RichTextBox(); 42 | this.tabPage4 = new System.Windows.Forms.TabPage(); 43 | this.pic1 = new System.Windows.Forms.PictureBox(); 44 | this.menuStrip1 = new System.Windows.Forms.MenuStrip(); 45 | this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 46 | this.loadASMToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 47 | this.decompilingToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 48 | this.noneToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 49 | this.step1ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 50 | this.step2ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 51 | this.step3ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 52 | this.step4ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 53 | this.step5ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 54 | this.simplefy1BlockWhileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 55 | this.simplefySequencesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 56 | this.simplefyIfThenToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 57 | this.simplefyIfThenElseToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 58 | this.simplefyLoopPartsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 59 | this.simplefySimpleLoopsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 60 | this.simplefyAcyclicSESERegionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 61 | this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator(); 62 | this.saveMidStepGraphsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 63 | this.step6ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 64 | this.graphToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 65 | this.renderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 66 | this.saveGraphToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 67 | this.saveGraphImageToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 68 | this.statusStrip1 = new System.Windows.Forms.StatusStrip(); 69 | this.pb1 = new System.Windows.Forms.ToolStripProgressBar(); 70 | this.status = new System.Windows.Forms.ToolStripStatusLabel(); 71 | this.tabControl1.SuspendLayout(); 72 | this.tabPage1.SuspendLayout(); 73 | ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); 74 | this.splitContainer1.Panel1.SuspendLayout(); 75 | this.splitContainer1.Panel2.SuspendLayout(); 76 | this.splitContainer1.SuspendLayout(); 77 | this.toolStrip1.SuspendLayout(); 78 | this.tabControl2.SuspendLayout(); 79 | this.tabPage3.SuspendLayout(); 80 | this.tabPage4.SuspendLayout(); 81 | ((System.ComponentModel.ISupportInitialize)(this.pic1)).BeginInit(); 82 | this.menuStrip1.SuspendLayout(); 83 | this.statusStrip1.SuspendLayout(); 84 | this.SuspendLayout(); 85 | // 86 | // tabControl1 87 | // 88 | this.tabControl1.Controls.Add(this.tabPage1); 89 | this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; 90 | this.tabControl1.Location = new System.Drawing.Point(0, 24); 91 | this.tabControl1.Name = "tabControl1"; 92 | this.tabControl1.SelectedIndex = 0; 93 | this.tabControl1.Size = new System.Drawing.Size(615, 534); 94 | this.tabControl1.TabIndex = 3; 95 | // 96 | // tabPage1 97 | // 98 | this.tabPage1.Controls.Add(this.splitContainer1); 99 | this.tabPage1.Location = new System.Drawing.Point(4, 22); 100 | this.tabPage1.Name = "tabPage1"; 101 | this.tabPage1.Padding = new System.Windows.Forms.Padding(3); 102 | this.tabPage1.Size = new System.Drawing.Size(607, 508); 103 | this.tabPage1.TabIndex = 0; 104 | this.tabPage1.Text = "Functions"; 105 | this.tabPage1.UseVisualStyleBackColor = true; 106 | // 107 | // splitContainer1 108 | // 109 | this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; 110 | this.splitContainer1.Location = new System.Drawing.Point(3, 3); 111 | this.splitContainer1.Name = "splitContainer1"; 112 | // 113 | // splitContainer1.Panel1 114 | // 115 | this.splitContainer1.Panel1.Controls.Add(this.listBox1); 116 | this.splitContainer1.Panel1.Controls.Add(this.toolStrip1); 117 | // 118 | // splitContainer1.Panel2 119 | // 120 | this.splitContainer1.Panel2.Controls.Add(this.tabControl2); 121 | this.splitContainer1.Size = new System.Drawing.Size(601, 502); 122 | this.splitContainer1.SplitterDistance = 233; 123 | this.splitContainer1.TabIndex = 0; 124 | // 125 | // listBox1 126 | // 127 | this.listBox1.Dock = System.Windows.Forms.DockStyle.Fill; 128 | this.listBox1.Font = new System.Drawing.Font("Courier New", 8.25F); 129 | this.listBox1.FormattingEnabled = true; 130 | this.listBox1.IntegralHeight = false; 131 | this.listBox1.ItemHeight = 14; 132 | this.listBox1.Location = new System.Drawing.Point(0, 0); 133 | this.listBox1.Name = "listBox1"; 134 | this.listBox1.Size = new System.Drawing.Size(233, 477); 135 | this.listBox1.TabIndex = 0; 136 | this.listBox1.SelectedIndexChanged += new System.EventHandler(this.listBox1_SelectedIndexChanged); 137 | // 138 | // toolStrip1 139 | // 140 | this.toolStrip1.Dock = System.Windows.Forms.DockStyle.Bottom; 141 | this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { 142 | this.toolStripTextBox1, 143 | this.toolStripButton1}); 144 | this.toolStrip1.Location = new System.Drawing.Point(0, 477); 145 | this.toolStrip1.Name = "toolStrip1"; 146 | this.toolStrip1.Size = new System.Drawing.Size(233, 25); 147 | this.toolStrip1.TabIndex = 1; 148 | this.toolStrip1.Text = "toolStrip1"; 149 | // 150 | // toolStripTextBox1 151 | // 152 | this.toolStripTextBox1.Name = "toolStripTextBox1"; 153 | this.toolStripTextBox1.Size = new System.Drawing.Size(150, 25); 154 | // 155 | // toolStripButton1 156 | // 157 | this.toolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; 158 | this.toolStripButton1.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton1.Image"))); 159 | this.toolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta; 160 | this.toolStripButton1.Name = "toolStripButton1"; 161 | this.toolStripButton1.Size = new System.Drawing.Size(31, 22); 162 | this.toolStripButton1.Text = "Find"; 163 | // 164 | // tabControl2 165 | // 166 | this.tabControl2.Controls.Add(this.tabPage3); 167 | this.tabControl2.Controls.Add(this.tabPage4); 168 | this.tabControl2.Dock = System.Windows.Forms.DockStyle.Fill; 169 | this.tabControl2.Location = new System.Drawing.Point(0, 0); 170 | this.tabControl2.Name = "tabControl2"; 171 | this.tabControl2.SelectedIndex = 0; 172 | this.tabControl2.Size = new System.Drawing.Size(364, 502); 173 | this.tabControl2.TabIndex = 0; 174 | // 175 | // tabPage3 176 | // 177 | this.tabPage3.Controls.Add(this.rtb1); 178 | this.tabPage3.Location = new System.Drawing.Point(4, 22); 179 | this.tabPage3.Name = "tabPage3"; 180 | this.tabPage3.Padding = new System.Windows.Forms.Padding(3); 181 | this.tabPage3.Size = new System.Drawing.Size(356, 476); 182 | this.tabPage3.TabIndex = 0; 183 | this.tabPage3.Text = "Output"; 184 | this.tabPage3.UseVisualStyleBackColor = true; 185 | // 186 | // rtb1 187 | // 188 | this.rtb1.AcceptsTab = true; 189 | this.rtb1.DetectUrls = false; 190 | this.rtb1.Dock = System.Windows.Forms.DockStyle.Fill; 191 | this.rtb1.Font = new System.Drawing.Font("Courier New", 8.25F); 192 | this.rtb1.Location = new System.Drawing.Point(3, 3); 193 | this.rtb1.Name = "rtb1"; 194 | this.rtb1.Size = new System.Drawing.Size(350, 470); 195 | this.rtb1.TabIndex = 1; 196 | this.rtb1.Text = ""; 197 | this.rtb1.WordWrap = false; 198 | // 199 | // tabPage4 200 | // 201 | this.tabPage4.AutoScroll = true; 202 | this.tabPage4.Controls.Add(this.pic1); 203 | this.tabPage4.Location = new System.Drawing.Point(4, 22); 204 | this.tabPage4.Name = "tabPage4"; 205 | this.tabPage4.Padding = new System.Windows.Forms.Padding(3); 206 | this.tabPage4.Size = new System.Drawing.Size(356, 476); 207 | this.tabPage4.TabIndex = 1; 208 | this.tabPage4.Text = "Graph"; 209 | this.tabPage4.UseVisualStyleBackColor = true; 210 | // 211 | // pic1 212 | // 213 | this.pic1.Location = new System.Drawing.Point(0, 0); 214 | this.pic1.Name = "pic1"; 215 | this.pic1.Size = new System.Drawing.Size(100, 50); 216 | this.pic1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; 217 | this.pic1.TabIndex = 0; 218 | this.pic1.TabStop = false; 219 | // 220 | // menuStrip1 221 | // 222 | this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { 223 | this.fileToolStripMenuItem, 224 | this.decompilingToolStripMenuItem, 225 | this.graphToolStripMenuItem}); 226 | this.menuStrip1.Location = new System.Drawing.Point(0, 0); 227 | this.menuStrip1.Name = "menuStrip1"; 228 | this.menuStrip1.Size = new System.Drawing.Size(615, 24); 229 | this.menuStrip1.TabIndex = 4; 230 | this.menuStrip1.Text = "menuStrip1"; 231 | // 232 | // fileToolStripMenuItem 233 | // 234 | this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { 235 | this.loadASMToolStripMenuItem}); 236 | this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; 237 | this.fileToolStripMenuItem.Size = new System.Drawing.Size(35, 20); 238 | this.fileToolStripMenuItem.Text = "File"; 239 | // 240 | // loadASMToolStripMenuItem 241 | // 242 | this.loadASMToolStripMenuItem.Name = "loadASMToolStripMenuItem"; 243 | this.loadASMToolStripMenuItem.Size = new System.Drawing.Size(152, 22); 244 | this.loadASMToolStripMenuItem.Text = "Load ASM"; 245 | this.loadASMToolStripMenuItem.Click += new System.EventHandler(this.loadASMToolStripMenuItem_Click); 246 | // 247 | // decompilingToolStripMenuItem 248 | // 249 | this.decompilingToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { 250 | this.noneToolStripMenuItem, 251 | this.step1ToolStripMenuItem, 252 | this.step2ToolStripMenuItem, 253 | this.step3ToolStripMenuItem, 254 | this.step4ToolStripMenuItem, 255 | this.step5ToolStripMenuItem, 256 | this.step6ToolStripMenuItem}); 257 | this.decompilingToolStripMenuItem.Name = "decompilingToolStripMenuItem"; 258 | this.decompilingToolStripMenuItem.Size = new System.Drawing.Size(75, 20); 259 | this.decompilingToolStripMenuItem.Text = "Decompiling"; 260 | // 261 | // noneToolStripMenuItem 262 | // 263 | this.noneToolStripMenuItem.Name = "noneToolStripMenuItem"; 264 | this.noneToolStripMenuItem.Size = new System.Drawing.Size(152, 22); 265 | this.noneToolStripMenuItem.Text = "None"; 266 | this.noneToolStripMenuItem.Click += new System.EventHandler(this.noneToolStripMenuItem_Click); 267 | // 268 | // step1ToolStripMenuItem 269 | // 270 | this.step1ToolStripMenuItem.Name = "step1ToolStripMenuItem"; 271 | this.step1ToolStripMenuItem.Size = new System.Drawing.Size(152, 22); 272 | this.step1ToolStripMenuItem.Text = "Step 1"; 273 | this.step1ToolStripMenuItem.Click += new System.EventHandler(this.step1ToolStripMenuItem_Click); 274 | // 275 | // step2ToolStripMenuItem 276 | // 277 | this.step2ToolStripMenuItem.Name = "step2ToolStripMenuItem"; 278 | this.step2ToolStripMenuItem.Size = new System.Drawing.Size(152, 22); 279 | this.step2ToolStripMenuItem.Text = "Step 2"; 280 | this.step2ToolStripMenuItem.Click += new System.EventHandler(this.step2ToolStripMenuItem_Click); 281 | // 282 | // step3ToolStripMenuItem 283 | // 284 | this.step3ToolStripMenuItem.Name = "step3ToolStripMenuItem"; 285 | this.step3ToolStripMenuItem.Size = new System.Drawing.Size(152, 22); 286 | this.step3ToolStripMenuItem.Text = "Step 3"; 287 | this.step3ToolStripMenuItem.Click += new System.EventHandler(this.step3ToolStripMenuItem_Click); 288 | // 289 | // step4ToolStripMenuItem 290 | // 291 | this.step4ToolStripMenuItem.Name = "step4ToolStripMenuItem"; 292 | this.step4ToolStripMenuItem.Size = new System.Drawing.Size(152, 22); 293 | this.step4ToolStripMenuItem.Text = "Step 4"; 294 | this.step4ToolStripMenuItem.Click += new System.EventHandler(this.step4ToolStripMenuItem_Click); 295 | // 296 | // step5ToolStripMenuItem 297 | // 298 | this.step5ToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { 299 | this.simplefy1BlockWhileToolStripMenuItem, 300 | this.simplefySequencesToolStripMenuItem, 301 | this.simplefyIfThenToolStripMenuItem, 302 | this.simplefyIfThenElseToolStripMenuItem, 303 | this.simplefyLoopPartsToolStripMenuItem, 304 | this.simplefySimpleLoopsToolStripMenuItem, 305 | this.simplefyAcyclicSESERegionsToolStripMenuItem, 306 | this.toolStripMenuItem1, 307 | this.saveMidStepGraphsToolStripMenuItem}); 308 | this.step5ToolStripMenuItem.Name = "step5ToolStripMenuItem"; 309 | this.step5ToolStripMenuItem.Size = new System.Drawing.Size(152, 22); 310 | this.step5ToolStripMenuItem.Text = "Step 5"; 311 | this.step5ToolStripMenuItem.Click += new System.EventHandler(this.step5ToolStripMenuItem_Click); 312 | // 313 | // simplefy1BlockWhileToolStripMenuItem 314 | // 315 | this.simplefy1BlockWhileToolStripMenuItem.Checked = true; 316 | this.simplefy1BlockWhileToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; 317 | this.simplefy1BlockWhileToolStripMenuItem.Name = "simplefy1BlockWhileToolStripMenuItem"; 318 | this.simplefy1BlockWhileToolStripMenuItem.Size = new System.Drawing.Size(217, 22); 319 | this.simplefy1BlockWhileToolStripMenuItem.Text = "Simplefy 1-Block-While"; 320 | // 321 | // simplefySequencesToolStripMenuItem 322 | // 323 | this.simplefySequencesToolStripMenuItem.Checked = true; 324 | this.simplefySequencesToolStripMenuItem.CheckOnClick = true; 325 | this.simplefySequencesToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; 326 | this.simplefySequencesToolStripMenuItem.Name = "simplefySequencesToolStripMenuItem"; 327 | this.simplefySequencesToolStripMenuItem.Size = new System.Drawing.Size(217, 22); 328 | this.simplefySequencesToolStripMenuItem.Text = "Simplefy Sequences"; 329 | // 330 | // simplefyIfThenToolStripMenuItem 331 | // 332 | this.simplefyIfThenToolStripMenuItem.Checked = true; 333 | this.simplefyIfThenToolStripMenuItem.CheckOnClick = true; 334 | this.simplefyIfThenToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; 335 | this.simplefyIfThenToolStripMenuItem.Name = "simplefyIfThenToolStripMenuItem"; 336 | this.simplefyIfThenToolStripMenuItem.Size = new System.Drawing.Size(217, 22); 337 | this.simplefyIfThenToolStripMenuItem.Text = "Simplefy If-Then"; 338 | // 339 | // simplefyIfThenElseToolStripMenuItem 340 | // 341 | this.simplefyIfThenElseToolStripMenuItem.Checked = true; 342 | this.simplefyIfThenElseToolStripMenuItem.CheckOnClick = true; 343 | this.simplefyIfThenElseToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; 344 | this.simplefyIfThenElseToolStripMenuItem.Name = "simplefyIfThenElseToolStripMenuItem"; 345 | this.simplefyIfThenElseToolStripMenuItem.Size = new System.Drawing.Size(217, 22); 346 | this.simplefyIfThenElseToolStripMenuItem.Text = "Simplefy If-Then-Else"; 347 | // 348 | // simplefyLoopPartsToolStripMenuItem 349 | // 350 | this.simplefyLoopPartsToolStripMenuItem.Checked = true; 351 | this.simplefyLoopPartsToolStripMenuItem.CheckOnClick = true; 352 | this.simplefyLoopPartsToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; 353 | this.simplefyLoopPartsToolStripMenuItem.Name = "simplefyLoopPartsToolStripMenuItem"; 354 | this.simplefyLoopPartsToolStripMenuItem.Size = new System.Drawing.Size(217, 22); 355 | this.simplefyLoopPartsToolStripMenuItem.Text = "Simplefy Loop Parts"; 356 | // 357 | // simplefySimpleLoopsToolStripMenuItem 358 | // 359 | this.simplefySimpleLoopsToolStripMenuItem.Checked = true; 360 | this.simplefySimpleLoopsToolStripMenuItem.CheckOnClick = true; 361 | this.simplefySimpleLoopsToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; 362 | this.simplefySimpleLoopsToolStripMenuItem.Name = "simplefySimpleLoopsToolStripMenuItem"; 363 | this.simplefySimpleLoopsToolStripMenuItem.Size = new System.Drawing.Size(217, 22); 364 | this.simplefySimpleLoopsToolStripMenuItem.Text = "Simplefy Simple Loops"; 365 | // 366 | // simplefyAcyclicSESERegionsToolStripMenuItem 367 | // 368 | this.simplefyAcyclicSESERegionsToolStripMenuItem.Checked = true; 369 | this.simplefyAcyclicSESERegionsToolStripMenuItem.CheckOnClick = true; 370 | this.simplefyAcyclicSESERegionsToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; 371 | this.simplefyAcyclicSESERegionsToolStripMenuItem.Name = "simplefyAcyclicSESERegionsToolStripMenuItem"; 372 | this.simplefyAcyclicSESERegionsToolStripMenuItem.Size = new System.Drawing.Size(217, 22); 373 | this.simplefyAcyclicSESERegionsToolStripMenuItem.Text = "Simplefy Acyclic SESE Regions"; 374 | // 375 | // toolStripMenuItem1 376 | // 377 | this.toolStripMenuItem1.Name = "toolStripMenuItem1"; 378 | this.toolStripMenuItem1.Size = new System.Drawing.Size(214, 6); 379 | // 380 | // saveMidStepGraphsToolStripMenuItem 381 | // 382 | this.saveMidStepGraphsToolStripMenuItem.CheckOnClick = true; 383 | this.saveMidStepGraphsToolStripMenuItem.Name = "saveMidStepGraphsToolStripMenuItem"; 384 | this.saveMidStepGraphsToolStripMenuItem.Size = new System.Drawing.Size(217, 22); 385 | this.saveMidStepGraphsToolStripMenuItem.Text = "Save Mid Step Graphs"; 386 | // 387 | // step6ToolStripMenuItem 388 | // 389 | this.step6ToolStripMenuItem.Name = "step6ToolStripMenuItem"; 390 | this.step6ToolStripMenuItem.Size = new System.Drawing.Size(152, 22); 391 | this.step6ToolStripMenuItem.Text = "Step 6"; 392 | this.step6ToolStripMenuItem.Click += new System.EventHandler(this.step6ToolStripMenuItem_Click); 393 | // 394 | // graphToolStripMenuItem 395 | // 396 | this.graphToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { 397 | this.renderToolStripMenuItem, 398 | this.saveGraphToolStripMenuItem, 399 | this.saveGraphImageToolStripMenuItem}); 400 | this.graphToolStripMenuItem.Name = "graphToolStripMenuItem"; 401 | this.graphToolStripMenuItem.Size = new System.Drawing.Size(48, 20); 402 | this.graphToolStripMenuItem.Text = "Graph"; 403 | // 404 | // renderToolStripMenuItem 405 | // 406 | this.renderToolStripMenuItem.Checked = true; 407 | this.renderToolStripMenuItem.CheckOnClick = true; 408 | this.renderToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; 409 | this.renderToolStripMenuItem.Name = "renderToolStripMenuItem"; 410 | this.renderToolStripMenuItem.Size = new System.Drawing.Size(175, 22); 411 | this.renderToolStripMenuItem.Text = "Render"; 412 | // 413 | // saveGraphToolStripMenuItem 414 | // 415 | this.saveGraphToolStripMenuItem.Name = "saveGraphToolStripMenuItem"; 416 | this.saveGraphToolStripMenuItem.Size = new System.Drawing.Size(175, 22); 417 | this.saveGraphToolStripMenuItem.Text = "Save Graph..."; 418 | this.saveGraphToolStripMenuItem.Click += new System.EventHandler(this.saveGraphToolStripMenuItem_Click); 419 | // 420 | // saveGraphImageToolStripMenuItem 421 | // 422 | this.saveGraphImageToolStripMenuItem.Name = "saveGraphImageToolStripMenuItem"; 423 | this.saveGraphImageToolStripMenuItem.Size = new System.Drawing.Size(175, 22); 424 | this.saveGraphImageToolStripMenuItem.Text = "Save Graph Image..."; 425 | this.saveGraphImageToolStripMenuItem.Click += new System.EventHandler(this.saveGraphImageToolStripMenuItem_Click); 426 | // 427 | // statusStrip1 428 | // 429 | this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { 430 | this.pb1, 431 | this.status}); 432 | this.statusStrip1.Location = new System.Drawing.Point(0, 558); 433 | this.statusStrip1.Name = "statusStrip1"; 434 | this.statusStrip1.Size = new System.Drawing.Size(615, 22); 435 | this.statusStrip1.TabIndex = 5; 436 | this.statusStrip1.Text = "statusStrip1"; 437 | // 438 | // pb1 439 | // 440 | this.pb1.Name = "pb1"; 441 | this.pb1.Size = new System.Drawing.Size(200, 16); 442 | // 443 | // status 444 | // 445 | this.status.ForeColor = System.Drawing.Color.Red; 446 | this.status.Name = "status"; 447 | this.status.Size = new System.Drawing.Size(0, 17); 448 | // 449 | // Form1 450 | // 451 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 452 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 453 | this.ClientSize = new System.Drawing.Size(615, 580); 454 | this.Controls.Add(this.tabControl1); 455 | this.Controls.Add(this.menuStrip1); 456 | this.Controls.Add(this.statusStrip1); 457 | this.Name = "Form1"; 458 | this.Text = "XEX Decompiler 3 by Warranty Voider"; 459 | this.tabControl1.ResumeLayout(false); 460 | this.tabPage1.ResumeLayout(false); 461 | this.splitContainer1.Panel1.ResumeLayout(false); 462 | this.splitContainer1.Panel1.PerformLayout(); 463 | this.splitContainer1.Panel2.ResumeLayout(false); 464 | ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); 465 | this.splitContainer1.ResumeLayout(false); 466 | this.toolStrip1.ResumeLayout(false); 467 | this.toolStrip1.PerformLayout(); 468 | this.tabControl2.ResumeLayout(false); 469 | this.tabPage3.ResumeLayout(false); 470 | this.tabPage4.ResumeLayout(false); 471 | this.tabPage4.PerformLayout(); 472 | ((System.ComponentModel.ISupportInitialize)(this.pic1)).EndInit(); 473 | this.menuStrip1.ResumeLayout(false); 474 | this.menuStrip1.PerformLayout(); 475 | this.statusStrip1.ResumeLayout(false); 476 | this.statusStrip1.PerformLayout(); 477 | this.ResumeLayout(false); 478 | this.PerformLayout(); 479 | 480 | } 481 | 482 | #endregion 483 | 484 | private System.Windows.Forms.TabControl tabControl1; 485 | private System.Windows.Forms.TabPage tabPage1; 486 | private System.Windows.Forms.SplitContainer splitContainer1; 487 | private System.Windows.Forms.ListBox listBox1; 488 | private System.Windows.Forms.ToolStrip toolStrip1; 489 | private System.Windows.Forms.ToolStripTextBox toolStripTextBox1; 490 | private System.Windows.Forms.ToolStripButton toolStripButton1; 491 | private System.Windows.Forms.TabControl tabControl2; 492 | private System.Windows.Forms.TabPage tabPage3; 493 | private System.Windows.Forms.RichTextBox rtb1; 494 | private System.Windows.Forms.TabPage tabPage4; 495 | private System.Windows.Forms.PictureBox pic1; 496 | private System.Windows.Forms.MenuStrip menuStrip1; 497 | private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; 498 | private System.Windows.Forms.ToolStripMenuItem loadASMToolStripMenuItem; 499 | private System.Windows.Forms.ToolStripMenuItem decompilingToolStripMenuItem; 500 | private System.Windows.Forms.ToolStripMenuItem noneToolStripMenuItem; 501 | private System.Windows.Forms.ToolStripMenuItem step1ToolStripMenuItem; 502 | private System.Windows.Forms.ToolStripMenuItem step2ToolStripMenuItem; 503 | private System.Windows.Forms.ToolStripMenuItem step3ToolStripMenuItem; 504 | private System.Windows.Forms.ToolStripMenuItem step4ToolStripMenuItem; 505 | private System.Windows.Forms.ToolStripMenuItem step5ToolStripMenuItem; 506 | private System.Windows.Forms.ToolStripMenuItem simplefySequencesToolStripMenuItem; 507 | private System.Windows.Forms.ToolStripMenuItem simplefyIfThenToolStripMenuItem; 508 | private System.Windows.Forms.ToolStripMenuItem simplefyIfThenElseToolStripMenuItem; 509 | private System.Windows.Forms.ToolStripMenuItem simplefy1BlockWhileToolStripMenuItem; 510 | private System.Windows.Forms.ToolStripMenuItem step6ToolStripMenuItem; 511 | private System.Windows.Forms.StatusStrip statusStrip1; 512 | private System.Windows.Forms.ToolStripProgressBar pb1; 513 | private System.Windows.Forms.ToolStripStatusLabel status; 514 | private System.Windows.Forms.ToolStripMenuItem graphToolStripMenuItem; 515 | private System.Windows.Forms.ToolStripMenuItem renderToolStripMenuItem; 516 | private System.Windows.Forms.ToolStripMenuItem saveGraphToolStripMenuItem; 517 | private System.Windows.Forms.ToolStripMenuItem saveGraphImageToolStripMenuItem; 518 | private System.Windows.Forms.ToolStripMenuItem saveMidStepGraphsToolStripMenuItem; 519 | private System.Windows.Forms.ToolStripMenuItem simplefyLoopPartsToolStripMenuItem; 520 | private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1; 521 | private System.Windows.Forms.ToolStripMenuItem simplefySimpleLoopsToolStripMenuItem; 522 | private System.Windows.Forms.ToolStripMenuItem simplefyAcyclicSESERegionsToolStripMenuItem; 523 | } 524 | } 525 | 526 | -------------------------------------------------------------------------------- /XEXDecompiler3/Form1.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using System.Collections.Generic; 4 | using System.ComponentModel; 5 | using System.Data; 6 | using System.Drawing; 7 | using System.Linq; 8 | using System.Text; 9 | using System.Threading.Tasks; 10 | using System.Windows.Forms; 11 | using DirectedGraphLibWV; 12 | using System.Diagnostics; 13 | 14 | namespace XEXDecompiler3 15 | { 16 | public partial class Form1 : Form 17 | { 18 | public Form1() 19 | { 20 | InitializeComponent(); 21 | string[] args = Environment.GetCommandLineArgs(); 22 | if (args.Length == 2) 23 | { 24 | Decompiler.asm = new ASMFile(args[1], pb1); 25 | Decompiler.level = 0; 26 | SelectStep(0); 27 | RefreshStuff(); 28 | } 29 | } 30 | 31 | private void loadASMToolStripMenuItem_Click(object sender, EventArgs e) 32 | { 33 | OpenFileDialog d = new OpenFileDialog(); 34 | d.Filter = "*.asm|*.asm"; 35 | if (d.ShowDialog() == System.Windows.Forms.DialogResult.OK) 36 | { 37 | Decompiler.asm = new ASMFile(d.FileName, pb1); 38 | Decompiler.level = 0; 39 | SelectStep(0); 40 | RefreshStuff(); 41 | } 42 | } 43 | 44 | public void RefreshStuff() 45 | { 46 | listBox1.Items.Clear(); 47 | if (Decompiler.asm == null) 48 | return; 49 | SelectStep(Decompiler.level); 50 | foreach (SubFunction sub in Decompiler.asm.subs) 51 | listBox1.Items.Add(sub.name + " (" + sub.rawLines.Length + ")"); 52 | } 53 | 54 | private void listBox1_SelectedIndexChanged(object sender, EventArgs e) 55 | { 56 | RefreshSubfunction(); 57 | } 58 | 59 | public void RefreshSubfunction() 60 | { 61 | int n = listBox1.SelectedIndex; 62 | if (n == -1 || Decompiler.asm == null) 63 | return; 64 | SelectStep(Decompiler.level); 65 | Decompiler.sub = Decompiler.asm.subs[n]; 66 | Decompiler.simplefyOneBlockWhile = simplefy1BlockWhileToolStripMenuItem.Checked; 67 | Decompiler.simplefySequences = simplefySequencesToolStripMenuItem.Checked; 68 | Decompiler.simplefyIfThen = simplefyIfThenToolStripMenuItem.Checked; 69 | Decompiler.simplefyIfThenElse = simplefyIfThenElseToolStripMenuItem.Checked; 70 | Decompiler.simplefyLoopParts = simplefyLoopPartsToolStripMenuItem.Checked; 71 | Decompiler.simplefySimpleLoops = simplefySimpleLoopsToolStripMenuItem.Checked; 72 | Decompiler.simplefyACSESERegions = simplefyAcyclicSESERegionsToolStripMenuItem.Checked; 73 | Decompiler.saveMidStepGraphs = saveMidStepGraphsToolStripMenuItem.Checked; 74 | string[] files = Directory.EnumerateFiles(Path.GetDirectoryName(Application.ExecutablePath) + "\\", "MidStep*.gr").ToArray(); 75 | foreach (string f in files) 76 | File.Delete(f); 77 | rtb1.Text = Decompiler.Decompile(); 78 | if (Decompiler.graph != null) 79 | Render(n); 80 | } 81 | 82 | public void Render(int n) 83 | { 84 | pic1.Image = null; 85 | if (!renderToolStripMenuItem.Checked) 86 | return; 87 | string path = Path.GetDirectoryName(Application.ExecutablePath) + "\\bin\\"; 88 | Graph g = Decompiler.graph; 89 | g.GenerateDotFile(path + "graph.dot"); 90 | if (File.Exists(path + "graph.dot") && 91 | File.Exists(path + "dot.exe")) 92 | { 93 | 94 | GC.Collect(); 95 | if (File.Exists(path + "image.png")) 96 | File.Delete(path + "image.png"); 97 | RunShell(path + "dot.exe", "\"" + path + "graph.dot\" -Tpng -o image.png"); 98 | try 99 | { 100 | if (File.Exists(path + "image.png")) 101 | pic1.Image = LoadImageCopy(path + "image.png"); 102 | } 103 | catch (Exception) 104 | { 105 | pic1.Image = null; 106 | GC.Collect(); 107 | } 108 | if (File.Exists(path + "image.png")) 109 | File.Delete(path + "image.png"); 110 | } 111 | } 112 | 113 | public static string RunShell(string file, string command) 114 | { 115 | Process process = new System.Diagnostics.Process(); 116 | ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); 117 | startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 118 | startInfo.FileName = file; 119 | startInfo.Arguments = command; 120 | startInfo.CreateNoWindow = true; 121 | startInfo.UseShellExecute = false; 122 | startInfo.WorkingDirectory = Path.GetDirectoryName(file) + "\\"; 123 | startInfo.RedirectStandardOutput = true; 124 | startInfo.RedirectStandardError = true; 125 | process.StartInfo = startInfo; 126 | process.Start(); 127 | process.WaitForExit(); 128 | return process.StandardOutput.ReadToEnd(); 129 | } 130 | 131 | public static Bitmap LoadImageCopy(string path) 132 | { 133 | FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); 134 | Bitmap loaded = new Bitmap(fs); 135 | Bitmap result = (Bitmap)loaded.Clone(); 136 | fs.Close(); 137 | GC.Collect(); 138 | return result; 139 | } 140 | 141 | private void saveGraphToolStripMenuItem_Click(object sender, EventArgs e) 142 | { 143 | int n = listBox1.SelectedIndex; 144 | if (n == -1 || Decompiler.asm == null || Decompiler.graph == null) 145 | return; 146 | SaveFileDialog d = new SaveFileDialog(); 147 | d.Filter = "*.gr|*.gr"; 148 | if (d.ShowDialog() == System.Windows.Forms.DialogResult.OK) 149 | { 150 | Decompiler.graph.Save(d.FileName); 151 | MessageBox.Show("Done."); 152 | } 153 | } 154 | 155 | private void saveGraphImageToolStripMenuItem_Click(object sender, EventArgs e) 156 | { 157 | if (pic1.Image == null) 158 | return; 159 | SaveFileDialog d = new SaveFileDialog(); 160 | d.Filter = "*.png|*.png"; 161 | if (d.ShowDialog() == System.Windows.Forms.DialogResult.OK) 162 | { 163 | pic1.Image.Save(d.FileName); 164 | MessageBox.Show("Done."); 165 | } 166 | } 167 | 168 | private void noneToolStripMenuItem_Click(object sender, EventArgs e) 169 | { 170 | if (Decompiler.asm != null) Decompiler.level = 0; 171 | RefreshSubfunction(); 172 | } 173 | 174 | private void step1ToolStripMenuItem_Click(object sender, EventArgs e) 175 | { 176 | if (Decompiler.asm != null) Decompiler.level = 1; 177 | RefreshSubfunction(); 178 | } 179 | 180 | private void step2ToolStripMenuItem_Click(object sender, EventArgs e) 181 | { 182 | if (Decompiler.asm != null) Decompiler.level = 2; 183 | RefreshSubfunction(); 184 | } 185 | 186 | private void step3ToolStripMenuItem_Click(object sender, EventArgs e) 187 | { 188 | if (Decompiler.asm != null) Decompiler.level = 3; 189 | RefreshSubfunction(); 190 | } 191 | 192 | private void step4ToolStripMenuItem_Click(object sender, EventArgs e) 193 | { 194 | if (Decompiler.asm != null) Decompiler.level = 4; 195 | RefreshSubfunction(); 196 | } 197 | 198 | private void step5ToolStripMenuItem_Click(object sender, EventArgs e) 199 | { 200 | if (Decompiler.asm != null) Decompiler.level = 5; 201 | RefreshSubfunction(); 202 | } 203 | 204 | private void step6ToolStripMenuItem_Click(object sender, EventArgs e) 205 | { 206 | if (Decompiler.asm != null) Decompiler.level = 6; 207 | RefreshSubfunction(); 208 | } 209 | 210 | public void SelectStep(int n) 211 | { 212 | noneToolStripMenuItem.Checked = n == 0; 213 | step1ToolStripMenuItem.Checked = n == 1; 214 | step2ToolStripMenuItem.Checked = n == 2; 215 | step3ToolStripMenuItem.Checked = n == 3; 216 | step4ToolStripMenuItem.Checked = n == 4; 217 | step5ToolStripMenuItem.Checked = n == 5; 218 | step6ToolStripMenuItem.Checked = n == 6; 219 | } 220 | } 221 | } 222 | -------------------------------------------------------------------------------- /XEXDecompiler3/Form1.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 335, 17 122 | 123 | 124 | 125 | 126 | iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 127 | YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG 128 | YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 129 | 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw 130 | bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc 131 | VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 132 | c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 133 | Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo 134 | mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ 135 | kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D 136 | TgDQASA1MVpwzwAAAABJRU5ErkJggg== 137 | 138 | 139 | 140 | 434, 17 141 | 142 | 143 | 543, 17 144 | 145 | 146 | 37 147 | 148 | -------------------------------------------------------------------------------- /XEXDecompiler3/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using System.Windows.Forms; 6 | 7 | namespace XEXDecompiler3 8 | { 9 | static class Program 10 | { 11 | /// 12 | /// Der Haupteinstiegspunkt für die Anwendung. 13 | /// 14 | [STAThread] 15 | static void Main() 16 | { 17 | Application.EnableVisualStyles(); 18 | Application.SetCompatibleTextRenderingDefault(false); 19 | Application.Run(new Form1()); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /XEXDecompiler3/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // Allgemeine Informationen über eine Assembly werden über die folgenden 6 | // Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, 7 | // die mit einer Assembly verknüpft sind. 8 | [assembly: AssemblyTitle("XEXDecompiler3")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("XEXDecompiler3")] 13 | [assembly: AssemblyCopyright("Copyright © 2017")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar 18 | // für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von 19 | // COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest. 20 | [assembly: ComVisible(false)] 21 | 22 | // Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird 23 | [assembly: Guid("e8e92354-59c2-4293-a4e1-61932d3d223c")] 24 | 25 | // Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: 26 | // 27 | // Hauptversion 28 | // Nebenversion 29 | // Buildnummer 30 | // Revision 31 | // 32 | // Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern 33 | // übernehmen, indem Sie "*" eingeben: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /XEXDecompiler3/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // Dieser Code wurde von einem Tool generiert. 4 | // Laufzeitversion:4.0.30319.42000 5 | // 6 | // Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn 7 | // der Code erneut generiert wird. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace XEXDecompiler3.Properties { 12 | using System; 13 | 14 | 15 | /// 16 | /// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. 17 | /// 18 | // Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert 19 | // -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert. 20 | // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen 21 | // mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Resources() { 33 | } 34 | 35 | /// 36 | /// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("XEXDecompiler3.Properties.Resources", typeof(Resources).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle 51 | /// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | 63 | /// 64 | /// Sucht eine lokalisierte Zeichenfolge, die b;ba;blr;bctr;bl;bla;blrl;bctrl;bt;bta;btlr;btctr;btl;btla;btlrl;btctrl;bf;bfa;bflr;bfctr;bfl;bfla;bflrl;bfctrl;bdnz;bdnza;bdnzlr;bdnzl;bdnzla;bdnzlrl;bdnzt;bdnzta;bdnztlr;bdnztl;bdnztla;bdnztlrl;bdnzf;bdnzfa;bdnzflr;bdnzfl;bdnzfla;bdnzflrl;bdz;bdza;bdzlr;bdzl;bdzla;bdzlrl;bdzt;bdzta;bdztlr;bdztl;bdztla;bdztlrl;bdzf;bdzfa;bdzflr;bdzfl;bdzfla;bdzflrl;blt;blta;bltlr;bltctr;bltl;bltla;bltlrl;bltctrl;ble;blea;blelr;blectr;blel;blela;blelrl;blectrl;beq;beqa;beqlr;beqctr;beql;beqla;beqlrl;beqctrl;bge;bgea;bgelr;b [Rest der Zeichenfolge wurde abgeschnitten]"; ähnelt. 65 | /// 66 | internal static string branch_opcodes { 67 | get { 68 | return ResourceManager.GetString("branch_opcodes", resourceCulture); 69 | } 70 | } 71 | 72 | /// 73 | /// Sucht eine lokalisierte Zeichenfolge, die bl;bla;blrl;bctrl;btl;btla;btlrl;btctrl;bfl;bfla;bflrl;bfctrl;bdnzla;bdnzlrl;bdnztl;bdnztla;bdnztlrl;bdnzfl;bdnzfla;bdnzflrl;bdzl;bdzla;bdzlrl;bdztl;bdztla;bdztlrl;bdzfl;bdzfla;bdzflrl;bltl;bltla;bltlrl;bltctrl;blel;blela;blelrl;blectrl;beql;beqla;beqlrl;beqctrl;bgel;bgela;bgerl;bgectrl;bgttl;bgla;bgtlrl;bgtctrl;bnll;bnlla;bnllrl;bnlctrl;bnel;bnela;bnelrl;bnectrl;bngl;bngla;bnglrl;bngctrl;bsol;bsola;bsolrl;bsoctrl;bnsl;bnsla;bnslrl;bnsctrl;bunl;bunla;bunlrl;bunctrl;bnul;bnula;bnulrl;bnuctrl ähnelt. 74 | /// 75 | internal static string branch_returning_prefixes { 76 | get { 77 | return ResourceManager.GetString("branch_returning_prefixes", resourceCulture); 78 | } 79 | } 80 | 81 | /// 82 | /// Sucht eine lokalisierte Zeichenfolge, die b;ba;blr;bctr;bl;bla;blrl;bctrl ähnelt. 83 | /// 84 | internal static string uncond_prefixes { 85 | get { 86 | return ResourceManager.GetString("uncond_prefixes", resourceCulture); 87 | } 88 | } 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /XEXDecompiler3/Properties/Resources.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | b;ba;blr;bctr;bl;bla;blrl;bctrl;bt;bta;btlr;btctr;btl;btla;btlrl;btctrl;bf;bfa;bflr;bfctr;bfl;bfla;bflrl;bfctrl;bdnz;bdnza;bdnzlr;bdnzl;bdnzla;bdnzlrl;bdnzt;bdnzta;bdnztlr;bdnztl;bdnztla;bdnztlrl;bdnzf;bdnzfa;bdnzflr;bdnzfl;bdnzfla;bdnzflrl;bdz;bdza;bdzlr;bdzl;bdzla;bdzlrl;bdzt;bdzta;bdztlr;bdztl;bdztla;bdztlrl;bdzf;bdzfa;bdzflr;bdzfl;bdzfla;bdzflrl;blt;blta;bltlr;bltctr;bltl;bltla;bltlrl;bltctrl;ble;blea;blelr;blectr;blel;blela;blelrl;blectrl;beq;beqa;beqlr;beqctr;beql;beqla;beqlrl;beqctrl;bge;bgea;bgelr;bgectr;bgel;bgela;bgerl;bgectrl;bgt;bgta;bgtlr;bgtctr;bgttl;bgla;bgtlrl;bgtctrl;bnl;bnla;bnllr;bnlctr;bnll;bnlla;bnllrl;bnlctrl;bne;bnea;bnelr;bnectr;bnel;bnela;bnelrl;bnectrl;bng;bnga;bnglr;bngctr;bngl;bngla;bnglrl;bngctrl;bso;bsoa;bsolr;bsoctr;bsol;bsola;bsolrl;bsoctrl;bns;bnsa;bnslr;bnsctr;bnsl;bnsla;bnslrl;bnsctrl;bun;buna;bunlr;bunctr;bunl;bunla;bunlrl;bunctrl;bnu;bnua;bnulr;bnuctr;bnul;bnula;bnulrl;bnuctrlzl;bdnzla;bdnzlrl;bdnzt;bdnzta;bdnztlr;bdnztl;bdnztla;bdnztlrl;bdnzf;bdnzfa;bdnzflr;bdnzfl;bdnzfla;bdnzflrl;bdz;bdza;bdzlr;bdzl;bdzla;bdzlrl;bdzt;bdzta;bdztlr;bdztl;bdztla;bdztlrl;bdzf;bdzfa;bdzflr;bdzfl;bdzfla;bdzflrlectrl;beq;beqa;beqlr;beqctr;beql;beqla;beqlrl;beqctrl;bge;bgea;bgelr;bgectr;bgel;bgela;bgelrl;bgectrl;bgt;bgta;bgtlr;bgtctr;bgtl;bgtla;bgtlrl;bgtctrl;bnl;bnla;bnllr;bnlctr;bnll;bnlla;bnllrl;bnlctrl;bne;bnea;bnelr;bnectr;bnel;bnela;bnelrl;bnectrl;bng;bnga;bnglr;bngctr;bngl;bngla;bnglrl;bngctrl;bso;bsoa;bsolr;bsoctr;bsol;bsola;bsolrl;bsoctrl;bns;bnsa;bnslr;bnsctr;bnsl;bnsla;bnslrl;bnsctrl;bun;buna;bunlr;bunctr;bunl;bunla;bunlrl;bunctrl;bnu;bnua;bnulr;bnuctr;bnul;bnula;bnulrl;bnuctrl;bt;bta;btlr;btctr;btl;btla;btlrl;btctrl;bf;bfa;bflr;bfctr;bfl;bfla;bflrl;bfctrl;bdnz;bdnza;bdnzlr;bdnzl;bdnzla;bdnzlrl;bdnzt;bdnzta;bdnztlr;bdnztl;bdnztla;bdnztlrl;bdnzf;bdnzfa;bdnzflr;bdnzfl;bdnzfla;bdnzflrl;bdz;bdza;bdzlr;bdzl;bdzla;bdzlrl;bdzt;bdzta;bdztlr;bdztl;bdztla;bdztlrl;bdzf;bdzfa;bdzflr;bdzfl;bdzfla;bdzflrl 122 | 123 | 124 | bl;bla;blrl;bctrl;btl;btla;btlrl;btctrl;bfl;bfla;bflrl;bfctrl;bdnzla;bdnzlrl;bdnztl;bdnztla;bdnztlrl;bdnzfl;bdnzfla;bdnzflrl;bdzl;bdzla;bdzlrl;bdztl;bdztla;bdztlrl;bdzfl;bdzfla;bdzflrl;bltl;bltla;bltlrl;bltctrl;blel;blela;blelrl;blectrl;beql;beqla;beqlrl;beqctrl;bgel;bgela;bgerl;bgectrl;bgttl;bgla;bgtlrl;bgtctrl;bnll;bnlla;bnllrl;bnlctrl;bnel;bnela;bnelrl;bnectrl;bngl;bngla;bnglrl;bngctrl;bsol;bsola;bsolrl;bsoctrl;bnsl;bnsla;bnslrl;bnsctrl;bunl;bunla;bunlrl;bunctrl;bnul;bnula;bnulrl;bnuctrl 125 | 126 | 127 | b;ba;blr;bctr;bl;bla;blrl;bctrl 128 | 129 | -------------------------------------------------------------------------------- /XEXDecompiler3/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace XEXDecompiler3.Properties 12 | { 13 | 14 | 15 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 16 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] 17 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase 18 | { 19 | 20 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 21 | 22 | public static Settings Default 23 | { 24 | get 25 | { 26 | return defaultInstance; 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /XEXDecompiler3/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /XEXDecompiler3/SubFunction.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | using System.Windows.Forms; 8 | using DirectedGraphLibWV; 9 | 10 | namespace XEXDecompiler3 11 | { 12 | public class SubFunction 13 | { 14 | public string name; 15 | public string[] rawLines; 16 | public ASMFile parent; 17 | public SubFunction(string n, string[] lines) 18 | { 19 | name = n; 20 | rawLines = lines; 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /XEXDecompiler3/XEXDecompiler3.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {E617310E-8B39-4397-B79E-A6D6BA9254DF} 8 | WinExe 9 | Properties 10 | XEXDecompiler3 11 | XEXDecompiler3 12 | v4.5 13 | 512 14 | 15 | 16 | AnyCPU 17 | true 18 | full 19 | false 20 | bin\Debug\ 21 | DEBUG;TRACE 22 | prompt 23 | 4 24 | 25 | 26 | AnyCPU 27 | pdbonly 28 | true 29 | bin\Release\ 30 | TRACE 31 | prompt 32 | 4 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | Form 54 | 55 | 56 | Form1.cs 57 | 58 | 59 | 60 | 61 | 62 | 63 | Form1.cs 64 | 65 | 66 | ResXFileCodeGenerator 67 | Resources.Designer.cs 68 | Designer 69 | 70 | 71 | True 72 | Resources.resx 73 | True 74 | 75 | 76 | SettingsSingleFileGenerator 77 | Settings.Designer.cs 78 | 79 | 80 | True 81 | Settings.settings 82 | True 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | {e9b141a7-11bb-4f22-9de2-e4399de37d95} 91 | DirectedGraphLibWV 92 | 93 | 94 | 95 | 102 | -------------------------------------------------------------------------------- /XEXDecompiler3/bin/Release/DirectedGraphLibWV.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/XEXDecompiler3/bin/Release/DirectedGraphLibWV.dll -------------------------------------------------------------------------------- /XEXDecompiler3/bin/Release/XEXDecompiler3.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/XEXDecompiler3/bin/Release/XEXDecompiler3.exe -------------------------------------------------------------------------------- /XEXDecompiler3/bin/Release/XEXDecompiler3.exe.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /XEXDecompiler3/bin/Release/bin/Pathplan.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/XEXDecompiler3/bin/Release/bin/Pathplan.dll -------------------------------------------------------------------------------- /XEXDecompiler3/bin/Release/bin/cdt.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/XEXDecompiler3/bin/Release/bin/cdt.dll -------------------------------------------------------------------------------- /XEXDecompiler3/bin/Release/bin/cgraph.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/XEXDecompiler3/bin/Release/bin/cgraph.dll -------------------------------------------------------------------------------- /XEXDecompiler3/bin/Release/bin/config6: -------------------------------------------------------------------------------- 1 | # This file was generated by "dot -c" at time of install. 2 | 3 | # You may temporarily disable a plugin by removing or commenting out 4 | # a line in this file, or you can modify its "quality" value to affect 5 | # default plugin selection. 6 | 7 | # Manual edits to this file **will be lost** on upgrade. 8 | 9 | gvplugin_core.dll core { 10 | device { 11 | dot:dot 1 12 | gv:dot 1 13 | canon:dot 1 14 | plain:dot 1 15 | plain-ext:dot 1 16 | xdot:xdot 1 17 | xdot1.2:xdot 1 18 | xdot1.4:xdot 1 19 | } 20 | device { 21 | fig:fig 1 22 | } 23 | device { 24 | ismap:map 1 25 | cmap:map 1 26 | imap:map 1 27 | cmapx:map 1 28 | imap_np:map 1 29 | cmapx_np:map 1 30 | } 31 | device { 32 | ps:ps 1 33 | ps2:ps 1 34 | eps:ps 1 35 | } 36 | device { 37 | svg:svg 1 38 | svgz:svg 1 39 | } 40 | device { 41 | tk:tk 1 42 | } 43 | device { 44 | vml:vml 1 45 | vmlz:vml 1 46 | } 47 | device { 48 | pic:pic -1 49 | } 50 | device { 51 | pov:pov 1 52 | } 53 | render { 54 | dot 1 55 | xdot 1 56 | } 57 | render { 58 | fig 1 59 | } 60 | render { 61 | map 1 62 | } 63 | render { 64 | ps 1 65 | } 66 | render { 67 | svg 1 68 | } 69 | render { 70 | tk 1 71 | } 72 | render { 73 | vml 1 74 | } 75 | render { 76 | pic -1 77 | } 78 | render { 79 | pov 1 80 | } 81 | loadimage { 82 | png:svg 1 83 | gif:svg 1 84 | jpeg:svg 1 85 | jpe:svg 1 86 | jpg:svg 1 87 | png:fig 1 88 | gif:fig 1 89 | jpeg:fig 1 90 | jpe:fig 1 91 | jpg:fig 1 92 | png:vrml 1 93 | gif:vrml 1 94 | jpeg:vrml 1 95 | jpe:vrml 1 96 | jpg:vrml 1 97 | eps:ps 1 98 | ps:ps 1 99 | (lib):ps 1 100 | png:map 1 101 | gif:map 1 102 | jpeg:map 1 103 | jpe:map 1 104 | jpg:map 1 105 | ps:map 1 106 | eps:map 1 107 | svg:map 1 108 | png:dot 1 109 | gif:dot 1 110 | jpeg:dot 1 111 | jpe:dot 1 112 | jpg:dot 1 113 | ps:dot 1 114 | eps:dot 1 115 | svg:dot 1 116 | png:xdot 1 117 | gif:xdot 1 118 | jpeg:xdot 1 119 | jpe:xdot 1 120 | jpg:xdot 1 121 | ps:xdot 1 122 | eps:xdot 1 123 | svg:xdot 1 124 | svg:svg 1 125 | png:vml 1 126 | gif:vml 1 127 | jpeg:vml 1 128 | jpe:vml 1 129 | jpg:vml 1 130 | gif:tk 1 131 | } 132 | } 133 | gvplugin_dot_layout.dll dot_layout { 134 | layout { 135 | dot 0 136 | } 137 | } 138 | gvplugin_gd.dll gd { 139 | render { 140 | gd 1 141 | } 142 | render { 143 | vrml 1 144 | } 145 | textlayout { 146 | textlayout 2 147 | } 148 | loadimage { 149 | gd:gd 1 150 | gd2:gd 1 151 | gif:gd 1 152 | jpeg:gd 1 153 | jpe:gd 1 154 | jpg:gd 1 155 | png:gd 1 156 | gd:ps 1 157 | #FAILS gd:lasi 1 158 | gd2:ps 1 159 | #FAILS gd2:lasi 1 160 | gif:ps 1 161 | #FAILS gif:lasi 1 162 | jpeg:ps 1 163 | jpg:ps 1 164 | jpe:ps 1 165 | #FAILS jpeg:lasi 1 166 | #FAILS jpg:lasi 1 167 | #FAILS jpe:lasi 1 168 | png:ps 1 169 | #FAILS png:lasi 1 170 | gd:cairo 1 171 | gd2:cairo 1 172 | gif:cairo 1 173 | jpeg:cairo 1 174 | jpg:cairo 1 175 | jpe:cairo 1 176 | png:cairo -1 177 | } 178 | device { 179 | gif:cairo 10 180 | wbmp:cairo 5 181 | jpe:cairo 5 182 | jpeg:cairo 5 183 | jpg:cairo 5 184 | png:cairo 5 185 | gd:cairo 5 186 | gd2:cairo 5 187 | } 188 | device { 189 | gif:gd 1 190 | wbmp:gd 1 191 | jpe:gd 1 192 | jpeg:gd 1 193 | jpg:gd 1 194 | png:gd 1 195 | gd:gd 1 196 | gd2:gd 1 197 | } 198 | device { 199 | vrml:vrml 1 200 | } 201 | } 202 | gvplugin_gdiplus.dll gdiplus { 203 | render { 204 | gdiplus 1 205 | } 206 | textlayout { 207 | textlayout 8 208 | } 209 | loadimage { 210 | bmp:gdiplus 8 211 | gif:gdiplus 8 212 | jpe:gdiplus 8 213 | jpeg:gdiplus 8 214 | jpg:gdiplus 8 215 | png:gdiplus 8 216 | } 217 | device { 218 | metafile:gdiplus 8 219 | bmp:gdiplus 8 220 | emf:gdiplus 8 221 | emfplus:gdiplus 8 222 | gif:gdiplus 8 223 | jpe:gdiplus 8 224 | jpeg:gdiplus 8 225 | jpg:gdiplus 8 226 | png:gdiplus 8 227 | tif:gdiplus 8 228 | tiff:gdiplus 8 229 | } 230 | device { 231 | bmp:cairo 8 232 | gif:cairo 8 233 | jpe:cairo 8 234 | jpeg:cairo 8 235 | jpg:cairo 8 236 | png:cairo 8 237 | tif:cairo 8 238 | tiff:cairo 8 239 | } 240 | } 241 | gvplugin_neato_layout.dll neato_layout { 242 | layout { 243 | neato 0 244 | fdp 0 245 | sfdp 0 246 | twopi 0 247 | circo 0 248 | patchwork 0 249 | osage 0 250 | nop 0 251 | nop1 0 252 | nop2 0 253 | } 254 | } 255 | gvplugin_pango.dll cairo { 256 | render { 257 | cairo 10 258 | } 259 | textlayout { 260 | textlayout 10 261 | } 262 | loadimage { 263 | png:cairo 1 264 | #FAILS png:lasi 2 265 | png:ps 2 266 | } 267 | device { 268 | png:cairo 10 269 | ps:cairo -10 270 | pdf:cairo 10 271 | svg:cairo -10 272 | } 273 | } 274 | -------------------------------------------------------------------------------- /XEXDecompiler3/bin/Release/bin/dot.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/XEXDecompiler3/bin/Release/bin/dot.exe -------------------------------------------------------------------------------- /XEXDecompiler3/bin/Release/bin/freetype6.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/XEXDecompiler3/bin/Release/bin/freetype6.dll -------------------------------------------------------------------------------- /XEXDecompiler3/bin/Release/bin/gvc.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/XEXDecompiler3/bin/Release/bin/gvc.dll -------------------------------------------------------------------------------- /XEXDecompiler3/bin/Release/bin/gvplugin_dot_layout.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/XEXDecompiler3/bin/Release/bin/gvplugin_dot_layout.dll -------------------------------------------------------------------------------- /XEXDecompiler3/bin/Release/bin/gvplugin_pango.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/XEXDecompiler3/bin/Release/bin/gvplugin_pango.dll -------------------------------------------------------------------------------- /XEXDecompiler3/bin/Release/bin/iconv.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/XEXDecompiler3/bin/Release/bin/iconv.dll -------------------------------------------------------------------------------- /XEXDecompiler3/bin/Release/bin/libcairo-2.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/XEXDecompiler3/bin/Release/bin/libcairo-2.dll -------------------------------------------------------------------------------- /XEXDecompiler3/bin/Release/bin/libexpat.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/XEXDecompiler3/bin/Release/bin/libexpat.dll -------------------------------------------------------------------------------- /XEXDecompiler3/bin/Release/bin/libfontconfig-1.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/XEXDecompiler3/bin/Release/bin/libfontconfig-1.dll -------------------------------------------------------------------------------- /XEXDecompiler3/bin/Release/bin/libfreetype-6.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/XEXDecompiler3/bin/Release/bin/libfreetype-6.dll -------------------------------------------------------------------------------- /XEXDecompiler3/bin/Release/bin/libglib-2.0-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/XEXDecompiler3/bin/Release/bin/libglib-2.0-0.dll -------------------------------------------------------------------------------- /XEXDecompiler3/bin/Release/bin/libgmodule-2.0-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/XEXDecompiler3/bin/Release/bin/libgmodule-2.0-0.dll -------------------------------------------------------------------------------- /XEXDecompiler3/bin/Release/bin/libgobject-2.0-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/XEXDecompiler3/bin/Release/bin/libgobject-2.0-0.dll -------------------------------------------------------------------------------- /XEXDecompiler3/bin/Release/bin/libgthread-2.0-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/XEXDecompiler3/bin/Release/bin/libgthread-2.0-0.dll -------------------------------------------------------------------------------- /XEXDecompiler3/bin/Release/bin/libgtk-win32-2.0-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/XEXDecompiler3/bin/Release/bin/libgtk-win32-2.0-0.dll -------------------------------------------------------------------------------- /XEXDecompiler3/bin/Release/bin/libgtkglext-win32-1.0-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/XEXDecompiler3/bin/Release/bin/libgtkglext-win32-1.0-0.dll -------------------------------------------------------------------------------- /XEXDecompiler3/bin/Release/bin/libltdl-3.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/XEXDecompiler3/bin/Release/bin/libltdl-3.dll -------------------------------------------------------------------------------- /XEXDecompiler3/bin/Release/bin/libpango-1.0-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/XEXDecompiler3/bin/Release/bin/libpango-1.0-0.dll -------------------------------------------------------------------------------- /XEXDecompiler3/bin/Release/bin/libpangocairo-1.0-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/XEXDecompiler3/bin/Release/bin/libpangocairo-1.0-0.dll -------------------------------------------------------------------------------- /XEXDecompiler3/bin/Release/bin/libpangoft2-1.0-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/XEXDecompiler3/bin/Release/bin/libpangoft2-1.0-0.dll -------------------------------------------------------------------------------- /XEXDecompiler3/bin/Release/bin/libpangowin32-1.0-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/XEXDecompiler3/bin/Release/bin/libpangowin32-1.0-0.dll -------------------------------------------------------------------------------- /XEXDecompiler3/bin/Release/bin/libpng12.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/XEXDecompiler3/bin/Release/bin/libpng12.dll -------------------------------------------------------------------------------- /XEXDecompiler3/bin/Release/bin/libpng14-14.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/XEXDecompiler3/bin/Release/bin/libpng14-14.dll -------------------------------------------------------------------------------- /XEXDecompiler3/bin/Release/bin/libxml2.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/XEXDecompiler3/bin/Release/bin/libxml2.dll -------------------------------------------------------------------------------- /XEXDecompiler3/bin/Release/bin/ltdl.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/XEXDecompiler3/bin/Release/bin/ltdl.dll -------------------------------------------------------------------------------- /XEXDecompiler3/bin/Release/bin/zlib1.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeroKilo/DirectedGraphsWV/a7bcbe80d48259ba2e4cb06cc55fad2dfbf13796/XEXDecompiler3/bin/Release/bin/zlib1.dll --------------------------------------------------------------------------------