diff --git a/trunk/src/com/jpexs/decompiler/flash/SWF.java b/trunk/src/com/jpexs/decompiler/flash/SWF.java index bb80fdced..dbff47dda 100644 --- a/trunk/src/com/jpexs/decompiler/flash/SWF.java +++ b/trunk/src/com/jpexs/decompiler/flash/SWF.java @@ -573,8 +573,8 @@ public class SWF { }; new RetryTask(rio, handler).run(); synchronized (ABC.class) { - long time=stopTime-startTime; - informListeners("export", "Exported script " + index.getAndIncrement() + "/" + count + " " + path+", "+Helper.formatTimeSec(time)); + long time = stopTime - startTime; + informListeners("export", "Exported script " + index.getAndIncrement() + "/" + count + " " + path + ", " + Helper.formatTimeSec(time)); } return null; } @@ -607,7 +607,7 @@ public class SWF { } List> packs = getAS3Packs(); for (MyEntry item : packs) { - Future future = executor.submit(new ExportPackTask(handler, cnt, packs.size(), item.key, item.value, outdir, abcTags, isPcode,paralel)); + Future future = executor.submit(new ExportPackTask(handler, cnt, packs.size(), item.key, item.value, outdir, abcTags, isPcode, paralel)); futureResults.add(future); } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionPush.java b/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionPush.java index 9cb0356a6..b4e28b261 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionPush.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionPush.java @@ -356,7 +356,7 @@ public class ActionPush extends Action { } } if (dvt.computedRegValue instanceof TemporaryRegister) { - stack.push(((TemporaryRegister) dvt.computedRegValue).value); + stack.push(new TemporaryRegister(((RegisterNumber) o).number, ((TemporaryRegister) dvt.computedRegValue).value)); } else { stack.push(dvt); } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionSetProperty.java b/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionSetProperty.java index 6ad42a3c4..d2bbd0f8c 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionSetProperty.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionSetProperty.java @@ -95,8 +95,11 @@ public class ActionSetProperty extends Action { ret = new PreDecrementActionItem(this, ((DecrementActionItem) value).object); } } + } else { + sr.temporary = true; + ((SetPropertyActionItem) ret).setValue(sr); } - variables.put("__register" + sr.register.number, new TemporaryRegister(ret)); + variables.put("__register" + sr.register.number, new TemporaryRegister(sr.register.number, ret)); return; } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionSetVariable.java b/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionSetVariable.java index 2130f7c05..6eaa5b153 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionSetVariable.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/swf4/ActionSetVariable.java @@ -106,10 +106,13 @@ public class ActionSetVariable extends Action { ret = new PreDecrementActionItem(this, ((DecrementActionItem) value).object); } } + } else { + sr.temporary = true; + ((SetVariableActionItem) ret).setValue(sr); } - variables.put("__register" + sr.register.number, new TemporaryRegister(ret)); + variables.put("__register" + sr.register.number, new TemporaryRegister(sr.register.number, ret)); return; } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/swf5/ActionSetMember.java b/trunk/src/com/jpexs/decompiler/flash/action/swf5/ActionSetMember.java index 4fe3354dd..b132a042c 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/swf5/ActionSetMember.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/swf5/ActionSetMember.java @@ -107,8 +107,11 @@ public class ActionSetMember extends Action { ret = new PreDecrementActionItem(this, ((DecrementActionItem) value).object); } } + } else { + sr.temporary = true; + ((SetMemberActionItem) ret).setValue(sr); } - variables.put("__register" + sr.register.number, new TemporaryRegister(ret)); + variables.put("__register" + sr.register.number, new TemporaryRegister(sr.register.number, ret)); return; } } diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/Main.java b/trunk/src/com/jpexs/decompiler/flash/gui/Main.java index cd900dd67..3d2964a9e 100644 --- a/trunk/src/com/jpexs/decompiler/flash/gui/Main.java +++ b/trunk/src/com/jpexs/decompiler/flash/gui/Main.java @@ -625,6 +625,59 @@ public class Main { offerAssociation(); showModeFrame(); } else { + if (args[pos].equals("-config")) { + pos++; + if (args.length <= pos) { + System.err.println("Config values expected"); + badArguments(); + } + String cfgStr = args[pos]; + String cfgs[]; + if (cfgStr.contains(",")) { + cfgs = cfgStr.split(","); + } else { + cfgs = new String[]{cfgStr}; + } + + String booleanKeys[] = new String[]{ + "decompile", + "paralelSpeedUp", + "internalFlashViewer", + "autoDeobfuscate", + "cacheOnDisk"}; + + for (String c : cfgs) { + String cp[]; + if (c.contains("=")) { + cp = c.split("="); + } else { + cp = new String[]{c, "1"}; + } + String key = cp[0]; + String value = cp[1]; + for (String bk : booleanKeys) { + if (key.toLowerCase().equals(bk.toLowerCase())) { + Boolean bValue = null; + if (value.equals("0") || value.toLowerCase().equals("false") || value.toLowerCase().equals("no") || value.toLowerCase().equals("off")) { + bValue = false; + } + if (value.equals("1") || value.toLowerCase().equals("true") || value.toLowerCase().equals("yes") || value.toLowerCase().equals("on")) { + bValue = true; + } + if (bValue != null) { + System.out.println("Config " + bk + " set to " + bValue); + Configuration.setConfig(bk, bValue); + } + } + } + } + pos++; + if (args.length <= pos) { + saveConfig(); + System.out.println("Configuration saved"); + return; + } + } if (args[pos].equals("-removefromcontextmenu")) { addToContextMenu(false); } else if (args[pos].equals("-addtocontextmenu")) { @@ -942,12 +995,16 @@ public class Main { } } - public static void exit() { + public static void saveConfig() { try { Configuration.saveToFile(getConfigFile(), getReplacementsFile()); } catch (IOException ex) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } + } + + public static void exit() { + saveConfig(); FlashPlayerPanel.unload(); System.exit(0); } diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/MainFrame.java b/trunk/src/com/jpexs/decompiler/flash/gui/MainFrame.java index eb1d2027c..99611e890 100644 --- a/trunk/src/com/jpexs/decompiler/flash/gui/MainFrame.java +++ b/trunk/src/com/jpexs/decompiler/flash/gui/MainFrame.java @@ -2598,7 +2598,7 @@ public class MainFrame extends AppRibbonFrame implements ActionListener, TreeSel Main.stopWork(); long timeAfter = System.currentTimeMillis(); long timeMs = timeAfter - timeBefore; - + setStatus(translate("export.finishedin").replace("%time%", Helper.formatTimeSec(timeMs))); } }).start(); diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java b/trunk/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java index dd47425c3..a313c381e 100644 --- a/trunk/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java +++ b/trunk/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java @@ -260,7 +260,7 @@ public class ActionPanel extends JPanel implements ActionListener { }else{ editor.setContentType("text/flasm"); }*/ - editor.setText(stripped); + editor.setText(stripped); for (Highlighting h : disassembledHilights) { if (h.offset == offset) { if (h.startPos <= editor.getText().length()) { diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/DoActionTag.java b/trunk/src/com/jpexs/decompiler/flash/tags/DoActionTag.java index a260ccec0..37a5b4f7a 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/DoActionTag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/DoActionTag.java @@ -48,7 +48,7 @@ public class DoActionTag extends Tag implements ASMSource { /** * Constructor * - * @param swf + * @param swf * @param data Data bytes * @param version SWF version * @param pos