private void AddIfElseBranches(If control, JPF jpf, JMP jmp) { Int32 endOfBlock = jmp.Index; while (true) { Int32 newJpfIndex = jpf.Index; JPF newJpf = _instructions[newJpfIndex] as JPF; if (newJpf == null || newJpf.Index > endOfBlock) { control.AddElse(jpf.Index, endOfBlock); return; } JMP newJmp = _instructions[newJpf.Index - 1] as JMP; if (newJmp == null) { if (newJpf.Index == endOfBlock) { // if-elseif without jmp _processed.Process(newJpf); control.AddIf(newJpfIndex, newJpf.Index); } else { // if-else without jmp control.AddElse(jpf.Index, endOfBlock); } return; } // Isn't our jump if (newJmp.Index != endOfBlock) { control.AddElse(jpf.Index, endOfBlock); return; } jpf = newJpf; jmp = newJmp; _processed.Process(jpf); _processed.TryProcess(jmp); control.AddIf(newJpfIndex, jpf.Index); if (jpf.Index == endOfBlock) { return; } } }
private static Script genZip(ScriptContext context, List <string> filteredArgs) { Script script; script = createEmptyScript(context, "xsharper //zip"); script.Id = "zip"; filteredArgs.AddRange(context.GetStringArray(xs.zip)); script.Usage.Options = UsageOptions.IfHelp | UsageOptions.IfNoArguments | UsageOptions.UsageLine | UsageOptions.AutoSuffix; script.Parameters.Add(new CommandLineParameter("zip", CommandLineValueCount.Single, null, null) { Required = true, Description = "archive.zip", Value = "Zip archive to create" }); script.Parameters.Add(new CommandLineParameter("source", CommandLineValueCount.Single, ".", null) { Description = "directory", Value = "Directory to compress" }); script.Parameters.Add(new CommandLineParameter("filter", CommandLineValueCount.Single, "*.*", null) { Description = "filter", Value = "File wildcard" }); script.Parameters.Add(new CommandLineParameter("dirfilter", CommandLineValueCount.Single, "*", null) { Description = "directory-filter", Value = "Directory wildcard" }); script.Parameters.Add(new CommandLineParameter(null, "zipTime", CommandLineValueCount.Single, "fileTime", null) { Synonyms = "zt", Value = "What time to store in zip ( fileTime/utcFileTime/now/utcNow )" }); script.Parameters.Add(new CommandLineParameter(null, "password", CommandLineValueCount.Single, null, null) { Synonyms = "p", Value = "Archive password" }); script.Parameters.Add(new CommandLineParameter(null, "recursive", CommandLineValueCount.None, "0", "1") { Synonyms = "r", Value = "Recursive" }); script.Parameters.Add(new CommandLineParameter(null, "ignore", CommandLineValueCount.None, "0", "1") { Synonyms = "i", Value = "Ignore errors" }); script.Parameters.Add(new CommandLineParameter(null, "emptyDirectories", CommandLineValueCount.None, "0", "1") { Value = "Include empty directories" }); script.Parameters.Add(new CommandLineParameter(null, "hidden", CommandLineValueCount.None, "0", "1") { Synonyms = "i", Value = "Extract hidden files" }); script.Add(new PathOperation { Value = "${zip}", Operation = PathOperationType.GetFullPath, OutTo = "zip" }); script.Add(new If(new Set("zip", "${=Path.ChangeExtension(${zip},'.zip')}")) { IsEmpty = "${=Path.GetExtension(${zip})}" }); script.Add(new SetAttr("z", "zipTime", "${zipTime}")); script.Add(new SetAttr("z", "recursive", "${recursive}")); script.Add(new SetAttr("z", "hidden", "${hidden}")); script.Add(new SetAttr("z", "emptyDirectories", "${emptyDirectories}")); script.Add(new Print("Compressing ${source} => ${zip} ... ")); Zip z = new Zip { Id = "z", From = "${source}", To = "${zip}", Transform = TransformRules.Expand, Recursive = true, Syntax = FilterSyntax.Wildcard, Filter = "${filter}", DirectoryFilter = "${dirfilter}", Password = "******" }; If oif = new If(new Print { Value = " ${from}", OutTo = "^info" }) { IsTrue = "${=$.IsFile}" }; If f = new If(new[] { new Print("Failed: '${}' : ${=c.CurrentException.Message}") { OutTo = "^error" } }); f.IsTrue = "${ignore}"; f.AddElse(new Throw()); z.AddCatch(f); z.Add(oif); script.Add(z); script.Add(new Print { Value = "Completed" }); return(script); }
private static Script genUnzip(ScriptContext context, List <string> filteredArgs) { Script script; string[] s = context.GetStringArray(xs.unzip); if (s.Length < 1) { throw new ArgumentException("Invalid arguments to " + xs.unzip + " command"); } script = createEmptyScript(context, "xsharper //unzip"); script.Id = "unzip"; filteredArgs.AddRange(s); script.Usage.Options = UsageOptions.IfHelp | UsageOptions.IfNoArguments | UsageOptions.UsageLine | UsageOptions.AutoSuffix; script.Parameters.Add(new CommandLineParameter("zip", CommandLineValueCount.Single, null, null) { Required = true, Description = "archive.zip", Value = "Zip archive to extract" }); script.Parameters.Add(new CommandLineParameter("destination", CommandLineValueCount.Single, ".", null) { Description = "directory", Value = "Directory where to decompress files" }); script.Parameters.Add(new CommandLineParameter("filter", CommandLineValueCount.Single, "*.*", null) { Description = "filter", Value = "File wildcard" }); script.Parameters.Add(new CommandLineParameter("dirfilter", CommandLineValueCount.Single, "*", null) { Description = "directory-filter", Value = "Directory wildcard" }); script.Parameters.Add(new CommandLineParameter(null, "zipTime", CommandLineValueCount.Single, "fileTime", null) { Synonyms = "zt", Value = "How to process time for files created in zip entries ( fileTime/utcFileTime = set to entry time, now/utcNow =ignore)" }); script.Parameters.Add(new CommandLineParameter(null, "overwrite", CommandLineValueCount.Single, OverwriteMode.Always.ToString(), null) { Synonyms = "o", Value = "Overwrite mode" }); script.Parameters.Add(new CommandLineParameter(null, "password", CommandLineValueCount.Single, null, null) { Synonyms = "p", Value = "Archive password" }); script.Parameters.Add(new CommandLineParameter(null, "ignore", CommandLineValueCount.None, "0", "1") { Synonyms = "i", Value = "Ignore errors" }); script.Parameters.Add(new CommandLineParameter(null, "hidden", CommandLineValueCount.None, "0", "1") { Synonyms = "i", Value = "Extract hidden files" }); script.Add(new PathOperation { Value = "${zip}", Operation = PathOperationType.GetFullPath, OutTo = "zip", Existence = Existence.FileExists }); script.Add(new If(new Set("zip", "${=Path.ChangeExtension(${zip},'.zip')}")) { IsEmpty = "${=Path.GetExtension(${zip})}" }); script.Add(new PathOperation { Value = "${destination}", Operation = PathOperationType.ToDirectoryInfo, Backslash = BackslashOption.Add, OutTo = "destination" }); script.Add(new SetAttr("z", "zipTime", "${zipTime}")); script.Add(new SetAttr("z", "overwrite", "${overwrite}")); script.Add(new SetAttr("z", "hidden", "${hidden}")); script.Add(new Print { Value = "Extracting ${zip} => ${destination} ... " }); Unzip z = new Unzip() { Id = "z", From = "${zip}", To = "${destination}", Transform = TransformRules.Expand, Syntax = FilterSyntax.Auto, Filter = "${filter}", DirectoryFilter = "${dirfilter}", Password = "******" }; z.Add(new Print { Value = " ${to}", OutTo = "^info" }); If f = new If(new[] { new Print("Failed: '${}' : ${=c.CurrentException.Message}") { OutTo = "^error" } }); f.IsTrue = "${ignore}"; f.AddElse(new Throw()); z.AddCatch(f); script.Add(z); script.Add(new Print { Value = "Completed" }); return(script); }