プリント基板設計・シミュレーション

TOP > アポロレポート > コラム > 第21回 プログラミングについて 『はまってしまった!』
コラム
2022/11/29

第21回 プログラミングについて 『はまってしまった!』

アポロレポート

『はまってしまった!』

 

  やったー! 新しいパソコンを買ってもらったぞ! スペースバーの長いPC98、166MHzのPentiumの乗っかっているんだ。それにWindows95でコンパイラがVisualC++だ! まいったか!

 と喜んでいたのは昨年の9月頃。それまではPC98の初代のMateで処理スピードの遅さに苛立ちながらも、のんびりとアプリケーションプログラムの開発を行っていたのです。Quick Viewのリンクには数分の時間がかかっていたので、1日の半分はビルドが終わるのを待っていたかも知れません。そんな状態でしたので、会社に無理をお願いして新しいパソコンを買ってもらったのです。Windows95の操作に度惑いつつも必要なソフトのインストールを済ませた後。それまでのパソコンで作ったプログラムの移植を開始しました。コンパイラが変わり、クラスライブラリのバージョンが変わったせいで、若干の手直しが必要でしたが、なんとか移植には1週間程度で終了し、それまでのパソコンを他の目的に使用するので明け渡しをしました。

 これでこれからは、ご機嫌な環境で開発ができると喜んでいたのはほんのわずかな間でした。DOS画面でテキストエディタで日本語を入力していると「あれっ?動かない」。OSがハングしたのです。最初は「まあ偶然のことだろう」とリブートし、再び同じことをやっていると、またもやハングしてしまうのです。いろいろとためしてみて、多分テキストエディタが問題かも知れないと、その他のエディタで試してみても結果は同じで突然ハングしてしまうのです。どうも原因はDOS画面でテキストエディタを使って日本語を入力していると発生する現象みたいなのです。ワードパッドではまったく発生しないのです。

 はまってしまったのはこのときからなのです。ワードパッドやワードはやけに重たくて遅いし新しくテキストエディタを購入するにしても、もしそのエディタが気に入らなければ他のものを探さなければなりません。それではフリーウェアでいいものがないかと少しは探したのですが、VAX/VMSの標準テキストエディタであるEDTから始まって、DOSで人気のVZ、そして現在はUNIXのviに毒されてしまっている私には気にいるものがなかったのです。そして最後の選択、「仕方がないから自分でつくるか...」になってしまったのです。

 という訳で目下テキストエディタを作成中です。かれこれ開発を開始してから3ヶ月にもなるのですが、この3ヶ月間には紆余曲折が数多くありました。

 最初の版(最低の編集機能しか持っていないもの)ができたのは開発を開始してから2週間程度だったのですが、これは Visual C++のクラスライブラリの中のCEdit(簡単な編集機能を提供しているクラス)を使っていたので扱えるデータの最大値が64kバイトに制限されていて、その上16ビット版として作っていたので、64kバイトのローカルヒープが他のデータの記憶領域としても使われるため、プログラムが大きくなればなる程テキストの編集に使える領域が小さくなってしまうのです。ついには10kバイトのテキストしか扱えなくなってしまいました。
 そこで16ビット版を諦め32ビット版に移植することになりました。32ビット版では64kバイトの制限はあったのですが純粋にその領域をテキストの編集に使えたのです。移植は無事に完了し編集できるテキストのサイズは64kバイトになりました(このときには不満はありましたが日本語の文章を編集するのだったら64kバイト程度のファイルが扱えればいいだろうと安易に考えていました。1行の平均が40バイトだったとすると1500行のテキストが扱えるという計算だったのです。) 編集できるテキストのサイズの問題がとりあえず解消されたので、機嫌を取り直した私は様々な機能を追加していきました。だんだんとテキストエディタとしての機能を備え実際に使用可能となった頃ノートパソコンで動作を確認したところ、これが実用にならない程遅かったのです。このノートパソコンは決して遅いものではなかったのですが開発をしているパソコンが速すぎたのと、モニターが液晶だったせいで画面のちらつきが大きすぎたのでした。
 このまま開発を進めても使い物になるものは出来ないと分かったときには、開発を開始してからすでに1ヶ月半以上も過ぎていました。しかし乗りかかった船です。降りる訳にはいきません。腰をすえて最初から作り直すことにしました。今度は CEditなどというものは使わず表示も編集も自分で作ることにしました。こうすることでそれまでのCEditを使ったことに起因する病巣がなくなるのです。

 といった経緯を辿って現在に至っています。最初からの書き直しをはじめてからすでに1ヶ月半程度経過していますが、現時点でも十分に実用になっており実際にこの原稿もこのテキストエディタを使って書いています。またこのエディタの開発にもこのエディタを使って開発を行っているのです(動作の確認や、バグの発見には使うことが一番いい)。

 まだまだリリースするところまでにはなっていませんが、いつかはこのコーナーを可愛がって下さっている皆様にも使用していただけると思います。

 ちなみに、おおよその内容は次のようになって(する予定)います。

 *見た目

  テキストの編集画面は1つのみのシンプルなスタイル。ただし複数ファイルの編集を行える様に複数の編集バッファ(任意に作成)を持っており、バッファ間での編集が行えるようになっています(VAX/VMSのEDTと同様な使用方法)。
  背景色や文字の色、カーソルの形状、フォントは任意に設定できます。


 *制限

  1行の最大長は512バイト。その他のテキストの制限はありません。サブ編集バッファの数にも制限はありません。


 *モード

  コマンドモード、挿入モード、上書きモード等のモードを持っています。


 *カスタマイズ

  細分化された複数の内部コマンドを1ストローク以上のキーに定義することで、機能の定義を行います。この手法によってVAX/VMSのEDT、UNIXのvi、DOSのVZなどのエミュレーションをすることが可能です。ちなみに私はviにほぼ近いカスタマイズを行っています。リリース時にはEDTとVZをエミュレーションする初期化ファイルも提供する予定です。


 *ファイルの選択

  ファイルを選択するダイアログボックスにはマウス操作によるものと、キー操作によるものとの2種類が用意されています。任意に選択することができます。


 *単語の認識

  文字セットを定義することで任意の認識を行うことが出来ます。


 *一時バッファ

  削除またはヤンクされたテキストを保持するバッファは任意に10種類を使用することができ、それぞれのバッファには文字属性、ワード属性、行属性、等の各属性で最大10個の履歴を持ちます。


 *検索

  通常検索、ワイルドカード検索、正規表現検索の3つの方法を任意に使用できます。


 *繰り返し実行

  編集を行ったキーは自動的に繰り返し実行の対象になります。


 *キーマクロ


 今回は私の近況となってしまいました。現在私の頭の中はこのテキストエディタの開発のことで一杯になっていますので、次回からしばらくの間はテキストエディタの開発を通して気付いたことからお話をする予定です。


そのお悩み、
アポロ技研に話してみませんか?

アポロ技研でワンランク上の物創りへ!
そのお悩み、アポロ技研に話してみませんか?