第01回 ソースコードを眺めてみる
対象となるソースコードのアーカイブには、4個のディレクトリと236個のファイルが含まれています。まずは最初は、含まれるファイルの一覧から分かる範囲で切り分けてみることにします。
とにかく展開してみる
とにもかくにも、アーカイブを展開してみないことには話が始まりません。
アーカイブの中には、4つのフォルダとreadme.txtが入っています。当然ながら、まずはreadme.txtを熟読しましょう。今回は、最新版である7.1を対象としますので、71フォルダの下を見ることになります。この下にある76個のファイルをリストアップしてみます。
ファイル名 | サイズ |
---|---|
ABOUTUNIT.dfm | 15949 |
AboutUnit.cpp | 823 |
AboutUnit.h | 1310 |
AutoDownUnit.cpp | 6608 |
AutoDownUnit.dfm | 7492 |
AutoDownUnit.h | 2993 |
BBSMAKEUNIT.dfm | 2319 |
BBSWRITEUNIT.dfm | 3920 |
BbsMakeUnit.cpp | 3701 |
BbsMakeUnit.h | 1570 |
BbsWriteUnit.cpp | 3690 |
BbsWriteUnit.h | 2590 |
CAutoDownList.cpp | 1221 |
CAutoDownList.h | 3838 |
CBbsFile.cpp | 6039 |
CBbsFile.h | 949 |
CFolder.cpp | 813 |
CFolder.h | 3776 |
CHost.cpp | 16177 |
CHost.h | 12194 |
CKey.cpp | 32664 |
CKey.h | 12634 |
CKeyBlock.cpp | 340 |
CKeyBlock.h | 951 |
CLongInt.cpp | 20058 |
CLongInt.h | 1927 |
CMainControl.cpp | 391248 |
CMainControl.h | 23052 |
CQuery.cpp | 15573 |
CQuery.h | 2496 |
CRC4.cpp | 1560 |
CRC4.h | 732 |
CWork.cpp | 8309 |
CWork.h | 11896 |
ControlUnit.cpp | 6362 |
ControlUnit.dfm | 8646 |
ControlUnit.h | 6588 |
DOWNPARAMUNIT.dfm | 5504 |
DownParamUnit.cpp | 2244 |
DownParamUnit.h | 2779 |
FolderAddUnit.cpp | 2907 |
FolderAddUnit.dfm | 3788 |
FolderAddUnit.h | 2282 |
IpConvUnit.cpp | 1381 |
IpConvUnit.dfm | 2368 |
IpConvUnit.h | 1632 |
MainUnit.cpp | 191854 |
MainUnit.dfm | 109940 |
MainUnit.h | 33526 |
NodeAddUnit.cpp | 1103 |
NodeAddUnit.dfm | 2090 |
NodeAddUnit.h | 1494 |
OptionUnit.cpp | 30420 |
OptionUnit.dfm | 38671 |
OptionUnit.h | 9713 |
RSA.cpp | 4852 |
RSA.h | 774 |
RichTextView.hpp | 11782 |
VIEWUNIT.dfm | 2344 |
ViewUnit.cpp | 4026 |
ViewUnit.h | 1719 |
Winny.bpr | 11603 |
Winny.cpp | 2505 |
Winny.ico | 3262 |
Winny.mak | 5829 |
Winny.res | 4032 |
def.h | 1534 |
def0.h | 245 |
def2.h | 123 |
globals.h | 4896 |
hdrs.h | 2022 |
md5.cpp | 11188 |
md5.h | 1350 |
miscclass.h | 4842 |
util.cpp | 14048 |
util.h | 1035 |
ずいぶんと数は減りましたが、まだ多いですね。
そこで、すぐに分かる範囲で切り分けてみます。
- ファイル名
- ファイルサイズ
- 拡張子
ファイル名に特徴のあるもの
まず、ファイル名にも注目してみると、こんな推測ができます。
ファイル名 | 内容の推測 |
---|---|
CAutoDownList.cpp | 自動ダウン |
CBbsFile.cpp | BBSファイル |
CHost.cpp | ホストキャッシュ |
CKey.cpp | キー情報 |
CQuery.cpp | 検索クエリ |
CRC4.cpp | RC4暗号化 |
md5.cpp | MD5ハッシュ |
RSA.cpp | RSA暗号化 |
Winny.cpp | Winny.exeそのもの |
util.cpp | 雑多な処理 |
miscclass.h | 雑多なクラス |
RichTextView.hpp | テキストボックス |
CLongInt.cpp | 大きな数字の計算 |
ファイルサイズの大きなもの
次に、ファイルサイズを見てみます。
最もサイズの大きいファイルが CMainControl.cpp ですね。MainUnit.cpp、MainUnit.dfm あたりまでは100KBを超えています。ただし、.dfm のファイルは UI 関係ですので見なかったことにしましょう。というわけで次は MainUnit.h、CKey.cppと続きます。
今回一番注目するのは、Winny2 のロジック部分ですが、なんとなく、このあたりに隠れていそうな気がします。
拡張子
最後に、拡張子から分かることを探してみます。
まず、C++言語と縁がない人のために解説すると、「.cpp」という拡張子を持つファイルが実際の動作内容が書かれたプログラム本体で、同じ左側(ベースファイル名)で拡張子が「.h」のものは、そのプログラムの「お品書き」のようなものになっています。つまり、この二つはセットで一つと言うことになります。
次に、「.bpr」「.mak」ですが、これらは複数のファイルから構成されるWinnyを、実際にWinny.exeという一つの実行ファイルにまとめる時に使う手順書のようなものです。
「.ico」はプログラミングに縁がない方も知っているかもしれません、Windows標準のアイコンファイルです。下半分に「WINNY」と書かれたあのアイコンですね。
「.hpp」という見慣れない拡張子を持つRichTextView.hppというファイルがあります。これはちゃんとreadme.txtを読んだ方には分かりますね。
最後に注目したいのが拡張子「.dfm」です。
フォームを持つもの
この「.dfm」という拡張子を持つファイルには、Winny内の各ウインドウにボタンやテキストボックス、メニューバーなどをどのように置けばよいのかが書かれています。
また、このファイルは同じベースファイル名を持つファイルと関連づけられています。つまり、対応する拡張子「.cpp」のファイルには、それぞれのウィンドウでの処理内容が書かれていそうです。
それぞれのウィンドウに対応する、というヒントをふまえて内容を推測してみましょう。
ベースファイル名 | 内容の推測 |
---|---|
AboutUnit.cpp | About |
AutoDownUnit.cpp | 自動ダウンロード |
BbsMakeUnit.cpp | BBSの新規スレッド作成 |
BbsWriteUnit.cpp | BBSのスレッドへの書き込み |
ControlUnit.cpp | |
DownParamUnit.cpp | ダウンロード指定 |
FolderAddUnit.cpp | フォルダ追加 |
IpConvUnit.cpp | 自アドレスの暗号化 |
MainUnit.cpp | メインと言うくらいでウィンドウ全体? |
NodeAddUnit.cpp | ノード追加 |
OptionUnit.cpp | オプション |
ViewUnit.cpp |
ControlUnit.cpp など、名前だけだとよく分からないものもありますが、とりあえず今回は中身を見ずに分かる範囲と言うことで放置しておきます。
最初はここまで
まずは、おおざっぱにファイル群を仕分けしてみました。
今後も、こんな感じののんびりペースでやっていきますので、期待せずにお待ちください。