コンパイル方法 ・UNIX上でのコンパイルの場合 src/makefileを使います。また、コンパイルにはANSI C(例えばgcc)が必要で す。コンパイル手順は以下の通りです。 1) srcディレクトリ下に移る 2) 必要に応じてmakefileをいじる(実際には、いじる必要のある場合は多くない と思います)。gcc以外のC処理系を利用の場合は、CCおよびCFLAGSの定義を 適切に変更して下さい。また、CONFIGSで定義可能なコンパイルスイッチの 意味は下に記します。インストール先のディレクトリ(BINDIR, MANDIR)もお 好みに応じて変更して下さい。ただし、そこに指定したディレクトリが既存 である必要があります。 3) make …うまくできなかったらソースを適宜修正して下さい^^; 4) make install(必要に応じてsuしてから) ・Win32上のegcs(mingw32)でコンパイル(Win32コンソール版を作成)する場合 src/makefile.egcをmakefileにリネームして使って下さい。 ・MS-DOS上のBorland C(bcc)でコンパイルする場合 src/makefile.bcc をmakefileにリネームして使って下さい. (一部アセンブラを使っていますのでTASMが必要です) 同梱のDOS版バイナリはbccでコンパイルしたものです。 ・MS-DOS上のLSI C-86試食版でコンパイルする場合 v5.27からLSI C-86試食版でコンパイル可能になっています。コンパイルする には、src/makefile.lccをmakefileにリネームして使って下さい。手元では、 v3.30c試食版でコンパイルできることを確認しています。なお、同試食版はスモー ルモデルである関係上、同試食版でmakeしたmml2midは、あまり大きなMMLファイ ルはコンパイルできない可能性があります。 LSI C-86試食版の場合、リンク時にスタックサイズをデフォルト(2500バイト) よりある程度大きくしてやらないと、コンパイルはできても正常に動作しません (多くのファイルではちゃんと動くように見えても、一部のファイルで異常動作 したりします)。添付のmakefile.lccではスタックサイズを6kバイトに指定して います。動作がおかしい場合、lccの-hオプション(スタックサイズのチェックを 行う)をオンにして再コンパイルして、スタック溢れが起きていないか確かめる とよいかも知れません。 (注) LSI C-86試食版のサポートは試験的なもので、将来の版は再び、同試食 版ではコンパイルできなくなるかも知れません。 ・makefile中で定義可能なコンパイルスイッチとその意味 下記のスイッチを、必要に応じて各makefile中のCONFIGSマクロの定義に加え て下さい。 -DUSE_NONMINUS_OPTS … これを定義すると以下の特例が有効になります。 ・コマンド引数のうち、MMLファイル名の次の引数が2文字以下なら、それ とそれ以降の引数は「-」の有無に関わらず全てオプション引数と見な される ・MIDIファイル名より後の引数が「-」で始まっていなくてもエラーには ならず、それらは無条件にオプション引数扱いされる -DCASE_INSENSITIVE_OPTS … オプションスイッチの大文字小文字を区別しな いようになります。 -DDEFAULT_MSCODE … MMLファイル内の文字列のコードとしてMS漢字コード(シ フトJIS)を仮定するのをデフォルトにします。この定義がない場合、文字列 のコードとしてEUCコードを仮定するのがデフォルトになります。DOS版およ びWin32版はこれを定義してmakeされています(makefile.bcc, makefile.egc にもこの定義が含まれています)。 -DNONANSI_REALLOC … お使いのCコンパイラのrealloc(), free()がANSI Cの 規格に準拠していない場合に定義します。ANSI Cでは、realloc()の第1引数 にNULLを渡したり、free()の引数にNULLを渡したりしても正常に動作するこ とを定めており、本ソースもそれを前提としています。そうでないコンパイ ラを利用する場合は、このスイッチを定義して下さい。 -DNO_MEMMOVE … お使いのCコンパイラに関数memmove()がない場合に定義して 下さい。 -DMSG_TO_STDOUT … これを定義すると、各種メッセージがstderrでなくstdout に出力されます。DOS版およびWin32版はこれを定義してmakeされています (makefile.bcc, makefile.egcにもこの定義が含まれています)。 ・ソースについて若干注記 アセンブリ言語ファイル(file.asm)がありますが、これはDOS上のBorland Cで コンパイルする場合しか使われません。UNIX版、Win32コンソール版は全てCで書 かれていますので、アセンブラを理解してなくても改造は可能ですよ(^_^) また、ちょっと混乱しやすいのですが、Win32コンソール版をコンパイルする 場合も -DUNIX のコンパイルスイッチが定義されます(逆に -DWINDOWS は定義さ れません)。POSIX互換のライブラリを提供しているegcsによって、UNIX用の記述 をほぼそのまま流用してコンパイルしているためです。 #ifdef WINDOWSの部分は、現在開発中断中のWindows GUI版のための記述です (この版は、Windows専用の部分のソースは公開されていません)。