# igmodule.sh
## これは何？
Igor Proのプロシージャを記述した.ipfファイルをひとつに統合するためのシェルスクリプトです．

Igor Proでは，`#include`プラグマを使うことで別のファイルで定義された関数を使うことができます．
これを利用して，複数ファイルで使う汎用的な機能をライブラリとして利用したり，巨大なプロシージャを機能ごとに分割して複数ファイルで開発したりできます．

しかし，プロシージャが複数ファイルに依存していることは，プロシージャを他の人に使ってもらう上では不便な場合があります．

まず，プロシージャを動作させるためのファイルをすべて把握して，相手に渡さなければなりません．
また，プロシージャを使う側も，ひとつの機能を使うためにいくつものファイルがロードされるのを嫌がるかもしれません．
(独立モジュール化すればユーザーからプロシージャファイルを隠蔽する事ができますが，`#include`文を使いつつ独立モジュールを作成することは面倒です)
さらに，外部ファイルのバージョンが変わった際に挙動が変わる可能性もあります．

これを解決するために，`igmodule.sh`は，プロシージャファイル中の`#include`文を解析して，特定の.ipfファイルとそのファイルが依存するファイル全てをひとつに統合したファイルを生成します．

## 使い方

### 基本の使い方
引数にファイルを指定し，標準出力をファイルに書き出します．
```
igmodule.sh ./sample.ipf > ./sample_packaged.ipf
```
### モジュール名指定
`#pragma ModuleName=`で使われるモジュール名を指定します．
```
igmodule.sh ./sample.ipf --as sample > ./sample_packaged.ipf
```
### パスではなくプロシージャ名で入力を指定
入力ファイルを，パスではなく`#include`文と同様の書式で指定します．
同名のプロシージャファイルが複数存在する場合には注意が必要になります．
```
igmodule.sh --include sample > ./sample_packaged.ipf
```
### ヘルプ
```
igmodule.sh --help
igmodule.sh -h
```
