ひまわりユーザー プログラム掲示板 バックアップ
注意
ひまわりのススメ  □ ひまわり本家Home  □ 新着記事  □ 新規投稿  □ SEARCH  □ 参考プログラム集
ツリー表示

MESSAGE ポケットモンバータ(テキスト暗号化) /kobachi (02/07/24(Wed) 00:57) [1106]
......MESSAGE 最高っす /北神 陽太 (02/07/24(Wed) 09:39) [1107]
............MESSAGE Re[2]: たまにおふざけプログラム /kobachi (02/07/26(Fri) 01:56) [1113]


親記事 / ▼[ 1107 ]
NO.1106  ポケットモンバータ(テキスト暗号化)
□投稿者/ kobachi -(2002/07/24(Wed) 00:57:00)
□U R L/ http://plaza.across.or.jp/~kobachi/
{---プログラム掲示板投稿フォーム---
【ソフト名】ポケットモンバータ (バージョン 1.00)
【作 成 者】kobachi (連絡先:kobachi@po4.across.or.jp)
【種  別】フリーソフトウェア
【ひまわりのバージョン】ver.1.55a
【転  載】可(転載条件:作者にメールで連絡すること)
【改変運用】可(暗号辞書を書き換えてご自由にご利用ください)
【ひまわり本体への梱包】可
【実行時に利用作成するファイル】有(pkmnvert.ini)
【コメント】

 プレーンテキストを、いわゆるピカチュウ語に変換します。

 暗号ルーチンと暗号化辞書が単純なので、処理速度が遅い、ファイルサイズが48倍(最大で96倍)に膨らむ等、非常に多くの問題を含んでいますが、ピカチュウ語への変換とピカチュウ語から通常の文章への復号化、そして、パスワードで保護することも出来ます。

 もっと高度な暗号ルーチンを制作した方は、ぜひ掲示板で公開してください。私は、ためらわずそちらを利用します。尚、ピカチュウ語は「物」ではなく、また固定した作品でもないので、著作権には一切抵触しません。安心してご利用ください。


追伸:夏休みの季節になって、これから投稿が増えるとなると非常に楽しみですが、近い将来、「夏休みの自由研究は、コンピュータの処理速度の研究」とか、「夏休みの自由工作はシューティングゲーム」といったことになるのでしょうか?そう考えると、末恐ろしい気もします。

---投稿フォームここまで---}



*諸変数の定義
暗号辞書は、「」&
「ピッカピカチュー\nピッカピーカチュ\nピーカピカチュー\nピーカピーカチュ\n」&
「ピカッピカチュー\nピカッピーカチュ\nピカーピカチュー\nピカーピーカチュ\n」&
「ピカピピカチュー\nピカピピーカチュ」。
処理ファイルは、「無題」。
処理ファイル名は、「無題」。
文字書体は、「MS UI Gothic」。
文字サイズは、9。


*母艦の設定
母艦の、タイトルは、「ポケットモンバータ - {処理ファイル名}」。
ファイルポケットモンバータの終了に、終了処理設定。


*メニューの生成
ファイルメニューを、メニュー作成。
その、テキストは、「ファイル(&F)」。
ファイルメニューに、新規メニューを、メニュー追加。
その、テキストは、「新規(&N)」。
その、ショートカットキーは、「Ctrl+N」。
その、イベントは、ファイル新規。
ファイルメニューに、開くメニューを、メニュー追加。
その、テキストは、「開く(&O)」。
その、ショートカットキーは、「Ctrl+O」。
その、イベントは、ファイル開く。
ファイルメニューに、上書き保存メニューを、メニュー追加。
その、テキストは、「上書き保存(&S)」。
その、ショートカットキーは、「Ctrl+S」。
その、イベントは、ファイル上書き保存。
ファイルメニューに、名前をつけて保存メニューを、メニュー追加。
その、テキストは、「名前をつけて保存(&A)...」。
その、イベントは、ファイル名前をつけて保存。
ファイルメニューに、区切り線1を、メニュー追加。
その、テキストは、「-」。
ファイルメニューに、クリップボードから開くメニューを、メニュー追加。
その、テキストは、「クリップボードから開く(&V)」。
その、ショートカットキーは、「Ctrl+V」。
その、イベントは、ファイルクリップボードから開く。
ファイルメニューに、クリップボードに保存メニューを、メニュー追加。
その、テキストは、「クリップボードに保存(&C)」。
その、ショートカットキーは、「Ctrl+C」。
その、イベントは、ファイルクリップボードに保存。
ファイルメニューに、区切り線2を、メニュー追加。
その、テキストは、「-」。
ファイルメニューに、ポケットモンバータの終了メニューを、メニュー追加。
その、テキストは、「ポケットモンバータの終了(&X)」。
その、イベントは、ファイルポケットモンバータの終了。
コンバートメニューを、メニュー作成。
その、テキストは、「コンバート(&C)」。
コンバートメニューに、変換開始メニューを、メニュー追加。
その、テキストは、「変換開始(&P)」。
その、ショートカットキーは、「Ctrl+P」。
その、イベントは、コンバート変換開始。
コンバートメニューに、復元開始メニューを、メニュー追加。
その、テキストは、「復元開始(&U)」。
その、ショートカットキーは、「Ctrl+U」。
その、イベントは、コンバート復元開始。
コンバートメニューに、区切り線3を、メニュー追加。
その、テキストは、「-」。
コンバートメニューに、パスワード使用メニューを、メニュー追加。
その、テキストは、「パスワード使用(&E)」。
その、イベントは、コンバートパスワード使用。
書式メニューを、メニュー作成。
その、テキストは、「書式(&O)」。
書式メニューに、右端で折り返すメニューを、メニュー追加。
その、テキストは、「右端で折り返す(&W)」。
その、イベントは、書式右端で折り返す。
書式メニューに、フォントメニューを、メニュー追加。
その、テキストは、「フォント(&F)...」。
その、イベントは、書式フォント。
ヘルプメニューを、メニュー作成。
その、テキストは、「ヘルプ(&H)」。
ヘルプメニューに、バージョン情報メニューを、メニュー追加。
その、テキストは、「バージョン情報(&A)」。
その、イベントは、ヘルプバージョン情報。


*オブジェクトの生成
エディタを、メモとして、作成。


*設定の読み込み
「{母艦のパス}pkmnvert.ini」が、存在するか。
もし、それが、はいなら、(
   バッファに、「{母艦のパス}pkmnvert.ini」を、読む。
   6回、(
      「{バッファ#回数}」の、「=」を、「\n」に、置換。
      回数で、条件分岐。
         1の時、母艦の、Xは、それ#1。
         2の時、母艦の、Yは、それ#1。
         3の時、母艦の、幅は、それ#1。
         4の時、母艦の、高さは、それ#1。
         5の時、(
            もし、それ#1が、1なら、(
               エディタの、スクロールバーは、縦。
               右端で折り返すメニューの、値は、オン。
            )
         )
         6の時、エディタの、フォント書体は、それ#1。
   )
)


*ソフトの初期化
母艦の、変更した時は、オブジェクトのリサイズ。
母艦浮上して、待機。


*ファイル新規
//各種データの初期化
エディタの、テキストは、「」。
処理ファイルは、「無題」。
処理ファイル名は、「無題」。
母艦の、タイトルは、「ポケットモンバータ - {処理ファイル名}」。
戻る。


*ファイル開く
「テキスト文書(*.txt)|*.txt|非バイナリファイル(*.*)|*.*」の、読み込みファイル選択。
もし、それが、「」でなければ、(
   処理ファイルは、それ。
   バッファに、処理ファイルを、読む。
   エディタの、テキストは、バッファ。
   //表示用にファイル名を切り出す
   処理ファイルから、ファイル名を切り出す。
   処理ファイル名は、それ。
   母艦の、タイトルは、「ポケットモンバータ - {処理ファイル名}」。
)
戻る。


*ファイル上書き保存
もし、処理ファイルが、「無題」なら、ファイル名前を付けて保存に、飛ぶ。
でなければ、(
   エディタの、テキストを、バッファに、得る。
   バッファを、処理ファイルへ、保存。
)
戻る。


*ファイル名前をつけて保存
「テキスト文書(*.txt)|*.txt|全てのファイル(*.*)|*.*」の、書き込みファイル選択。
もし、それが、「」でなければ、(
   処理ファイルは、それ。
   エディタの、テキストを、バッファに、得る。
   バッファを、処理ファイルへ、保存。
   //表示用にファイル名を切り出す
   処理ファイルから、ファイル名を切り出す。
   処理ファイル名は、それ。
   母艦の、タイトルは、「ポケットモンバータ - {処理ファイル名}」。
)
戻る。


*ファイルクリップボードから開く
バッファに、クリップボードを、読む。
エディタの、テキストは、バッファ。
戻る。


*ファイルクリップボードに保存
エディタの、テキストを、バッファに、得る。
バッファを、クリップボードへ、保存。
戻る。


*ファイルポケットモンバータの終了
//設定ファイルの更新
「[ポケットモンバータ]
WinPosX={(母艦の、X)}
WinPosY={(母艦の、Y)}
WinWidth={(母艦の、幅)}
WinHeight={(母艦の、高さ)}
VScroll={(右端で折り返すメニューの、値)}
ViewFont={エディタの、フォント書体}」を、「{母艦のパス}pkmnvert.ini」に、保存。
終わり。


*コンバート変換開始
//変換対象文字列の取得
エディタの、テキストを、バッファに、得る。
暗号バッファは、「」。
スライド量は、0。
//パスワードが必要かどうかを判定
パスワード使用メニューの、値を、それに、得る。
もし、それが、オンなら、(
   「4桁の数字でパスワードを、入力してください。」と、尋ねる。
   もし、それが、「」なら、スライド量は、0。
   でなければ、(
      スライド量は、それ。
      スライド量が、数列か。
      もし、それが、はいなら、(
         //スライド量が数値だった場合
         スライド量は、INT(スライド量)。
         //スライド量が4桁以上の場合
         もし、スライド量が、10000以上なら、スライド量は、9999。
      )
      でなければ、(
         //スライド量が数値ではなかった場合
         スライド量は、9999。
      )
   )
   //パスワードヘッダを設定
   暗号バッファは、「ピカピーカピカピ」。
)
//処理回数の取得
バッファの、文字数。
バッファ長は、それ。
バッファ長回、(
   母艦の、タイトルは、「変換中({INT(回数/バッファ長*100)}% 完了)...」。
   もし、バッファが、「」でなければ、(
      バッファから、1文字、左端を切り取る。
      それの、キーコード。
      それで、条件分岐。
         10の時、(
            //なにもしない
         )
         13の時、(
            //改行
            暗号バッファは、暗号バッファ&「\n」。
         )
         その他の時、(
            //暗号化処理
            一次バッファ=それ+スライド量。
            //ピカチュウ語に置換
            一次バッファを、6桁の、ゼロで埋める。
            暗号バッファは、暗号バッファ&それ。
         )
   )
)
//文字コードの羅列を別の文字列に置換
母艦の、タイトルは、「変換終了中...」。
それは、暗号バッファ。
10回、「{回数-1}」を、「{暗号辞書#(回数-1)}」に、置換。
暗号バッファは、それ。
//表示の更新
エディタの、テキストは、暗号バッファ。
母艦の、タイトルは、「ポケットモンバータ - {処理ファイル名}」。
戻る。


*コンバート復元開始
//復元対象文字列の取得
エディタの、テキストを、バッファに、得る。
復号バッファは、「」。
スライド量は、0。
//パスワードが必要かどうかを判定
もし、LEFT(バッファ,8)が、「ピカピーカピカピ」なら、(
   //パスワードヘッダを削除
   バッファから、8文字、左端を切り取る。
   「4桁の数字でパスワードを、入力してください。」と、尋ねる。
   もし、それが、「」なら、スライド量は、0。
   でなければ、(
      もし、それが、はいなら、(
         //スライド量が数値だった場合
         スライド量は、INT(スライド量)。
         //スライド量が4桁以上の場合
         もし、スライド量が、10000以上なら、スライド量は、0。
      )
      でなければ、(
         //スライド量が数値ではなかった場合
         スライド量は、0。
      )
   )
)
//文字列を数値に置換
母艦の、タイトルは、「復号化準備中...」。
それは、バッファ。
10回、「{暗号辞書#(回数-1)}」を、「{回数-1}」に、置換。
バッファは、それ。
//処理回数の取得
バッファの、「\n」を、「」に、置換。それの、文字数。
バッファ長=それ/6。
バッファの、要素数。
バッファ長は、INT(バッファ長+それ)。
バッファ長回、(
   //復元処理
   母艦の、タイトルは、「復号中({INT(回数/バッファ長*100)}% 完了)...」。
   もし、バッファが、「」でなければ、(
      「{LEFT(バッファ,1)}」の、キーコード。
      それで、条件分岐。
         10の時、(
            //なにもしない
         )
         13の時、(
            //改行
            バッファの、0行目を、行削除して、バッファに、入れる。
            復号バッファは、復号バッファ&「\n」。
         )
         その他の時、(
            バッファから、6文字、左端を切り取る。
            一次バッファは、それ。
            //正常に変換されたデータかチェック
            一次バッファが、数列か。
            もし、それが、いいえなら、復元エラーへ、飛ぶ。
            //暗号解除処理
            一次バッファ=一次バッファ-スライド量。
            //ピカチュウ語から復元
            復号バッファは、復号バッファ&CHR(一次バッファ)。
         )
   )
)
//表示の更新
エディタの、テキストは、復号バッファ。
母艦の、タイトルは、「ポケットモンバータ - {処理ファイル名}」。
戻る。


*復元エラー
「この文書は復元できません。」と、言う。
母艦の、タイトルは、「ポケットモンバータ - {処理ファイル名}」。
待機。


*コンバートパスワード使用
パスワード使用メニューの、値を、それに、得る。
//メニューチェックのオンオフを入れ替え
もし、それが、オンなら、パスワード使用メニューの、値は、オフ。
でなければ、パスワード使用メニューの、値は、オン。
戻る。


*書式右端で折り返す
右端で折り返すメニューの、値を、それに、得る。
//メニューチェックのオンオフを入れ替え
もし、それが、オンなら、(
   右端で折り返すメニューの、値は、オフ。
   エディタの、スクロールバーは、両方。
)
でなければ、(
   右端で折り返すメニューの、値は、オン。
   エディタの、スクロールバーは、縦。
)
戻る。


*書式フォント
フォント選択。
もし、それが、「」でなければ、エディタの、フォント書体は、それ。
戻る。


*ヘルプバージョン情報
「ポケットモンバータ Version 1.0\n\n」&
「Copyright(C) by open.doc/kobachi」と、言う。
戻る。


*オブジェクトのリサイズ
エディタの、サイズは、(0,0,(母艦の、幅),(母艦の、高さ))。
戻る。



▲[ 1106 ] / ▼[ 1113 ]
NO.1107  最高っす
□投稿者/ 北神 陽太 -(2002/07/24(Wed) 09:39:18)
□U R L/ http://homepage1.nifty.com/kitagami/index.htm
 面白いアイデアというか、kobachiさんのイメージが・・・。
 これ、暗号辞書を小さくすれば、サイズも小さくなりますよね。(ア〜コとか)遅いのは文字コードの切り出しですよね。う〜ん・・・、直接バイナリで開いて変換部分をなくすとか・・・。



▲[ 1107 ] / 返信無し
NO.1113  Re[2]: たまにおふざけプログラム
□投稿者/ kobachi -(2002/07/26(Fri) 01:56:10)
□U R L/ http://plaza.across.or.jp/~kobachi/
 たまにおふざけプログラムを組んでみるというのも、息抜きになって楽しいです。ひまわりは、息抜き並の労力でもプログラムが組めてしまうので、重宝しています。今回「ポケットモンバータ」を作ってみて、伸張辞書のデータの設計の難しさが良くわかりました。例えば、辞書として、

   ・ピカ
   ・チュー
   ・ピカチュー

 という3つを選ぶと、ルーチンの関係上、

   ピカチューピカピカチュー

 といった圧縮後のデータの区切りの解釈が複数存在するため、正常に復元できなくなってしまいました。お遊びプログラムでも、未知の分野にチャレンジすると、学ぶことも非常に多いです。



- Child Tree -