DCL on Windows のしくみ


Windows 上で動くプログラムには2種類のものがあります。 「Windows プログラム」「コンソールプログラム」です。「Windows プログラム」は Windows のすべての機能を使って、窓に絵を描いたりするプログラムです。これに対して、「コンソールプログラム」は、DOS窓の中でしか動きません。当然、「Windows プログラム」の方がいろいろなことができてよいのですが、これを書くのはかなり大変です。Windows では OS からアプリケーションに対して、いろいろな指示が雨アラレのように降ってきます。例えば、他のアプリケーションの窓に隠れていた部分が前に出てきたとき、窓の中で隠れて消えてしまった部分を書き直すように、そのアプリケーションに指示が出ます。このような指示に、ちゃんと答えないと、まっとうな Windows プログラムとして動作しません。しかも、この Windows からの指示を受け取るのはメインプログラムでなければなりません。Windows は「社長」としか話をしないのです。

一方、コンソールプログラムは「OS は下請業者」くらいにしか思ってませんから、「社長」自らOS と連絡を取り合うような構造にはなっていません。そして、Fortran で書くプログラムは、普通この「コンソールプログラム」です。Fortran で 「Windows プログラム」を書くことも不可能ではありませんが、はっきりいって、それは無謀です。これまで書いた Fortran プログラムを「Windows プログラム」に書き直すには、「社長」の首を付け替え (main から書き直し) なければなりませんし、Fortran には Windows プログラムを書くための道具があまり揃っていません。つまり、Fortran で Windows 上に直接図形を描くのは実質的に不可能だと思った方がよいでしょう。

しかし、電脳ライブラリでは、FORTRAN で図を描きたいのです。しかも、これまで UNIX 上などで書いたプログラムが、そのまま使える形で。そこで、DCL on Windows では、コンソールプログラムから、denwin.exe という子会社を作って、これを「Windows プログラム」として走らせます。コンソールプログラムは、描きたい図形のデータを「パイプ」という手段を使って、この子会社に伝えます。そして、この子会社が、うるさいOS の相手をしながら、実際に「窓」に図形を描くのです。こうすると、Windows も Fortran プログラムも両方が「自分が一番偉い」と思って (実は子会社が一番賢いんだけど) 仕事ができますから、世の中まるく収まるわけです。

これが、「コンソールプログラム」なのに、「窓」に図が描ける理由です。