Window | 項目 | フラグ | 説明 |
---|---|---|---|
Title.Text | 日付 | 0 | 作成日付 : 更新日付 |
TitleBar | ファイル名 | 0 | ファイル名を表示します(m_file) |
Node List | 1 | Top からの NodeList を表示します | |
ファイル名+Title | 2 | ファイル名+Title を表示します(m_sou) | |
TreeView | TopNode | m_Idx=0 | TopNode を開きます |
SelectedNode | m_Idx>0 | m_Idx の Node を開きます | |
ExpandAll | 4 | 全 Node を開きます | |
RichTextBox | TextBox | 0 | t_txt[m_Idx]; を表示します |
TextBox | * | 機密保護が設定されています | |
TextBox | PWORD | * & パスワードのとき解読して表示する |
// TitleBar, Title, TreeView, RichTextBox の描画 private void FormView(byte flag) { string str; Title.Text = (string)t_ttl[m_Idx] + "(" + (string)t_ymd[m_Idx] + ")"; // Title Bar switch(flag&3) { case 0: this.Text = m_file; break; case 1: TreeNode tNode = (TreeNode)t_node[m_Idx]; FormView(tNode); break; case 2: this.Text = m_sou; break; } // TreeView if ((flag&4)==4) treeView1.ExpandAll(); if (m_Idx==0) treeView1.TopNode.Expand(); else treeView1.SelectedNode = (TreeNode)t_node[m_Idx]; // RichTextBox str = (string)t_ymd[m_Idx]; if (str[str.Length-1]=='*') { if (m_pass!="Decode") { richTextBox1.Text = "☆機密保護が設定されています"; return; } str = (string)t_txt[m_Idx]; char[] msg = str.ToCharArray(); decode(msg); richTextBox1.Text = new string(msg); } else richTextBox1.Text = (string)t_txt[m_Idx]; richTextBox1.Modified = false; } |
private void FormView(TreeNode pnode) { TreeNode node; m_str = ""; int i; for (node = pnode; node != null; node = node.Parent) { for (i = 0; i < t_node.Count && (TreeNode)t_node[i] != node; i++) ; if (i >= t_node.Count) break; m_str = t_ttl[i] + "/" + m_str; } this.Text = m_str; treeView1.SelectedNode = pnode; treeView1.Select(); } |
private void FormView(string str, string key) { int pos; FormView((TreeNode)t_node[m_Idx]); this.Text = m_str; richTextBox1.Text = str; richTextBox1.Select(0, richTextBox1.Text.Length); richTextBox1.SelectionColor = Color.Black; Title.Text = (string)t_ttl[m_Idx] + "(" + (string)t_ymd[m_Idx] + ") " + m_Idx; for (pos = 0; ; ) { pos = richTextBox1.Find(key, pos, RichTextBoxFinds.None); if (pos < 0) break; richTextBox1.SelectionColor = Color.DarkMagenta; pos++; } richTextBox1.Modified = false; } |
private void ReTree_Node(int idx) { t_node.Clear(); treeView1.Nodes.Clear(); m_Idx = 0; Set_TVFunc(treeView1, 2); // TreeView を再登録 m_Idx = 0; if (idx < t_node.Count) m_Idx = idx; richTextBox1.Text = (string)t_txt[m_Idx]; TreeNode node = (TreeNode)t_node[m_Idx]; FormView(node); richTextBox1.Modified = false; m_UP = true; } |
// Tree View の選択が変更された時の処理 private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { CheckText(); for (m_Idx = 0; m_Idx < t_node.Count && (TreeNode)t_node[m_Idx] != e.Node; m_Idx++); if (m_Idx < t_node.Count) { FormView(0); } } |
// richTextBox1 を調べて ArrayList を更新 private void CheckText() { if (richTextBox1.Modified && (m_Idx<t_txt.Count)) { string str = (string)t_ymd[m_Idx]; if (str[str.Length-1]!='*') t_txt[m_Idx] = richTextBox1.Text; else { if (m_pass=="Decode") { // Encode して t_txt[m_Idx] に格納 char[] msg = richTextBox1.Text.ToCharArray(); encode(msg); t_txt[m_Idx] = new string(msg); } } SetDate(m_Idx); m_UP = true; richTextBox1.Modified = false; } } |
// 更新日付の設定 private void SetDate(int idx) { string ymd, str; str = DateTime.Now.ToString(); ymd = (string)t_ymd[idx]; if (ymd.Length < 20) // YYMMDD:YYMMDD { str = "20" + ymd.Substring(0, 2) + "/" + ymd.Substring(2, 2) + "/" + ymd.Substring(4, 2) + ":" + str.Substring(0, 10); } else // YYYY/MM/DD:YYYY/MM/DD { str = ymd.Substring(0, 11) + str.Substring(0, 10); } if (ymd[ymd.Length-1]=='*') str = str + "*"; t_ymd[idx] = str; } |
private void HelpAbout(object sender, EventArgs e) { MessageBox.Show("Memo2 Program β版"); FormView(0); } |
string m_pass = ""; // Pass Word // Pass Word の設定 private void PassWord(object sender, EventArgs e) { m_pass = "PASS"; richTextBox1.Hide(); button1.Show(); textBox1.Show(); } |
private void button_Click(object sender, EventArgs e) { m_sou = textBox1.Text; m_des = textBox2.Text; if (m_pass == "PASS") { uint wk = 0; for (int i = 0; i < m_sou.Length; i++) wk += m_sou[i]; shuffle(wk); for (int i = 0; i < 208; i++) m_dt[m_et[i] - 48] = (byte)(i + 48); m_pass = "Decode"; } button1.Hide(); textBox1.Hide(); textBox2.Hide(); richTextBox1.Show(); FormView(1); } |
private void SetPass(object sender, EventArgs e) { string str = (string)t_ymd[m_Idx]; if (str[str.Length - 1] == '*') { MessageBox.Show("機密保護は設定済みです"); return; } if (m_pass == "") { MessageBox.Show("PassWord を設定して下さい"); return; } str = str + "*"; //Console.WriteLine("yymmdd : " + str); t_ymd[m_Idx] = str; Title.Text = (string)t_ttl[m_Idx] + "(" + str + ")"; m_UP = true; char[] msg = richTextBox1.Text.ToCharArray(); encode(msg); t_txt[m_Idx] = new string(msg); richTextBox1.Text = "機密保護を設定しました"; } |
private void ResetPass(object sender, EventArgs e) { string str = (string)t_ymd[m_Idx]; if (str[str.Length - 1] != '*') { MessageBox.Show("機密保護は設定されていません"); return; } if (m_pass == "") { MessageBox.Show("PassWord を設定して下さい"); return; } str = str.Substring(0, str.Length - 1); t_ymd[m_Idx] = str; Title.Text = (string)t_ttl[m_Idx] + "(" + str + ")"; str = (string)t_txt[m_Idx]; char[] msg = str.ToCharArray(); decode(msg); richTextBox1.Text = new string(msg); t_txt[m_Idx] = richTextBox1.Text; m_UP = true; } |
private uint random(uint n) { return (n * 5041 + 13); } private void shuffle(uint val) { uint i, j; for (i = 0; i < 208; i++) m_et[i] = 0; for (i = 0, j = val; i < 208; i++) { for (j = random(j) % 208; m_et[j] != 0; j = (j + 1) % 208) ; m_et[j] = (byte)(i + 48); } for (i = 0; i < 208 && m_et[i] != 64; i++) ; m_et[i] = m_et[16]; m_et[16] = 64; } // Encode unsafe private void encode(char[] msg) { char chr; byte* byt; byt = (byte*)&chr; for (int i = 0; i < msg.GetLength(0); i++) { chr = msg[i]; e_cvt(byt); msg[i] = chr; } } // byte 変換 unsafe private void e_cvt(byte* pt) { for (int i = 0; i < sizeof(char); i++) { if (*(pt + i) >= 48) *(pt + i) = m_et[*(pt + i) - 48]; } } |
// Decode unsafe private void decode(char[] msg) { char chr; byte* byt; byt = (byte*)&chr; for (int i = 0; i < msg.GetLength(0); i++) { chr = msg[i]; d_cvt(byt); msg[i] = chr; } } // decode byte 変換 unsafe private void d_cvt(byte* pt) { for (int i = 0; i < sizeof(char); i++) { if (*(pt + i) >= 48) *(pt + i) = m_dt[*(pt + i) - 48]; } } |
//☆ 検索メニュー private void TSearch(object sender, EventArgs e) { CheckText(); ・・・ } private void Search(object sender, EventArgs e) { CheckText(); ・・・ } private void Replace(object sender, EventArgs e) { CheckText(); ・・・ } |
private void SearchNX(object sender, EventArgs e) { CheckText(); Next(m_sou); } |
[Previous Chapter ↑] Memo2 α版
※・