Telnetサーバから永遠に文字が送られてきても表示し続けるプログラム。ポイントは、 1.Telnetサーバから送られ続けられる文字を、限られたメモリ範囲内にいかに新しいデータを保持するか。 2.新しく取り込んだ文字を、いかにスムーズにスクロール表示しするか。 だ。 1.について 確保したメモリをロール状にすることをイメージして、確保した容量を越えたら先頭から上書きしていく。 単純だが、これでメモリを複雑に操作することなく無限にデータが取り込める。 イメージは下記図だ。
改行毎に先頭文字のアドレスを保持する変数を用意し、配列のサイズを越えたら先頭から上書きしていく。 概要は下記図だ。
画面の表示サイズは、80カラムx24行で、20ページ分を用意する場合、 80 × 24 × 20 = 38400byteとなるので、これ+αのメモリを確保しておけば良いし、先頭アドレスのテーブル数も、 24 × 20 = 480行となるので、480以上用意すれば良いだろう。 |
|||||
この考え(簡単に書いたが実際の処理は複雑だ)でプログラムにすると、こんな感じiTermMain.cppになる。 また、telnetアクセスするのがiTermProc.cppとiTermWinSock.cppとiTermNegotiation.cppで、 これはそのヘッダiTerm.hと、リソースはこれiTerm.rcだ。 ※ 但し、ネゴシエーションの処理は簡易な実装なので、Telnetサーバに合わせた変更が必要だ。
|