diff --git a/cce.sln b/cce.sln
new file mode 100644
index 0000000..2e6a344
--- /dev/null
+++ b/cce.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.31729.503
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "cce", "cce\cce.csproj", "{F8D0AB76-7AC7-4F50-8556-58A2C2255D40}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {F8D0AB76-7AC7-4F50-8556-58A2C2255D40}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F8D0AB76-7AC7-4F50-8556-58A2C2255D40}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F8D0AB76-7AC7-4F50-8556-58A2C2255D40}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F8D0AB76-7AC7-4F50-8556-58A2C2255D40}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {A99DD7F3-A6FD-4246-A7B7-0A9829779930}
+ EndGlobalSection
+EndGlobal
diff --git a/cce/App.config b/cce/App.config
new file mode 100644
index 0000000..56efbc7
--- /dev/null
+++ b/cce/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/cce/Program.cs b/cce/Program.cs
new file mode 100644
index 0000000..7b3e87a
--- /dev/null
+++ b/cce/Program.cs
@@ -0,0 +1,144 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+using System.IO;
+using System.Windows.Forms;
+using static System.Console;
+using static System.Threading.Thread;
+
+namespace cce {
+ class Program {
+ static internal string title = "Corpus Cypher Executable (CCE)";
+ [STAThreadAttribute]
+ static void Main(string[] args) {
+ byte choice = 255;
+ while (true) {
+ SetBufferSize(240, 60);
+ SetWindowSize(120, 30);
+ Clear();
+ CursorVisible = false;
+ Utils.LagWrite("Welcome to the " + title, true);
+ //WriteLine("Welcome to the Corpus cypher executable.");
+ WriteCrypto();
+ if (choice == 255) choice = Chooser();
+ CursorVisible = false;
+ var entry = "";
+ if ((new int[] {1,2}).Contains(choice)) {
+ Utils.LagWrite("Please enter the sentence: ");
+ CursorVisible = true;
+ //Write("Please enter the sentence: ");
+ entry = ReadLine();
+ CursorVisible = false;
+ }
+
+ if (choice == 1) { Transcoder.Encode(entry); Utils.Clip(Transcoder.result); }
+ else if (choice == 2) Transcoder.Decode(entry);
+ else if (choice == 5) Transcoder.Teacher();
+ else if (choice == 9) Transcoder.head_transcribe();
+ else if (choice == 255) Help();
+ else if (choice == 0) { Beep(4000, 200); return; }
+
+ SetCursorPosition(0, WindowHeight - 2);
+ Utils.LagWrite("\nPress enter to continue, press any other key to exit"); CursorVisible = false;
+ var cki = ReadKey();
+ choice = 255;
+ var options = new char[] { '0','1','2','3','4','9'};
+ if (options.Contains(cki.KeyChar)) choice = byte.Parse(cki.KeyChar.ToString());
+ else if (cki.Key != ConsoleKey.Enter) break;
+ }
+ }
+
+ static byte Chooser() {
+ while (true) {
+ Utils.LagWrite("[1] Encode"
++"\n[2] Decode"
++"\n-------------------------"
++"\n[5] Teach new words"
++"\n-------------------------"
++"\n[9] DEV: Update JSON files using sorted files from python"
++"\n[0] Exit"
++"\n>>> ");
+ /*Write(@"Options?
+[1] Encode
+[2] Decode
+-------------------------
+[5] Teach new words
+-------------------------
+[9] DEV: Update JSON files using sorted files from python
+[0] Exit
+>> ");*/
+ CursorVisible = true;
+ var choice = ReadKey().KeyChar;
+ WriteLine();
+ switch (choice) {
+ case '1':
+ case '2':
+ case '5':
+ case '9':
+ case '0':
+ case '?':
+ case '/':
+ case '-':
+ case ',':
+ if ((new char[] { '?','/','-',','}).Contains(choice)) return 255;
+ return byte.Parse(choice.ToString());
+ default:
+ WriteLine("Not a valid option");
+ break;
+ }
+ }
+ }
+ static void WriteCrypto()
+ {
+ var pos = (CursorLeft, CursorTop);
+ var crypto = new string[] {"###########################",
+ "# #",
+ "# Corpus Cypher #",
+ "# #",
+ "###########################",
+ "# ENG = COR #",
+ "# A = A G = J M = S #",
+ "# B = T H = K N = T #",
+ "# C = Y I = I O = O #",
+ "# D = P J = T P = K #",
+ "# E = E K = K Q = R #",
+ "# F = T L = P R = T #",
+ "# #",
+ "# S = Y W = J #",
+ "# T = P X = K #",
+ "# U = U Y = Y #",
+ "# V = T Z = B #",
+ "# #",
+ "###########################"};
+ for (int i = 0; i < crypto.Length; i++)
+ {
+ CursorTop = i + 2;
+ CursorLeft = WindowWidth - crypto[i].Length - 2;
+ foreach (char c in crypto[i]) {
+ Write(c);
+ if (c != ' ') Sleep(1);
+ }
+ }
+ SetCursorPosition(pos.CursorLeft, pos.CursorTop);
+ }
+ static void Help() {
+ Clear();
+ var help = $@"Welcome to help for {title}
+This executable was made to help you encrypt something into the Corpus Cypher
+and to give you idea of what the person on the other end was trying to say.
+This executable isn't fool proof and some mistakes in the code might've slipped
+through my fingers. Still I hope it is atleast somewhat useful.
+
+Encoding: Encoded text takes on the capitalization of the entered text.
+Decoding: Decoded text takes on the capitalization of the entered text.
+
+Teaching: First you enter in the encrypted word and then you give it the translation. It will remember the word.";
+ help = help.Replace("\r\n", "\n");
+ Utils.LagWrite(help);
+ }
+
+ }
+}
diff --git a/cce/Properties/AssemblyInfo.cs b/cce/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..dc2d2a7
--- /dev/null
+++ b/cce/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("cce")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("cce")]
+[assembly: AssemblyCopyright("Copyright © 2022")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("f8d0ab76-7ac7-4f50-8556-58a2c2255d40")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/cce/Transcoder.cs b/cce/Transcoder.cs
new file mode 100644
index 0000000..9c0b402
--- /dev/null
+++ b/cce/Transcoder.cs
@@ -0,0 +1,286 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+using System.IO;
+using System.Windows.Forms;
+using static System.Console;
+using static System.Threading.Thread;
+
+namespace cce {
+ class Transcoder {
+ static internal string result = "";
+ static private Dictionary extended_dict = null;
+ static private Dictionary common_dict = null;
+ static private Dictionary substitution = new Dictionary{
+ {'a','a' },
+ {'b','t' },
+ {'c','y' },
+ {'d','p' },
+ {'e','e' },
+ {'f','t' },
+ {'g','j' },
+ {'h','k' },
+ {'i','i' },
+ {'j','t' },
+ {'k','k' },
+ {'l','p' },
+ {'m','s' },
+ {'n','t' },
+ {'o','o' },
+ {'p','k' },
+ {'q','r' },
+ {'r','t' },
+ {'s','y' },
+ {'t','p' },
+ {'u','u' },
+ {'v','t' },
+ {'w','j' },
+ {'x','k' },
+ {'y','y' },
+ {'z','b' }
+ };
+ static private Dictionary decode_key = new Dictionary{
+ {'a',"a" },
+ {'t',"bfjnrv"},
+ {'y',"csy" },
+ {'p',"dlt" },
+ {'e',"e" },
+ {'j',"gw" },
+ {'k',"hkpx" },
+ {'i',"i" },
+ {'s',"m" },
+ {'o',"o" },
+ {'r',"q" },
+ {'u',"u" },
+ {'b',"z" }
+
+ };
+ static private Dictionary path = new Dictionary{
+ {"common","common_dict.json" },
+ {"extended","extended_dict.json"}
+ };
+ static internal void Teacher() {
+ var pos = CursorTop;
+ Write("Please enter the encrypted word: ");
+ var cyphered = Console.ReadLine().ToLower();
+ if (cyphered == "") return;
+ CursorTop = pos;
+ string translation = "";
+ while (true) {
+ Write($"Please enter a translation for \"{cyphered}\": ");
+ translation = ReadLine().ToLower();
+ if (raw_encode(cyphered).ToLower() == cyphered) {
+ Console.BackgroundColor = ConsoleColor.Green; Console.ForegroundColor = ConsoleColor.Black;
+ WriteLine("Cypher Match!"); ResetColor(); break;
+ }
+ Console.BackgroundColor = ConsoleColor.Red;
+ WriteLine("Words don't match");
+ ResetColor();
+ }
+ var entered = false;
+ char cki;
+ do {
+ Utils.LagWrite(@"Where do you want to save the translation?
+[1] Common words dictionary
+[2] Extended words dictionary
+>>> ".Replace("\r\n", "\n"));
+ cki = ReadKey().KeyChar;
+ WriteLine();
+ if (extended_dict == null || common_dict == null) init();
+ switch (cki) {
+ case '1':
+ if (common_dict.ContainsKey(translation)) {
+ WriteLine("Error: Unable to add a new translation. Translation already present.");
+ } else common_dict.Add(translation, cyphered);
+ entered = true;
+ break;
+ case '2':
+ if (extended_dict.ContainsKey(translation)) {
+ WriteLine("Error: Unable to add a new translation. Translation already present.");
+ } else extended_dict.Add(translation, cyphered);
+ entered = true;
+ break;
+ default:
+ CursorLeft--; WriteLine("Not a valid option");
+ break;
+ }
+ } while (!entered);
+ Console.BackgroundColor = cki == '1' ? ConsoleColor.Green : ConsoleColor.Blue; Console.ForegroundColor = ConsoleColor.Black;
+ WriteLine("Translation Added"); ResetColor();
+ update();
+ }
+ static internal void Encode(string entry) {
+ result = raw_encode(entry);
+ WriteLine("Transcoding:\n{0}\n", entry);
+ Utils.LagWrite(result);
+ }
+ static internal void Decode(string entry) {
+ var sentence = entry.ToLower();
+ //120x30, buffer 240x60
+ if (sentence.Length >= 120) { BufferWidth = sentence.Length * 2; WindowWidth = sentence.Length + 20; }
+ Clear();
+ CursorVisible = false;
+ if (extended_dict == null || common_dict == null) init();
+ var cleaned = new char[sentence.Length];
+ var symbols = new char[sentence.Length];
+ var writeout = new char[sentence.Length];
+ for (int i = 0; i < sentence.Length; i++) {
+ if (sentence[i] >= 'a' && sentence[i] <= 'z') { cleaned[i] = sentence[i]; symbols[i] = 'x'; writeout[i] = '_'; } else { writeout[i] = symbols[i] = sentence[i]; cleaned[i] = ' '; }
+ }
+ var decode = string.Join("", cleaned).ToLower().Split(' ');
+ //var decoded = new List>();
+ Console.BackgroundColor = ConsoleColor.Green;
+ Console.Write(" "); ResetColor(); Console.WriteLine(" Frequent Words");
+ Console.BackgroundColor = ConsoleColor.Blue;
+ Console.Write(" "); ResetColor(); Console.WriteLine(" Infrequent Words");
+ Console.BackgroundColor = ConsoleColor.Red;
+ Console.Write(" "); ResetColor(); Console.WriteLine(" Letter decypher");
+ WriteLine("Transcoding:\n{0}\n", entry);
+ int memTop = CursorTop;
+ int left = 0;
+ Write(string.Join("", writeout));
+ for (int i = 0; i < decode.Length; i++) {
+ if (symbols[left] != 'x') left++;
+ //var options = new List();
+ CursorTop = memTop;
+ Console.BackgroundColor = ConsoleColor.Green;
+ Console.ForegroundColor = ConsoleColor.Black;
+ wordwrite(common_dict, decode[i], entry, left, i);
+ /*foreach (var item in common_dict) {
+ if (item.Value == decode[i]) {
+ CursorLeft = left;
+ //options.Add(item.Key);
+ for (int j = 0; j < item.Key.Length; j++) {
+ Write(Char.IsUpper(entry[i]) ? char.Parse(item.Key[j].ToString().ToUpper()) : char.Parse(item.Key[j].ToString().ToLower()));
+ }
+ Write(item.Key.ToUpper());
+ Sleep(100);
+ CursorTop++;
+ }
+ }*/
+ Console.BackgroundColor = ConsoleColor.Blue;
+ Console.ForegroundColor = ConsoleColor.Black;
+ wordwrite(extended_dict, decode[i], entry, left, i);
+ ResetColor();
+ List> letter_decode = new List>();
+ for (int j = 0; j < decode[i].Length; j++) {
+ if (decode_key.TryGetValue(decode[i][j], out string substituted)) {
+ var letterlist = new List();
+ for (int h = 0; h < substituted.Length; h++) {
+ letterlist.Add(substituted[h]);
+ }
+ letter_decode.Add(letterlist);
+ } else {
+ letter_decode.Add(new List { sentence[j] });
+ }
+ }
+ int top = CursorTop;
+ int letterleft = left;
+ Console.BackgroundColor = ConsoleColor.Red;
+ Console.ForegroundColor = ConsoleColor.Black;
+ for (int j = 0; j < letter_decode.Count; j++) {
+ for (int h = 0; h < letter_decode[j].Count; h++) {
+ CursorLeft = letterleft;
+ Write(Char.IsUpper(entry[CursorLeft]) ? Char.ToUpper(letter_decode[j][h]) : Char.ToLower(letter_decode[j][h]));
+ Sleep(10);
+ CursorTop++;
+ }
+ CursorTop = top;
+ letterleft++;
+ }
+ Sleep(80);
+ left += decode[i].Length;
+ }
+ ResetColor();
+ //return string.Join(" ", decoded);
+ }
+ static internal void head_transcribe() {
+ if(!File.Exists("dev")) {
+ Clear();
+ BackgroundColor = ConsoleColor.Red;
+ Utils.LagWrite(" \n" +
+ " Unable to comply. Not a dev version \n"+
+ " ", true);
+ ResetColor();
+ return;
+ }
+ raw_transcribe("common_dict.txt", "common_dict.json");
+ raw_transcribe("extended_dict.txt", "extended_dict.json");
+ uniquire();
+ }
+ static private void update() {
+ uniquire();
+ File.WriteAllText(path["extended"], JsonConvert.SerializeObject(extended_dict));
+ File.WriteAllText(path["common"], JsonConvert.SerializeObject(common_dict));
+ }
+ static private string raw_encode(string entry) {
+ var sentence = entry.ToLower();
+ char[] encoded = new char[entry.Length];
+ for (int i = 0; i < sentence.Length; i++) {
+ if (substitution.TryGetValue(sentence[i], out char substituted)) {
+ encoded[i] = Char.IsUpper(entry[i]) ? Char.ToUpper(substituted) : Char.ToLower(substituted);
+ } else {
+ encoded[i] = entry[i];
+ }
+ }
+ return String.Join("", encoded);
+ }
+ static private void init() {
+ if (common_dict != null && extended_dict != null) return;
+ WriteLine("[Loading Dictionary]");
+ if (File.Exists(path["extended"])) extended_dict = JsonConvert.DeserializeObject>(File.ReadAllText(path["extended"]));
+ else WriteLine("File missing");
+ if (File.Exists(path["common"])) common_dict = JsonConvert.DeserializeObject>(File.ReadAllText(path["common"]));
+ else WriteLine("File missing");
+ }
+ static private void uniquire() {
+ init();
+ foreach (var item in common_dict) {
+ if (extended_dict.ContainsKey(item.Key)) extended_dict.Remove(item.Key);
+ }
+ }
+ static private void raw_transcribe(string input, string output) {
+ var lines = File.ReadAllLines(input);
+ for (int i = 0; i < lines.Length; i++) {
+ lines[i] = lines[i].ToLower();
+ }
+ var English = new string[lines.Length];
+ lines.CopyTo(English, 0);
+ for (int i = 0; i < English.Length; i++) {
+ var word = new char[English[i].Length];
+ for (int j = 0; j < English[i].Length; j++) {
+ if (substitution.TryGetValue(English[i][j], out char substituted)) {
+ word[j] = substituted;
+ }
+ else {
+ word[j] = English[i][j];
+ }
+ }
+ lines[i] = String.Join("", word);
+ WriteLine($"{English[i]}:{lines[i]}");
+ }
+ Dictionary vals = new Dictionary();
+ for (int i = 0; i < English.Length; i++) {
+ if (vals.ContainsKey(English[i])) continue;
+ vals.Add(English[i], lines[i]);
+ }
+ File.WriteAllText(output, JsonConvert.SerializeObject(vals));
+ }
+ static private void wordwrite(Dictionary collection, string decode, string entry,int left, int i) {
+ foreach (var item in collection) {
+ if (item.Value == decode) {
+ CursorLeft = left;
+ //options.Add(item.Key);
+ for (int j = 0; j < item.Key.Length; j++) {
+ Write(Char.IsUpper(entry[CursorLeft]) ? Char.ToUpper(item.Key[j]) : Char.ToLower(item.Key[j]));
+ }
+ Utils.VarSleep(10, low: 20,high:100);
+ CursorTop++;
+ }
+ }
+ }
+ }
+}
diff --git a/cce/Utils.cs b/cce/Utils.cs
new file mode 100644
index 0000000..698fd15
--- /dev/null
+++ b/cce/Utils.cs
@@ -0,0 +1,58 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+using System.IO;
+using System.Windows.Forms;
+using static System.Console;
+using static System.Threading.Thread;
+
+namespace cce {
+ class Utils {
+ static private Random rng = new Random();
+ static internal void VarSleep(int adj, int low = 0, int high = 300, int step = 10,
+ decimal chance = 0.25m) {
+ var del = rng.Next(Math.Abs(adj));
+ if (del <= (int)(adj * chance)) del = low;
+ else if (del >= adj - (int)(adj * chance)) del = high;
+ else del = del * step;
+ Sleep(del);
+ }
+ static internal void Clip(string clip) {
+ WriteLine();
+ LagWrite("Do you want to copy the result to the Clipboard? [Y/n]: ");
+ var cki = ReadKey().KeyChar;
+ WriteLine();
+ if (Char.ToLower(cki) == 'y') { Clipboard.SetText(clip); WriteLine("Writing to Clipboard: Done!"); } else WriteLine("Writing to Clipboard: Canceled by User");
+ }
+ internal static void LagWrite(string input, bool newline = false) {
+ var phrases = new List>();
+ var lines = input.Split(new char[] { '\n' });
+ for (int i = 0; i < lines.Length; i++) {
+ var line = new List();
+ var split = lines[i].Split(' ');
+ int min = 4;
+ int selector = rng.Next(min, split.Length > min + 1 ? split.Length : min + 1);
+ var selected = new List();
+ for (int j = 0; j < split.Length; j++) {
+ selected.Add(split[j]);
+ if (j != 0 && j % selector == 0) {
+ line.Add(String.Join(" ", selected));
+ selected.Clear();
+ }
+ }
+ if (selected.Count > 0) line.Add(String.Join(" ", selected));
+ phrases.Add(line);
+ }
+ for (int i = 0; i < phrases.Count; i++) {
+ for (int j = 0; j < phrases[i].Count; j++) {
+ Write(j != phrases[i].Count - 1 ? phrases[i][j] + " " : phrases[i][j]);
+ VarSleep(22);
+ }
+ if (newline || i < phrases.Count - 1) WriteLine();
+ }
+ }
+ }
+}
diff --git a/cce/cce.csproj b/cce/cce.csproj
new file mode 100644
index 0000000..356b8a4
--- /dev/null
+++ b/cce/cce.csproj
@@ -0,0 +1,60 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {F8D0AB76-7AC7-4F50-8556-58A2C2255D40}
+ Exe
+ corpus_decoder
+ corpus decoder
+ v4.7.2
+ 512
+ true
+ true
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+ ..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/cce/packages.config b/cce/packages.config
new file mode 100644
index 0000000..5eaa239
--- /dev/null
+++ b/cce/packages.config
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file