static void Main(string[] args) { try { MKL.Lic("Quick Neil - QuickNeil.cs", "GNU General Public License 3"); MKL.Version("Quick Neil - QuickNeil.cs", "20.08.14"); if (args.Length == 0) { Head(); QCol.Cyan("Usage: "); QCol.Yellow($"{qstr.StripAll(MKL.MyExe)} "); QCol.Green("<script file> "); QCol.Magenta("[<arguments>]\n\n"); QCol.White($"{MKL.All()}\n\n"); return; } else { var addargs = new StringBuilder("{"); for (int i = 1; i < args.Length; i++) { if (i >= 2) { addargs.Append(", "); } var arg = args[i].Replace("\\", "\\\\"); for (int j = 0; j < 256; j++) { if (j < 32 || j > 120 || (char)j == '"') { arg = arg.Replace($"{(char)j}", $"\\{qstr.Right($"00{j}", 3)}"); } } addargs.Append($"\"{arg}\""); } addargs.Append("}"); Debug.WriteLine($"DBG:Argument array {addargs}"); //throw new Exception ($"Argument array {addargs}"); // debug only! LoadScript(args[0], $"{addargs}"); } } catch (Exception e) { QCol.QuickError(e.Message); #if DEBUG QCol.Cyan("Traceback\n"); QCol.White($"{e.StackTrace}\n"); #endif } finally { TrickyDebug.AttachWait(); } }
static void Run(string[] args) { var f = new FlagParse(args); if (args.Length == 0) { QCol.White("\tUsage: "); QCol.Cyan($"{qstr.StripDir(MKL.MyExe)} "); QCol.Green("<command> "); QCol.Yellow("<parameters>\n\n"); var tabx = 5; foreach (string k in Features.Keys) { if (k.Length > tabx) { tabx = k.Length; } } foreach (string k in Features.Keys) { QCol.Green(k); for (int i = k.Length; i < tabx + 2; ++i) { Console.Write(" "); } QCol.Yellow($"{Features[k].Description}\n"); } return; } var cmd = args[0].ToUpper(); if (!Features.ContainsKey(cmd)) { QCol.QuickError($"Command '{cmd}' has not been understood"); return; } Features[cmd].Parse(f); if (!f.Parse()) { QCol.QuickError($"Bad command line input"); return; } Features[cmd].Run(f); }
static void Main(string[] args) { // Header QCol.Red("Kitty "); QCol.Magenta("Coded by: Tricky\n"); QCol.Yellow($"(c) {MKL.CYear(2019)} Jeroen P. Broks\n\n"); // Init Dirry.InitAltDrives(); KittyHigh.Init(); new KittyHighCS(); new KittyHighNIL(); new KittyHighLua(); new KittyHighGINI(); new KittyHighScyndi(); new KittyBlitzMax(); new KittyHighC(); new KittyHighPascal(); new KittyHighBrainFuck(); new KittyHighGo(); new KittyHighBlitzBasic(); new KittyHighSASKIA(); new KittyHighPython(); new KittyHighJavaScript(); new KittyHighWhiteSpace(); new KittyHighBASIC(); new KittyHighJava(); new KittyHighINI(); new KittyHighVB(); new KittyHighCobra(); new KittyHighHtml(); new KittyHighXml(); new KittyHighNeil(); var slin = true; if (args.Length == 0) { QCol.Green("Kitty is a simple program which will help you view source files in syntax highlight\n"); QCol.Magenta("Usage:\t"); QCol.Yellow("Kitty "); QCol.Cyan("<switches> "); QCol.White("<files>"); QCol.Green("["); QCol.Cyan("<switches> "); QCol.White("<files>"); QCol.Green("..]"); Console.WriteLine("\n\n"); QCol.Yellow("Please note that switches affect all files defined after it not those that come before it. This allows you to configure each file shown\n\n"); QCol.Cyan("-ln "); QCol.Yellow("Toggle line numbers on/off (default is on)\n"); QCol.Cyan("-nolinenumbers "); QCol.Yellow("Turn line numbers off\n"); QCol.Cyan("-Showlinenumbers "); QCol.Yellow("Turn line numbers on\n"); QCol.Cyan("-re "); QCol.Yellow("Toggle searching by RegEx (this allows limited support for Wild Cards and more nice things)\n"); QCol.Cyan("-p, -more "); QCol.Yellow("Turn \"more\" mode on/off. (Read note below)\n"); QCol.Cyan("-support "); QCol.Yellow("Show a list of all supported file formats\n"); QCol.Red("\n\nThe \"more\" mode!\n"); QCol.Yellow("Does not entirely work the same as the 'more' utility, but has the same primary function!\n"); QCol.Yellow("When the \"more\" bar appears you can hit space to show the next line, Enter/Return to show the entire next page and escape to turn the more mode off\n"); QCol.White("\n\nKitty can be used as as CLI tool, but the integry has been made to be included in your own projects, and has been released under the terms of the zlib license\n\n"); return; } // Go for it QCol.Doing("Called from:", System.IO.Directory.GetCurrentDirectory()); void ViewFile(string a) { try { var arg = Dirry.AD(a).Replace("\\", "/"); QCol.Doing("Reading", arg); KittyHigh.PageBreak(); var src = QuickStream.LoadString(arg); var eoln = qstr.EOLNType(arg); // QCol.Doing("EOLN", eoln); // didn't work anyway //QCol.OriCol(); var ext = qstr.ExtractExt(arg).ToLower(); KittyHigh Viewer = KittyHigh.Langs["OTHER"]; if (KittyHigh.Langs.ContainsKey(ext)) { Viewer = KittyHigh.Langs[ext]; } QCol.Doing("Type", Viewer.Language); KittyHigh.PageBreak(); KittyHigh.WriteLine(); Viewer.Show(src, slin); } catch (Exception ex) { QCol.QuickError($"{ex.Message}\n"); #if DEBUG QCol.Magenta($"{ex.StackTrace}\n\n"); #endif } } var aregex = false; foreach (string a in args) { if (qstr.Prefixed(a, "-")) { switch (a.ToLower()) { case "-ln": slin = !slin; break; case "-nolinenumbers": slin = false; break; case "-showlinenumbers": slin = true; break; case "-p": case "-more": KittyHigh.BrkLines = !KittyHigh.BrkLines; break; case "-re": aregex = !aregex; break; case "-support": foreach (string ext in KittyHigh.Langs.Keys) { QCol.Cyan(qstr.Left($"{ext} ", 20)); QCol.Yellow($"{KittyHigh.Langs[ext].Language}\n"); } break; default: QCol.QuickError($"Unknown switch: {a}"); break; } } else if (aregex) { QCol.Doing("Searching for RegEx", a); var rgxl = RegExTree.Tree(a); foreach (string af in rgxl) { ViewFile(af); } } else { ViewFile(a); } } TrickyDebug.AttachWait(); }
public override void Run(FlagParse fp) { var ShowXStuff = fp.GetBool("x"); var ShowAlias = fp.GetBool("a"); var ShowAllDat = fp.GetBool("xd"); if (fp.Args.Length == 1) { QCol.Green("Verboses the files in a JCR resource:\n\n"); QCol.Yellow("-x "); QCol.Cyan("Show notes and author (if available)\n"); QCol.Yellow("-a "); QCol.Cyan("List out all aliases"); QCol.Yellow("-xd "); QCol.Cyan("Show all entry variable settings"); return; } if (fp.Args.Length > 2) { QCol.QuickError("Only ONE file please!"); return; } var jcr = JCR6.Dir(fp.Args[1]); if (jcr == null) { QCol.QuickError(JCR6.JERROR); return; } { // Resources var ResCount = new TMap <string, int>(); var CmpCount = new TMap <string, int>(); foreach (TJCREntry ent in jcr.Entries.Values) { ResCount[ent.MainFile]++; CmpCount[ent.Storage]++; } XPrint(15, ConsoleColor.White, "Type"); XPrint(9, ConsoleColor.White, "Entries", Just.Right); XPrint(10, ConsoleColor.White, " Resource:"); Console.WriteLine(); XPrint(15, ConsoleColor.White, "===="); XPrint(9, ConsoleColor.White, " =======", Just.Right); XPrint(10, ConsoleColor.White, " ========="); Console.WriteLine(); foreach (string k in ResCount.Keys) { var rec = JCR6.Recognize(k); if (rec != "NONE") { XPrint(15, ConsoleColor.Blue, JCR6.FileDrivers[rec].name); XPrint(9, ConsoleColor.Cyan, ResCount[k]); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine($" {k}"); } } Console.WriteLine(); XPrint(20, ConsoleColor.White, "Storage Method"); XPrint(10, ConsoleColor.White, "Used", Just.Right); Console.WriteLine(); XPrint(20, ConsoleColor.White, "=============="); XPrint(10, ConsoleColor.White, "====", Just.Right); Console.WriteLine(); foreach (string k in CmpCount.Keys) { XPrint(20, ConsoleColor.Blue, k); XPrint(10, ConsoleColor.Cyan, CmpCount[k], Just.Right); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine(); } } Console.WriteLine(); // Comments foreach (string name in jcr.Comments.Keys) { QCol.White($"{name}\n"); for (int i = 0; i < name.Length; i++) { QCol.White("="); } QCol.Yellow($"\n{jcr.Comments[name]}\n\n"); } // Blocks (if any) //if (jcr.Blocks.Count>0) { bool bfirst = true; foreach (var B in jcr.Blocks.Values) { if (bfirst) { bfirst = false; Console.WriteLine(); XPrint(5, ConsoleColor.White, "Block", Just.Right); WhiteSpace(2); XPrint(10, ConsoleColor.White, "Compressed", Just.Right); WhiteSpace(2); XPrint(10, ConsoleColor.White, "Size", Just.Right); WhiteSpace(2); XPrint(5, ConsoleColor.White, "Ratio", Just.Right); WhiteSpace(2); XPrint(7, ConsoleColor.White, "Storage"); Console.WriteLine(); XPrint(5, ConsoleColor.White, "=====", Just.Right); WhiteSpace(2); XPrint(10, ConsoleColor.White, "==========", Just.Right); WhiteSpace(2); XPrint(10, ConsoleColor.White, "====", Just.Right); WhiteSpace(2); XPrint(5, ConsoleColor.White, "=====", Just.Right); WhiteSpace(2); XPrint(7, ConsoleColor.White, "======="); Console.WriteLine(); } XPrint(5, ConsoleColor.Blue, B.ID); WhiteSpace(2); XPrint(10, ConsoleColor.Green, B.CompressedSize); WhiteSpace(2); XPrint(10, ConsoleColor.Red, B.Size); WhiteSpace(2); XPrint(5, ConsoleColor.Magenta, $"{B.Ratio}%", Just.Right); WhiteSpace(2); XPrint(7, ConsoleColor.Yellow, B.Storage); Console.WriteLine(); } //foreach (var BK in jcr.Blocks.Keys) Console.WriteLine(BK); //} // Entries Console.WriteLine(); XPrint(15, ConsoleColor.White, "Kind"); WhiteSpace(2); XPrint(10, ConsoleColor.White, "Compressed", Just.Right); WhiteSpace(2); XPrint(10, ConsoleColor.White, "Size", Just.Right); WhiteSpace(2); XPrint(5, ConsoleColor.White, "Ratio", Just.Right); WhiteSpace(2); XPrint(7, ConsoleColor.White, "Storage"); WhiteSpace(2); Console.WriteLine("Entry"); XPrint(15, ConsoleColor.White, "===="); WhiteSpace(2); XPrint(10, ConsoleColor.White, "==========", Just.Right); WhiteSpace(2); XPrint(10, ConsoleColor.White, "====", Just.Right); WhiteSpace(2); XPrint(5, ConsoleColor.White, "=====", Just.Right); WhiteSpace(2); XPrint(7, ConsoleColor.White, "======="); WhiteSpace(2); Console.WriteLine("====="); foreach (TJCREntry ent in jcr.Entries.Values) { Console.BackgroundColor = ConsoleColor.Black; if (ent.MainFile != fp.Args [1].Replace("\\", "/")) { Console.BackgroundColor = ConsoleColor.DarkBlue; } XPrint(15, ConsoleColor.Blue, FTypes[qstr.ExtractExt(ent.Entry).ToLower()]); WhiteSpace(2); if (ent.Block == 0) { XPrint(10, ConsoleColor.Green, ent.CompressedSize); } else { XPrint(10, ConsoleColor.DarkGreen, $"Block: {ent.Block}"); } WhiteSpace(2); XPrint(10, ConsoleColor.Red, ent.Size); WhiteSpace(2); if (ent.Block == 0) { XPrint(5, ConsoleColor.Magenta, ent.Ratio, Just.Right); } else { XPrint(5, ConsoleColor.Magenta, ""); } WhiteSpace(2); XPrint(7, ConsoleColor.Yellow, ent.Storage); WhiteSpace(2); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine(ent.Entry); if (ShowXStuff) { if (ent.Author != "") { QCol.Doing("\tAuthor", ent.Author); } if (ent.Notes != "") { QCol.Green($"{ent.Notes}\n"); } } if (ShowAlias) { foreach (string AlFile in jcr.Aliases(ent)) { QCol.Doing("\tAlias", AlFile); } } if (ShowAllDat) { foreach (string k in ent.databool.Keys) { QCol.Magenta("\tbool "); QCol.Yellow(k); QCol.White(" = "); if (ent.databool[k]) { QCol.Green("True\n"); } else { QCol.Red("False\n"); } } foreach (string k in ent.datastring.Keys) { QCol.Magenta("\tstring "); QCol.Yellow(k); QCol.White(" = "); QCol.Green($"\"{ent.datastring[k]}\"\n"); } foreach (string k in ent.dataint.Keys) { QCol.Magenta("\tint "); QCol.Yellow(k); QCol.White(" = "); QCol.Cyan($"{ent.dataint[k]}\n"); } } } }
public void Go() { // Create or update? TJCRCreate jout; var temp = $"{qstr.ExtractDir(jcrfile)}/{qstr.md5($"{jcrfile}.{DateTime.Now.ToString()}")}.$jcr"; TJCRDIR jtmp = null; if (updating) { jout = new TJCRCreate(temp, filetablecompression, sig); } else { jout = new TJCRCreate(jcrfile, filetablecompression, sig); } if (jout == null || jout.mystream == null) { QCol.QuickError($"Error creating JCR file >> {JCR6.JERROR}"); return; } // Add Comments foreach (string n in Comments.Keys) { QCol.Doing("Comment", n); jout.AddComment(n, Comments[n]); } // Add Dependencies foreach (var d in Imports) { QCol.Doing("Import", d); jout.Import(d); } foreach (var d in Requires) { QCol.Doing("Require", d); jout.Require(d); } // Add files foreach (Fil2Add aFile in Jiffy) { try { if (nomerge || JCR6.Recognize(aFile.source) == "NONE") { QCol.Doing("Adding", aFile.source, "\r"); jout.AddFile(aFile.source, aFile.target, aFile.storage, aFile.author, aFile.notes); //Console.WriteLine("\nBefore AfterAdd\n"); #if DEBUG QCol.Doing("TARGET:", $"{aFile.target}=>{aFile.TARGET}"); #endif var E = jout.Entries[aFile.TARGET]; AfterAdd(E, aFile); //Console.WriteLine("\nAfter AfterAdd\n"); } else { QCol.Doing("Merging", aFile.source); var merge = JCR6.Dir(aFile.source); foreach (TJCREntry ent in merge.Entries.Values) { QCol.Doing("Adding", "", ""); QCol.Magenta($"{aFile.source}/"); QCol.Cyan($"{ent.Entry}\r"); var tar = $"{aFile.target}/{ent.Entry}"; if (puremerge) { jout.JCRCopy(merge, ent.Entry, tar); } else { var buf = merge.JCR_B(ent.Entry); jout.AddBytes(buf, tar, aFile.storage, ent.Author, ent.Notes); } //var E = jout.Entries[tar.ToUpper()]; var E = jout.LastAddedEntry; AfterAdd(E, aFile); } } } catch (Exception crap) { QCol.Red(" Failed:\n"); if (JCR6.JERROR != "") { QCol.QuickError($"JCR6: {JCR6.JERROR}"); } QCol.QuickError($".NET: {crap.Message}"); #if DEBUG QCol.Magenta($"{crap.StackTrace}\n\n"); #endif } } // Process aliases //foreach(string ori in AliasList.Keys) { foreach (SAlias SAL in AliasList) { QCol.Yellow("Alias: "); QCol.Red(SAL.ori); QCol.White(" => "); QCol.Green(SAL.tar); jout.Alias(SAL.ori, SAL.tar); QCol.White("\n"); } // Reorganize Files if (updating) { try { QCol.Doing("Reorganizing", "Data"); jtmp = JCR6.Dir(jcrfile); if (jtmp == null) { throw new Exception($"JCR failed to analyse the old archive: {JCR6.JERROR}"); } var indicator = 0; foreach (TJCREntry entry in jtmp.Entries.Values) { indicator++; if (indicator % 5 == 0) { QCol.Blue("\r \r.\b"); } else { QCol.Blue(".\b"); } if (!jout.Entries.ContainsKey(entry.Entry.ToUpper())) { QCol.Green("O"); jout.JCRCopy(jtmp, entry.Entry); } else { QCol.Red("X"); } } Console.WriteLine(); } catch (Exception well) { QCol.QuickError(well.Message); } } // Add dependency requests // TODO: Dependency requests // Closure and overwrite old JCR file if applicable. QCol.Doing("Finalizing", jcrfile); jout.Close(); if (updating) { try { File.Delete(jcrfile); File.Move(temp, jcrfile); } catch (Exception E) { QCol.QuickError(E.Message); } } }
void AfterAdd(TJCREntry E, Fil2Add aFile) { if (E == null) { QCol.QuickError("Entry = null! Something went wrong!"); } if (aFile == null) { QCol.QuickError("aFile = null! Something went wrong!"); } QCol.Doing("Configuring", "", "\r"); var deferrors = new List <string>(); foreach (string vars in aFile.xBool.Keys) { if (vars[0] == '_') { deferrors.Add($"Cannot define protected boolean variable {vars}"); } else { E.databool[vars] = aFile.xBool[vars]; } } foreach (string vars in aFile.xInt.Keys) { if (vars[0] == '_') { deferrors.Add($"Cannot define protected integer variable {vars}"); } else { E.dataint[vars] = aFile.xInt[vars]; } } foreach (string vars in aFile.xString.Keys) { if (vars[0] == '_') { deferrors.Add($"Cannot define protected string variable {vars}"); } else { E.datastring[vars] = aFile.xString[vars]; } } if (E.Storage == "Store") { // 12345 QCol.White(" Stored:\n"); } else { var deel = (decimal)E.CompressedSize; var geheel = (decimal)E.Size; var pureratio = deel / geheel; QCol.Blue($"{qstr.Right($" {(int)(pureratio * 100)}", 3)}% "); QCol.Green($"Packed: {E.Storage}\n"); } if (deferrors.Count > 0) { QCol.QuickError("Although the file has been succesfully added, there are configuration errors!"); foreach (string de in deferrors) { QCol.Red("\t=> "); QCol.Yellow(de); } } }