その他の開発ツールの使い方

以下での操作例は Windowsの場合を示しています。Linux環境ではパス区切り文字など、Windowsとは多少異なる部分もあります。お手数ですがLinux環境についてはWindowsでの操作から推測してお読み願います。
すべてのMind標準ツールはMindで記述されています。ソースファイルは tool\ および toolUnicode\ に格納されているのでプログラミングの参考にしてください。

●Mind標準ツールのうちコマンドライン向けのものは、環境変数 PATH の通った場所(Mind9¥bin)に収容されているため、明なパスを指定することなくプログラム名だけで起動することができます(*1)。
*1
事前に usemind.bat を実行しておく必要はあります。
usemind については 「使い方」-「Mindの原理(コンパイラの使い方)」-「コマンド プロンプト環境下でのプログラム開発」-「コマンド プロンプトを開く」 をお読みください。

●標準ツールはかなり数が多いため一括して、
             ↓全ツールの解説
    Mind9\tool\_ここにあるプログラムについて_.txt
 というテキスト形式のマニュアルで説明しています。そこでは以下のツールが説明されています。
	----------------------------------------------
	バッチファイル (Mind9 直下):
		grepdirs.bat
		where.bat

	バッチファイル (Mind9\bin):
		erasemindobj.bat
		newfiles.bat
		newmcos.bat
		newsrc.bat

	Unicodeを扱うツール: (説明は Mind9\srclib¥unicode-manual.txt)
		euc2utf8
		sjis2utf8
		utf82euc
		utf82sjis

	標準ツール:
		bdump
		calcmove
		cmpstamp
		detabZen
		euc2sjis
		getCGIruntime
		mcp
		mgrep
		mhead
		mtail
		mhist
		mmake
		mreplace
		mtouch 
		msort 
		showargs 
		sjis2euc
	----------------------------------------------

 本章では特に有用と思われる数点だけに絞って詳しく説明します。


mhist(履歴表示)

 「Mindの原理(コンパイラの使い方)」-「コンパイルの概念」-「プログラムの履歴」 にて既に取り上げていますが、改めて解説します。
 mhistを引数無しで起動すると、簡単なヘルプを表示してきます。以下のようなものです。
c:¥Mind9¥sample>mhist
Usage: mhist [-d -h] program
        program   Mindプログラム名(拡張子無しまたは.sym付き)
        -d        詳細情報も含める
        -h        ベンダー開発情報
 まず、コンソールアプリケーションのリンク先として使う file というライブラリの履歴を調べてみます。
C:¥Mind9¥sample>mhist file

 "C:\Mind\pmindwin\lib\file"の履歴 (対応するランタイム=mrunt010 Serialno=42)
+------+----------------+----------------+-----------+----------+-----------+
|module|filename        |compile date    |total words|total code| total data|
+------+----------------+----------------+-----------+----------+-----------+
|   0|yoyakugoG       |2016 12/ 2 16:49|        221|         0|          0|
|   1|asmword         |2021  8/11 14:25|        624|       128|          0|
|   2|console         |2021  8/11 14:25|        539|    12,256|     22,212|
|   3|file            |2021  8/11 14:25|        884|    36,320|    616,332|
+------+----------------+----------------+-----------+----------+-----------+
  Next code location=00008DE0   Next data location=0009678C
コマンド プロンプトでの上記操作ではライブラリ file のパスを指定していませんが、mhistは自動的に lib¥ の場所を知り、そこにある file を見つけて表示しています。もちろん明に存在パスを指定しても構いません。
 次に、アプリケーションである hello のコンパイル結果を調べてみます。
C:¥Mind9¥sample>mhist obj\hello

 "obj\hello"の履歴 (対応するランタイム=mrunt002 Serialno=11)
+------+----------------+----------------+-----------+----------+-----------+
|module|filename        |compile date    |total words|total code| total data|
+------+----------------+----------------+-----------+----------+-----------+
|   0|yoyakugoG       |2016 12/ 2 16:49|        221|         0|          0|
|   1|asmword         |2025  9/16 18:12|        582|       320|          0|
|   2|console         |2026  7/11 14:52|        545|    13,040|     22,208|
|   3|file            |2026  7/11 14:52|        826|    38,032|    616,596|
|   4|hello           |2026  7/11 14:53|        546|    38,080|    616,596|
+------+----------------+----------------+-----------+----------+-----------+
  Next code location=000094C0   Next data location=00096894
 上記を見ると、helloがコンパイルされるまでにどのようにモジュールが積み上がっているかがわかります。


stamp(ファイル情報の表示)

 Windowsなら dir コマンド、Linuxなら ls コマンドに相当しますが、ファイルのタイムスタンプとサイズを調べるのに簡素な表示で見やすいこと、後続してソートをおこなうのに向いていること、そして WindowsとLinuxで同じコマンド・仕様で使える点が便利です。
 使用方法は以下の通りです。
c:¥Mind9>stamp

Usage: stamp [OPTIONS..]   wildcard.. | -s stampfile   targetpath
        -xFILENAME  指定したファイルは表示しない
           ( FILENAME/ とすることで先頭部一致となる )
        wildcard   パス無しワイルドカード
        -s stampfile スタンプ情報を格納したファイル
           ( stampfileで指定したリストに列挙されたファイルを処理 )
           ( stampfileとは'stamp'コマンドの出力をファイルに落としたもの )
        targetpath   コピー先のパス(. も可)
 以下は実行例です。
c:¥Mind9¥sample>stamp s*.src
2017/02/18 11:03:24        311  shiftargs.src
2025/09/25 09:34:52       4650  sortSimple.src

cmpstamp(ファイル情報の比較)

 先の stamp の兄弟のようなプログラムです。
 あるディレクトリに存在するファイル群と、別のディレクトリにある良く似たファイル群とを比較し、タイムスタンプまたはサイズが異なるものを表示します。
 使用方法は以下の通りです。
c:¥Mind9>cmpstamp

Usage(1): cmpstamp [-xe] wildcard [wildcard..] targetpath
        -xe         (Suppress Equal files) 一致ファイルは不表示
        wildcard    パス無しワイルドカード(カレントディレクトリ)
        targetpath  比較先のパス(. は不可)
  (比較元ディレクトリをカレントにして使います)

Usage(2): cmpstamp [-xe] -s stampfile targetpath
        -xe         (Suppress Equal files) 一致ファイルは不表示
        -xs         (Suppress Size maching) サイズ不一致は無視
        stampfile   スタンプ情報を格納したファイル
        targetpath  比較先のパス(. も可)
  (stampfileで指定したリストに記入された情報と実ファイルを比較します)
  (注:stampfileとは'stamp'コマンドの出力をファイルに落としたもの)
 以下は実行例です。
c:¥Mind9¥tool>cmpstamp m*.src c:\pmind\tool
.\                   c:\pmind\tool\
2025/09/30 11:04:00  2017/01/28 14:17:38  mcp.src
2025/11/03 14:32:24  2010/04/08 14:44:11  mgrep.src
2025/09/30 11:10:09  ファイル無し         mhead.src
2026/07/19 11:56:31  2017/01/06 13:40:36  mhist.src
2025/09/11 11:28:22  2025/05/13 15:36:05  mmakeF.src
2025/06/11 11:38:47  2023/11/18 09:21:31  mmakeFsub.src
2025/09/30 14:34:15  ファイル無し         mreplace.src
2025/10/09 14:47:51  ファイル無し         msort.src
2021/10/26 11:24:45  ファイル無し         mtail.src
2026/01/07 09:51:49  2016/09/11 18:01:53  mtouch.src
 上記のように、タイムスタンプが異なる場合は両者のタイムスタンプを、同じである場合は相手方の欄に「同じ」と、相手方にファイルが無い場合は「ファイル無し」と表示します。
 なお、ほとんどのファイルが一致しており、ごく一部だけ異なる場合に、その異なる情報のみを表示するには -xe オプションを指定します。スタンプが同じ行は表示されないので見やすくなります。

mcp(ファイルの複写)

 Windowsなら copy あるいは xcopy コマンド、Linuxなら cp コマンドに相当します(仕様はLinuxの cp コマンドに極めて近いです)。
 使用方法は以下の通りです。
c:¥Mind9>mcp
Usage: mcp [-puvn] FILE [FILE..] DIRECTORY[\]|TARGETNAME [-xNOCPYNAME] [-xNOCPY
NAME ..]
  FILE..     複写元ファイル名(ワイルドカード指定可)
  DIRECTORY  複写先ディレクトリ名(末尾パス記号有っても良い)
  TARGETNAME 複写先ファイル名(-nオプションと共に使う)
    -p  タイムスタンプを継承(UNIXのみ,DOSではデフォルト)
        -u  更新のあったファイルのみ処理
    -v  処理中ファイル名を表示する
    -n  複写先ファイル名(TARGETNAME)を指定
    -x  複写しないファイル名(NOCPYNAME)を指定(末尾*はワイルドカード扱い,複数指
定可)
 機能的には Linux の cp コマンドに近いものですが、Windows環境では同等のものが標準にないので便利なケースがあると思います。なお、cpコマンドと異なる仕様としては、複写元・先のファイル名が異なる場合に、mcpでは -n オプションが必要な点に留意してください。

mgrep(テキストの検索)

 開発ツールとして定番の grep の高機能Mind版で、テキストファイル群から、指定したキーワード(群)を検索します。
 複数のキーワードはand結合、or結合を指定できます。
 mgrep特有の機能として、語中のひらがなを無視するので、たとえばキーワード「赤色表示」を指定することで、テキスト「赤い色で表示する」を見つけることができます。このほかに、半角・全角の同一視など、Mindコンパイラの単語認識と同様の方法でテキストを評価するため、Mindソースコードの検索で拾い残しの無い検索ができます。
 また、-d オプションを使えば単語が定義された行のみを(引用された箇所は排除)見つけることができます。
   (注:mgrepは正規表現は使えません)
 使用方法は以下の通りです。
c:¥Mind9>mgrep
Usage: mgrep [-w -d -rare -mrare -h -v -k] KEYWORD [and|or KEYWORD..] FILE FILE..
 -w     部分一致ではなく単語一致を調べます
 -D     その単語の定義行を調べます(○○は/○○とは)
 -d     -Dと似ていますが、局所変数定義も含めます
 -rare  曖昧処理せずありのまま検索
 -mrare  (midium rare)曖昧処理を全/半、大/小の文字正規化だけとする(平仮名は温存)
 -h     ファイル名と行番号の出力を抑止します。余計な空行も抑制します
 -v     判定を逆にします。余計な空行も抑制します
 -k     オプションを終了し以降キーワードとする('-'で始まるキーワードに使う)
          (-k の後方にオプションを書くとキーワードとみなされるので注意のこと)
  KEYWORD and/or接続で複数のキーワードを書けるが and と or の混在はできない
     空白を含むキーワードは -mrare 指定と組み合わせ、" " で囲んでください
 FILE FILE..
     ファイル名にワイルドカードも使えます(例:*.src)
     ファイル名が一つも無い場合は標準入力からデータを読みます
 (検索時には大小/全半を同一視、ひらがなを無視します)

msort(テキストデータのソート)

 クイックソートアルゴリズムによりデータファイルをソートします。
 スクリプツ・ラボ社内にて長年の実績があります。最大10万件程度までソート可能です。
 Mind9付属のツール newfiles、newmcos, newsrc などのバッチファイル群はこれを使っています。
 Windows にも sort コマンドはありますが、msortは Linux系のオプション仕様に近く、特に -k N 指定(任意のフィールドに注目してソートする)は Windows標準ソートには無いもので有用です。
 使用方法は以下の通りです。
c:¥Mind9>msort -h
Usage: msort [-rnt] [-k KEYPOS] [-f INFILE] [-O OUTFILE]
        -r        降順ソート
        -n        数値として評価
        -t        列区切りをTABのみとする(デフォルトは空白とTAB)
        -k N      ソートキーとなる列番号(N=0は行全体)
        -k NM     列番号NとMを連結(Mは 0 or N+1) (M=0はN以降すべて)
        -O FILE   結果をファイルへ出力
 詳しくは、冒頭でも述べた "Mind9\tool\_ここにあるプログラムについて_.txt" を参照願います。

Mind標準ツールの組み合わせ(パイプを使う)

 Mind9 のツールが Mind8 のそれと違う点の1つとして、データを標準入力から受け取れるようにしたことがあります。
 mgrep, msort, mhead(mtail) など、対象となるデータを受け取るタイプのツールでは、データを標準入力からも受け取れるため、パイプから渡されたデータを処理できます。
 たとえば、カレントディレクトリにあるソースファイル群を日付降順にソートして最新の5ファイルのみをリストしたいという場合、次のようにパイプで連結したコマンド群を実行することで実現できます。
   >stamp *|msort -r|mhead -5
 次は実行例です。
c:¥Mind9¥sample>stamp *.src|msort -r|mhead -5
2025/12/12 12:22:33       3725  playSound.src
2025/09/29 10:27:57       3088  datecalcTest.src
2025/09/25 10:21:46        451  ransuSimple.src
2025/09/25 09:34:52       4650  sortSimple.src
2017/02/18 11:03:24        311  shiftargs.src
実は、bin\ にある newfiles.bat, newsrc.bat は上記のような手法を使い最新ファイルリストを表示するバッチファイルです。

showargs(起動引数の確認)

 プログラミングマニュアルの第8章「入出力を行う単語」の中の「起動引数」において、Mindで言うところの「起動引数」、つまり、プログラムで自身が起動されたときの起動引数を参照する機能を解説しています。
 プログラム開発において、
    「このようなコマンドラインで起動するとプログラムにはどのような起動引数が渡されるか」
を確認したいことがあります。そのような動作チェックの目的で使えるのがこの showargs というプログラムです。(他のツールと違って、何か有益なことをするわけではありません)
 showargs は非常に簡単なプログラムであり、処理単語「起動引数をモニタ」を呼び出しているに過ぎません(興味があれば、tool\showargs.src をご覧ください)。
 以下は実行例です。
c:¥Mind9¥sample>showargs
----------起動引数ここから----------
私のプログラム名=[C:¥Mind9¥bin¥showargs.mco]
起動引数無し
----------起動引数ここまで----------

c:¥Mind9¥sample>showargs abc 1234
----------起動引数ここから----------
私のプログラム名=[C:¥Mind9¥bin¥showargs.mco]
 Arg(1)=[abc]
 Arg(2)=[1234]
----------起動引数ここまで----------

c:¥Mind9¥sample>showargs "abc 1234"
----------起動引数ここから----------
私のプログラム名=[C:¥Mind9¥bin¥showargs.mco]
 Arg(1)=[abc 1234]
----------起動引数ここまで----------

c:¥Mind9¥sample>showargs m*.src
----------起動引数ここから----------
私のプログラム名=[C:¥Mind9¥bin¥showargs.mco]
 Arg(1)=[mother.src]
 Arg(2)=[mtail.src]
----------起動引数ここまで----------
 上記最後では「m*.src」を指定していますが、このようにファイル名をワイルドカード展開したときの様子を確認することができます。