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

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

 以下で紹介するツールはPATHの通った場所(pmind¥bin)に入っているので、パスを指定することなくプログラム名だけで起動することができます。


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

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

Usage(1): stamp wildcard [wildcard..]
  (指定したファイル群のタイムスタンプを表示します)

Usage(2): stamp -s stampfile
        stampfile   スタンプ情報を格納したファイル
  (stampfileで指定したリストに列挙されたファイルのスタンプを表示します)
  (注:stampfileとは'stamp'コマンドの出力をファイルに落としたもの)
 以下は実行例です。
c:¥pmind¥sample>stamp child*.src
2016/08/29 18:22:33        628  child.src
2016/09/24 15:54:20       1128  childpipe.src
2016/08/29 17:57:42        630  childSTDERR.src

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

 先の stamp の兄弟のようなプログラムです。
 あるディレクトリに存在するファイル群と、別のディレクトリにある良く似たファイル群とを比較し、タイムスタンプまたはサイズが異なるものを表示します。
 使用方法は以下の通りです。
c:¥pmind>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:¥pmind¥tool>cmpstamp *.src c:\pmind\tool
.\                   c:\pmind\tool\
2017/02/13 11:21:13  ファイル無し         cmpstamp.src
2017/01/06 13:48:58  同じ                 convStamp.src
2005/02/05 10:53:28  同じ                 euc2sjis.src
2005/02/05 08:36:43  2005/02/05 08:36:44  eucconv.src
2017/02/07 10:12:01  2017/02/07 10:12:02  getCGIruntime.src
1996/06/25 14:06:23  1996/06/25 14:06:24  keisen.src
2016/09/02 15:19:55  2016/09/02 15:19:56  mchmod.src
2017/01/28 14:17:38  同じ                 mcp.src
2010/04/08 14:44:11  2010/04/08 14:44:12  mgrep.src
2017/01/06 13:40:36  同じ                 mhist.src
2017/02/16 11:54:27  2017/01/06 13:41:02  mmakeF.src
2017/01/06 13:48:22  同じ                 mmakeFsub.src
 上記のように、タイムスタンプが異なる場合は両者のタイムスタンプを、同じである場合は相手方の欄に「同じ」と、相手方にファイルが無い場合は「ファイル無し」と表示します。
 なお、ほとんどのファイルが一致しており、ごく一部だけ異なる場合に、その異なる情報のみを表示するには -xe オプションを指定します。前記の tool¥ 内での適用では以下のようになります(「同じ」という行は表示されなくなります)。
c:¥pmind¥tool>cmpstamp -xe *.src c:\pmind\tool
.\                   c:\pmind\tool\
2017/02/13 11:21:13  ファイル無し         cmpstamp.src
2005/02/05 08:36:43  2005/02/05 08:36:44  eucconv.src
2017/02/07 10:12:01  2017/02/07 10:12:02  getCGIruntime.src
1996/06/25 14:06:23  1996/06/25 14:06:24  keisen.src
2016/09/02 15:19:55  2016/09/02 15:19:56  mchmod.src
2010/04/08 14:44:11  2010/04/08 14:44:12  mgrep.src
2017/02/16 11:54:27  2017/01/06 13:41:02  mmakeF.src
 上記のように情報量が減ることで見やすくなります。

mcp(ファイルの複写)

 Windowsなら copy コマンド、Linuxなら cp コマンドに相当します(仕様はLinuxの cp コマンドに極めて近いです)。
 使用方法は以下の通りです。
c:¥pmind>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 オプションを使えば単語が定義された行のみを(引用された箇所は排除)見つけることができます。
 使用方法は以下の通りです。
c:¥pmind>mgrep
Usage: mgrep [-w -d -k KEYFILE -c -rare -h -v] KEYWORD [and/or KEYWORD..]
 FILE FILE..
 -w    部分一致ではなく単語一致を調べます。
 -d    その単語の定義行を調べます(○○は/○○とは)。
 -k    次のトークンで指定したファイルからキーワードを読み込みます。
 -c    キーワードをコンソールから入力します。
 -rare 平仮名もありのまま検索します(指定が無ければ平仮名無視で比較)。
 -h    ファイル名と行番号の出力を抑止します。余計な空行も抑制します。
 -v    判定を逆にします制します。余計な空行も抑制します。
 FILE  "stdin"を指定すると標準入力から読み込みます。
 (検索時には大小/全半を同一視、ひらがなを無視します)
 (複数キーワードを "and" "or" でつなぐことができます)
 (空白を含むキーワードは " " で囲んでください)

showargs(起動引数の確認)

 プログラミングマニュアルの第8章「入出力を行う単語」の中の「起動引数」において、Mindで言うところの「起動引数」、つまり、プログラムで自身が起動されたときの起動引数を参照する機能を解説しています。
 実際のプログラム開発において、「このプログラムをこのようなコマンドラインで起動すると、最終的にどのような起動引数として渡されるのか」を確認したいことがあります。そのような動作チェックの目的で使えるのがこの showargs というプログラムです。(他のツールと違って、何か有益なことをするわけではありません)
 プログラミングマニュアルの同セクションで testarg.src というサンプルプログラムを掲示していますが、それとほとんど同じ機能を標準ツールとして用意したものと言えます。以下は実行例です。
c:¥pmind¥sample>showargs
----------起動引数ここから----------
私のプログラム名=[C:¥pmind¥bin¥showargs.mco]
起動引数無し
----------起動引数ここまで----------

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

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

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


getCGIruntime(CGI用ランタイムを複写するツール)

 本プログラムは CGIのサンプルプログラムのところで解説します。


euc2sjis, sjis2euc(EUCコード←→SJISコードの文字種変換プログラム)

 Windows版のMindが文字を入力出力する際(コンソールやファイルへ)の文字種はシフトJISコードで、Linux版の文字種はEUC(EUC-JP)になっています。これら異なる文字種の変換ツールがあると便利なことがあるため標準で用意しています。
Unicodeとの変換ツールは srclib¥ ディレクトリにソースプログラムの形で格納されています。コンパイルしてからご利用ください。

euc2sjis (EUC→シフトJIS ファイル変換)
 使用方法は以下の通りです。
c:¥pmind>euc2sjis

Usage(1): euc2sjis [-puvn] infile outfile      
     (2): euc2sjis [-puv]  infile [infile..] directory
    -p  タイムスタンプを継承する
        -u  更新のあったファイルのみ処理
    -v  処理中ファイル名を表示する
    -n  第二引数が出力ファイル名であることを明に指定します
    -h  HTMLファイルとみなし、中に記述されている Content-Type
              を強制的に 'shift_jis' に置換する
     (1) infileをoutfileに変換します
     (2) 末尾引数を変換先ディレクトリとし同名で格納します

sjis2euc (シフトJIS→EUC ファイル変換)
 使用方法は以下の通りです。デフォルトでは半角カナ文字があるとエラー扱いとなりますが、許す場合は -k オプションを指定してください。
c:¥pmind>sjis2euc

Usage(1): sjis2euc [-puvnk] infile outfile
     (2): sjis2euc [-puvk]  infile [infile..] directory
    -p  タイムスタンプを継承する
        -u  更新のあったファイルのみ処理
    -v  処理中ファイル名を表示する
    -n  第二引数が出力ファイル名であることを明に指定します
    -k  半角カナも変換する(シングルシフト)
    -h  HTMLファイルとみなし、中に記述されている Content-Type
              を強制的に 'euc-jp' を強制的に置換する
     (1) infileをoutfileに変換します
     (2) 末尾引数を変換先ディレクトリとし同名で格納します