├── .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
--------------------------------------------------------------------------------