Updated:2004.12.19
Mind Version 7.5 for Windows
- Mind Version 7
-
- Mind Version 7は、古くはコードネーム「R4」(DOS)、さらには「S6」(UNIX)を継承しつつ、CGIライブラリ、TCP/IPソケットなど、インターネット向けの機能を充実し、まずはUNIX版として1997年に開発されました。この時期需要の多くなったCGIの開発に大変便利に使えるようになりました。
- 今回のWindows版は、UNIX版のVersion 7 の良いところをなるべく引き継ぎ、コンパイラ/ランタイムともに多くのコードを共用しています。春に公開した試用版ではコンソールアプリケーションのみでしたが、今回の正式版ではGUIアプリケーションも開発できるようにしました。遅ればせながら、ようやくMindでもWindowsアプリケーションを組めるようになりました。
- コンパイラ
-
- Version7 からMindは32ビット対応となり、「64KBの壁」は取り払われました。これからはデータ領域やコードサイズの制限に悩まされず大きな領域を使うことができます。極端には、長さが1MBある文字列実体変数や構造体などを定義できます。
- 処理単語の中に処理単語を定義する「局所処理単語」の導入により、親の処理単語が抱えている局所変数を共用しつつ、外部から隠蔽された下位の単語を作ることができます。従来以上にモジュール化を高めることができます。
- 旧版では文字列実体変数や構造体などは局所変数として定義できませんでしたが、Version 7 ではほとんどの変数や定数宣言を局所変数域に定義できるようになりました。これにより、従来以上に構造化され、可搬性の高いコードを書くことができます。
- 「型紙」という概念を導入しました。C言語が言っている構造体に相当します。すなわち、型紙宣言では文字通り「型」だけを宣言しておき、「○○は 構造体 △△型」にて初めて実体が割り当てられるという方式です。これにより、同じ型を持つ複数の構造体を作ることができます。(もちろん、従来通りの構造体宣言も可能です)。
- 上記した型紙のアクセスを可能にするため、「<親構造体名>の <子メンバー>を・・」という新しい表現方法が導入されました。
- 「・・をつかい ○○する」という新しい表現が導入されました。たとえば、「一行読み出し」や「文字列変換」など、新しい文字列がランタイム内部に生成されるような処理単語を使う場合、その生成場所(文字列実体変数や構造体)を利用者が指定できます。これにより、たとえば数十キロバイト長の長い行を利用者指定変数に「一行読み出し」したり、「文字列変換」の連続呼出しによって知らないうちに文字列実体がオーバーライトされてしまう危険を避けることができるようになります。
- コンパイラ自体はコンソール版のMindアプリケーションとして提供されます。GUIを持った簡単な開発ツール"Mind Work bench"からコンパイラを起動し、そのコンパイラ途中経過をウィンドゥ内に確認することができますが、コンパイラの実体そのものは従来型のコンソールアプリケーションです。
- ランタイム(コンソール版)
-
- 文字列操作やファイルアクセスをおこなう単語のバリエーションが大幅に増えました。コンパイラの機能とも関係しますが、「<文字列実体変数>をつかい <論理ファイル>を 一行読み出し」といった、新しい能力が提供されます。
- ロングファイル名をサポートします。
- WindowsAPIあるいは外部の任意のDLLを呼出すことができます。
- ランタイム(GUI版)
-
- Tcl/Tkとのコンビネーションで走行します。Tcl/Tkが提供する多くのGUI機能を利用可能です。
- ネイティブなTcl/Tkだけでなく、利用頻度の高い機能はMind単語として定義されています。「ウィンドゥを開く」「ダイヤログを開く」「アイコン化」といった多くの単語があります。
- Mindに以前からある「○○は 仮定義/本定義」の機構にWindows特有のイベントドリブンなコーディング形式を組込んであり、簡単にイベント処理を記述できます。
- Tcl/Tkって何? → UNIXがルーツのインタプリタ言語です。言語基本部が「Tcl」と呼ばれるもので、この上に「Tk」というGUIを作るためのライブラリを乗せて使うため、合わせて「Tcl/Tk」と呼ばれています。
提供される機能がHTMLのように抽象的であるため習得も比較的容易で、APIを叩くのに比べたらかなり簡単にGUIアプリケーションを組むことができます。
[Tcl/Tkの解説書]
- 「入門 tcl/tk」久野靖著、アスキー出版局
- 「Tcl/Tk入門」Brent B. Welch著、播口陽一、中込知之、棚橋直美訳、
- 「はじめてのTcl/Tk」浅野理森、技術評論社
- 「入門 Tcl/Tk」須栗歩人、秀和システム
- 書籍では【言語としてのTcl】の文法がたくさん書かれていますが、Mindと組み合わせて使う限りは、Tcl部の文法について詳しく知る必要はありません。なぜなら、たとえば変数はMindのほうに元から有りますし、分岐もMindの「ならば」で実現可能だからです。したがって、Mindとの組み合わせで言えば「Tk」部だけが重要と言えます。
- Tcl/Tkのホームページ → 下記は須栗さんという人が提供している、日本語で書かれたホームページです。Windows環境における利用情報がたくさんあります。
URL: http://members.nbci.com/tcltk/index.html
- GUI開発環境 - Mind Work Bench
-

- GUIを使った簡単な開発ツール"Mind Work bench"が付属します。ごくシンプルなGUIアプリケーションですが、この中から、ソースファイルのオープン、エディタによる編集、コンパイル、実行といった必要最低限の作業をマウスでおこなうことができます。
- ソケットライブラリ
-
- Windowsには「Winsock」という著名なソケットAPI(標準DLLのひとつ)が装備されており、これを使うことでTCP/IP通信を比較的簡単におこなえるとされています。しかしAPIレベルでのプログラム開発は、多くのAPIを組み合わせることや、特殊な構造体を用意するなど面倒なことがらに付き合うことになります。
- 本ライブラリを使えば、APIレベルの次元ではなく、より簡単で抽象化されたMind単語を利用できるようになります。これにより、他の言語での開発に比べ、ずっと簡単にソケットを使ったアプリケーションを組めるようになります。
- たとえば、新しいメーラを開発したり、インターネット上に存在する二つのマシンの間でプロセス間通信をおこなうといった本格的な開発にも使えます。
- ソケットAPIはすべて本ライブラリの中に隠蔽されており、ユーザが直接に関与する必要はありません。
- CGIライブラリ
-
- インターネットの爆発的な普及により、付加価値の高いサービスを提供できるCGIプログラムの開発需要は最近特に多くなっています。MindをCGI記述言語として使うことで大きなメリットを得られます。
- Perlは、CGI特有の処理が簡潔に書けることと、インタプリタであることからプログラム修正→実行確認のサイクルが短いことでよく使われています。
しかしCGIとはいえ、プログラムであることに変りはありません。数百行程度の規模ならまだしも、数千行規模での開発効率は決して良いものではなく、日時が経過してからのソースのメンテナンスに難があります。(他人が読めないことも)そして実行速度が遅い点も気になるところです。
- MindをCGIに使うことでPerlとC言語の両方の長所を得ることができます。
CGI用の充実したライブラリを利用でき、速度が速く(Cよりは遅いですが)、ひんぱんなプログラム修正も可能になり、大規模な開発で特に威力を発揮します。
当然のことではありますが、日本語プログラムならではのソース記述能力はCGIにおいても発揮されます。まるで記号列のようになるPerlのソースとは対照的で、ほとんどコメントを書かずとも誰が見ても何をやっているか一目で分かるCGIプログラムを書くことができます。
- Perlと違い、実行ファイルはバイナリのため、競争相手によって中身を解析されることもありません。中間コードであるため、逆コンパイルすら不可能です。
- APIとDLLに関して
-
- Windows-APIあるいはDLLを呼ぶことができます。ただし、Cのヘッダファイルを読むわけではないため、複雑な構造体を授受するものについてはCと同様の構造をMind側で定義したり、あるいは定数シンボルの意味をあらかじめ調べてMindソース中に数値として記述するなど、手間がかかるケースもあります。
- 逆に、MindアプリケーションをDLLとして生成することもできます。ただし、DLLは1本ではなく、.mcoと.dllの2本建てとなります(後者はMindランタイムです)。この機能を使うことで、Visual Basic, VC++, あるいはDelphiで開発されたアプリケーションと組み合わせ、機能の一部だけをMindで作成してリンクすることができます。
- Mindで書いたDLLではCGI/GUI機能は使えません。結果的に、DLLが提供する機能は、ファイルアクセス、文字列操作、ソケット通信、といった内部処理になるでしょう。
- インストーラ
-
- Mind Version 7 for Windows には、GUIを使った簡単なインストーラが付きますが、これ自体のソースが添付されます。アプリケーションをインストールする際に必要となる、レジストリの書き換え、ショートカットの作成といった処理をMindで書けるのですが、そのサンプルとしお読みいただけます。
制限(重要です)
-
ドキュメントはすべて電子媒体での提供となります。本製品で初めてMindを触られる方はMindという言語自体を学ばれるのに時間がかかるかと思います。
以前に翔泳社から出版されていた「日本語プログラミング言語Mind」を電子化したものが含まれます。PDFファイルもありますから、印刷されるのであればそちらで読まれることをお勧めします。
-
本製品を使ってGUIアプリケーションを開発される方は、市販のTcl/Tkの参考書を購入していただく必要があります。本パッケージ添付のドキュメントにはTcl/Tkの基本は述べられていないため必須となります。(推奨書籍などはドキュメント中に記載しました)
-
ソケットライブラリの利用についても同様で、ソケットの原理などは市販の書籍を参考に願います。(推奨書籍などはドキュメント中に記載しました)
-
本製品はGUIエンジンとして「Tcl/Tk」言語を使っています。
Tcl/Tkは弊社ではなく、University of California、Sun Microsystems, Inc.、Ajuba Solutions(旧:Scriptics)あるいはその他の開発者が開発し著作権を保有するソフトウェアです。
Tcl/Tkの機能に由来する制限、バグ、サポートなどについては弊社では責任を負いかねますのでご承知願います。
-
Mindows GUIアプリケーションを組む場合、印刷機能は利用できません。
-
本製品のバグ修正あるいは機能改良は、インターネット上の弊社サイトへのファイルの登録という形でおこないます。したがって、製品ご購入後も継続して弊社サイトの情報をご覧いただき、必要であればダウンロードできるような環境を持っていただけますようお願いします。個別にFDなどをご郵送することはできませんのでご承知願います。
弊社からご購入の方へご連絡を差し上げるのはインターネットのメールアカウントをお持ちである方に限らせていただきます。
-
Version 7 はネイティブコードではなく中間コード(Mコード)で走行します。Mコードを解釈・実行するためのディスパッチャが介在するため、ひたすら内部処理をおこなうようなアプリケーションでは2倍から数倍遅くなりますのでご注意願います。
-
現在のVersion 7 では、マルチタスクには対応しますがマルチスレッドのプログラムは書けません。(マルチスレッドとは、プロセスの中に複数の実行ポイントを持ち並行処理する機能です)
-
コンソールアプリケーションはMS-DOSプロンプト(通称「DOS窓」)の中で使います。EXEファイルをマウスでダブルクリックしたとしても、強制的にDOS窓が開きます。
このことから、一見すると、DOSアプリケーションとして動作するかのように錯覚しがちですが、Mind Version 7 で作成したコンソールアプリケーションは、れっきとしたプロテクトモードで起動します。DOSアプリケーションが仮想86モードで起動するのとはまったく異なります。コンソール環境として、たまたま同じ見かけのもの(DOS窓)を使うというだけです。
-
コンソールアプリケーションの作成では、利用できる機能は基本的にはPureMindPROでのFILEモジュールに相当します。しかし詳細に言えばさらに若干の制約があります。
たとえば、「赤色表示」や「カーソル位置設定」といった、比較的簡単と思われる機能であってもサポートされないのでご注意願います。コンソールへの文字表示は基本的にモノクロであり、表示方式もTTY(たれ流し方式)です。これはMindの制約ではなく、Windowsのコンソールアプリケーションであることに起因する制約とお考えください。
キー入力も同様であり、基本としてサポートされるものは「文字列入力」のみです。従来の「一文字入力」や「入力文字有り?」あるいは、ファンクションキーの押下検出といった、少し凝った入力機構は一切存在しません。
このような制約がありながら Version 7 でコンソールアプリケーションを書いて何が嬉しいのかと言えば、それは32bitリニアなメモリ空間であり、ロングファイル名のサポートであり、あるいはマルチタスク機能といった、Windows本来の処理能力であると言えます。
結果的に、Mind Version 7 for Windows で開発する【コンソールアプリケーション】は、純粋なファイルアクセスや、ソケット通信など、何らかの内部処理だけをおこなうようなものに限られるでしょう。もちろん、従来のように「文字列入力」を使って簡単な対話形式を持つアプリケーションも作成可能ですが、先にも書きましたように「一文字入力」が無いなど制約が多いため、作成可能なものはごく素朴なユーザインターフェースを持つものに限られます。DOS版Mindで既に開発されたアプリケーションを移植する場合にはこの点にご注意ください。
-
GUI開発環境について
"Mind Work Bench"は、Visual Basic のようなものではありません。あくまでエディタやコンパイラをGUI環境下で起動できるようにするだけです。Visual Basicには、ボタンをGUIで貼り付けたり、プロパティの設定をGUIでおこなえる機能がありますが、残念ながらそのような機能は本製品には有りません。
資料
【資料1】GUIアプリケーションのサンプル (hellowin2.src)
----------------------------------------------------------------------------
(ソースコード)
挨拶とは (パラメータ、・・、パラメータ数 → ・)
イベント引数を捨て
「message .m1 -text {こんにちは}」を 評価し
ベルを鳴らす
「button .b2 -text "終り" -command "exit"」を 評価し
「pack .m1 .b2」を 評価し。
イベント分岐とは 本定義 (パラメータ・・、パラメータ数、イベント名 → ・)
文字列事例をとる
"挨拶"なら 挨拶する
例外なら イベント引数を捨て
事例終り
「イベント処理後」で このメッセージでスタック検査。
メインとは
「button .b1 -text {ここを押してね!} -command {mindcmd 挨拶}」を
評価し
「pack .b1」を 評価する。
(ウィンドゥ表示)
----------------------------------------------------------------------------
【資料2】Mindで書いたCGIのサンプルA(hellowin2.src)
----------------------------------------------------------------------------
(ソースコード)
メインとは
「TEST」で htmlヘッダ出力し
「こんにちは」を 大きく表示すること。
(CGI出力内容)
Content-type: text/html; charset=x-sjis
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<!--これはMindで作成されています-->
<TITLE>Hello web</TITLE>
</HEAD>
<BODY>
<H2 align="center">こんにちは</H2>
</BODY>
</HTML>
(ブラウザでの表示)
----------------------------------------------------------------------------
【資料3】Mindで書いたCGIのサンプルB(test-cookie.src)
----------------------------------------------------------------------------
(ソースコード)
メインとは
古いキーワードは 文字列
「クッキーのテスト」で htmlヘッダを出力し
Cookie変数をモニタし
"keyword"で Cookie値を参照し 真?
ならば 古いキーワードに 入れ
「<font size=+1>」を 表示し
「あなたから以前に教えてもらったキーワードは 」を 表示し
STRONG開始し 古いキーワードを 表示し STRONG終り
「 ですね。<br>」を 表示し
「</font>」を 一行表示し
BRし
「キーワードを変更することもできますよ。<br>」を
一行表示し
さもなければ
古いキーワードを クリアし
「<font size=+1>」を 表示し
「こんにちは。このCGIを動かされるのは初めてですね。<br>」続
「キーワードを何か入力してください。Cookieを使って」続
「それを覚えてみます。<br>」を 表示し
「</font>」を 一行表示し
つぎに
BR
「<FORM method="post" action="mind.cgi?cookie-submit">」を 一行表示し
「キーワード(1〜9またはA-zで):」を 表示し
「<input type="text" name="keyword" 」を 表示し
古いキーワードが 非空列?
ならば 「value="」を 表示し 古いキーワードを 表示し
「" 」を 表示し
つぎに
「><br>」を 一行表示し
BR
「<input type="submit" name="send" value="Send"><br>」を 一行表示し
「</form>」を 一行表示し
。
(ブラウザでの表示)
----------------------------------------------------------------------------
【資料4】パッケージに含まれるディレクトリ/ファイル
----------------------------------------------------------------------------
mind7\
bin\ バイナリ格納
c2words.mco ワードテーブル作成ツール(Mコード)
c2words.exe 同、起動プログラム
copyrunt.mco カーネルコンパイル用コピーツール
copyrunt.exe 同、起動プログラム
exec.exe cgi手動起動用プログラム
getcgikr.mco mind.cgi,nph-mind.cgi を実行ディレクトリに複写する
getcgikr.exe 同、起動プログラム
mcp.mco ファイルコピーツール
mcp.exe 同、起動プログラム
mhist.mco ライブラリの履歴表示ツール(Mコード)
mhist.exe 同、起動プログラム
mind.mco コンパイラ(Mコード)
mind.exe 同、起動プログラム
mindexec.exe Mindコンソールアプリケーション起動プログラム
mindexecw.exe 同、GUIアプリケーション用
mmake.mco メイクツール(Mコード)
mmake.exe 同、起動プログラム
mindwb.mco Mind Work Bench(GUI開発環境)
mindwb.exe 同、起動プログラム
mrunt006.exe Mindランタイムライブラリ(コンソールアプリケーション)
mrunt052.exe Mindランタイムライブラリ(コンパイラ用)
mrunt116.exe Mindランタイムライブラリ(GUIアプリケーション)
mrunt154.exe Mindランタイムライブラリ(CGIアプリケーション)
mrunt202.dll Mindランタイムライブラリ(DLLアプリケーション)
mrunt251.exe Mindランタイムライブラリ(Windows Silent)
putmlib.mco ライブラリをMindの標準ライブラリパスに複写するツール
putmlib.exe 同、起動プログラム
bin\
icon\ Mind関連のアイコンファイル群
lib\ ライブラリ格納
file.mco fileライブラリ(コンソールアプリケーション用)
file.sym 同、シンボルファイル
filew.mco fileライブラリ (GUIアプリケーション用)
filew.sym 同、シンボルファイル
fileg.mco fileライブラリ (CGIアプリケーション用)
fileg.sym 同、シンボルファイル
filed.mco fileライブラリ (DLLアプリケーション用)
filed.sym 同、シンボルファイル
tcllib.mco tcllibライブラリ (GUIアプリケーション用)
tcllib.sym 同、シンボルファイル
kernel\ カーネルソース(ディスパッチャ)
〜
〜
makefile メイクファイル
file\ ランタイムライブラリ(ファイルライブラリ)
〜
〜
tool\ 開発ツール(コンソール版)
c2words.src ワードテーブル作成ツール
c2words.his 同、ヒストリファイル
getcgikr.src mind\bin\mindrunt → .\mind.cgi に複写するツール
getcgikr.his 同、ヒストリファイル
keisen.src 罫線表示ライブラリ (mhistが使う)
keisen.his 同、ヒストリファイル
mcp.src 更新のあった複数のファイルを複写するツール
mcp.his 同、ヒストリファイル
mhist.src ライブラリの履歴表示ツール
mhist.his 同、ヒストリファイル
mmake.src Mindのメイクプログラム
mmake.his 同、ヒストリファイル
putmlib.src ライブラリをMindの標準ライブラリパスに複写するツール
putmlib.his 同、ヒストリファイル
toolw\ 開発ツール(GUI版)
mindwb.src Mind Work Benchソース
mindwb.tcl 同、Tcl/Tkスクリプト部
sample\ サンプルプログラム(コンソール版)
hello.src Mind版の Hello Word!
eucconv.src euc2sjis.src, sjis2euc.src 用の副ソース
euc2sjis.src euc→sjisコンバータ
sjis2euc.src sjis→eucコンバータ
mfind.src 全角・半角、大文字・小文字を同一視するテキスト検索
replace.src 文字の置換をおこなう
revline.src ファイルの先頭行から末尾行まで逆転するツール
play\
play.src PLAY - Mind言葉遊びプログラム
play.doc 同、ドキュメント
milk.src 同、サンプルソース(牛乳)
milk2.src 同、サンプルソース
omiai.src 同、サンプルソース(お見合いエキスパートシステム)
samplew\ サンプルプログラム(GUI版)
entry.src
evalfile.src
evalfile.tcl
bigfont.src
event_args.src
hellowin.src
jyudaierr.src
opendialog.src
showargs.src
showtext.src
stackerr.src
syntaxerr.src
var_access.src
hellowin2.src
sampled\ サンプルプログラム(DLL版)
〜
〜
doc\ ドキュメントのディレクトリ
〜
〜
srclib\ ソース提供ライブラリ
jisconv.src JISコードと他の文字コードとの相互変換
cgilib\ CGIライブラリ
〜
sample\ サンプルディレクトリ
〜
socketlib\ ソケットライブラリ
〜
sample\ サンプルディレクトリ
〜
----------------------------------------------------------------------------
【資料5】GUI系の処理単語
----------------------------------------------------------------------------
一つのイベントを処理とは (・ → ・)
すべてのイベントを処理とは (・ → ・)
イベント分岐とは 仮定義。
イベント引数を取り出しとは
ウィンドゥにコマンドを適用とは (ウィンドゥ名、実行コマンド → ・)
ウィンドゥが閉じるのを待つとは (ウィンドゥ名 → ・)
フォーカスを与えるとは (ウィンドゥ名 → ・)
フォーカスを当てるとは フォーカスを与えると 等価。
ルートウィンドゥとは (・ → ウィジェット名)
ルートウィンドゥ?とは (ウィジェット名 → 真偽)
ウィジェットを削除0とは (ウィジェット名 → ・)
ウィンドゥを閉じる0とは ウィジェットを削除0と 等価。
ウィジェットを削除とは (ウィジェット名 → ・)
ウィンドゥを閉じるとは ウィジェットを削除と 等価。
フォーカスロックとは (ウィジェット名 → ・)
フォーカスロック・全画面とは (ウィジェット名 → ・)
フォーカスロック解除とは (ウィジェット名 → ・)
アイコン化とは (ウィジェット名 → ・)
アイコン化解除とは (ウィジェット名 → ・)
ウィンドゥを隠すとは (ウィジェット名 → ・)
ウィンドゥを見せるとは (ウィジェット名 → ・)
ファイルのアイコンを得るとは (ファイル名 → アイコンハンドル)
ウィンドゥアイコンを設定とは (アイコンハンドル → ・)
ベルを鳴らすとは (・ → ・)
ウィンドウタイトル設定とは (ウィンドウ名、タイトル文字列 → ・)
ジオメトリを分解とは (ジオメトリ → Xサイズ、Yサイズ、X位置、Y位置)
ジオメトリを分解しサイズを得るとは (ウィンドゥ名 → Xサイズ、Yサイズ)
ジオメトリを分解し位置を得るとは (ウィンドゥ名 → X位置、Y位置)
ジオメトリサイズを合成とは (Xサイズ、Yサイズ → ジオメトリ)
ジオメトリ位置を合成とは (X位置、Y位置 → ジオメトリ)
ジオメトリを合成とは (Xサイズ、Yサイズ、X位置、Y位置 → ジオメトリ)
ジオメトリを得るとは (ウィンドゥ名 → ジオメトリ(文字列))
ジオメトリを設定とは (ウィンドゥ名、ジオメトリ(文字列) → ・)
ジオメトリを補正とは (ジオメトリ → ジオメトリ)
ウィンドゥを開くとは (ウィンドウ名、ジオメトリ、タイトル → ・)
複数のボタンを置き応答を待つとは (ウィンドゥ名、ボタン情報 → 結果)
ダイヤログを開くとは
ダイヤログにモニタ表示とは (文字列 → ・)
起動引数をモニタとは (・ → ・)
イベント引数をモニタとは (・ → ・)
このメッセージでスタック検査とは (・ → ・)
----------------------------------------------------------------------------
[ホームに戻る]
Scripts Lab. Inc.