+++++++++++++++++++++++++ 緊急報告 Small−Cのオプションとバグについて +++++++++++++++++++++++++  前号にこっそり(配布直前にOh!Xで発表されたから「こっそり」でもないが) はいっていたSmall−Cは充分にお使いでしょうか。返ってきたアンケート葉書 にも喜びの声がけっこうありまして、容量ぎりぎりで入れたかいがあったと思ってい ます。  ここでは、前号に書くべきだったコンパイル・オプションと配布後に発見されたバ グについて説明します。特に、バグについてはあなたのディスクを破壊する可能性が ありますので、必ず読んでください。 ・Small−Cのオプション  Oh!Xでは移植の方法を掲載しただけで、コンパイル時のオプションの説明があ りません。本来ならば、各自がCP/M用のオリジナルを入手して移植するので、英 文のドキュメントが手元にあるはずだからです。しかし、前号の「S−OS通信」で 入手した人はそういうわけにもいかないですし、移植の際にオプション類に若干の変 更が加えられています。  元のドキュメントによると、オプションの一覧は次のとおりです。 -a sound alarm(bell) on errors -i initialize global variables to zero -o optimize for size over speed -p pause on errors  −aは、エラー時にビープ音を鳴らします。  −iは、大域変数の初期化(0)を行います。  −oは、スピードを犠牲にしてプログラムサイズの効率化を図ります。  −pは、エラーが発生した時、エラー行とエラー位置を表示して一時停止します。  又、Oh!Xにはよく出てくるもののドキュメントにないオプションに−mがあり ます。これは、コンパイルしている関数の名前を順に表示します。  もう一つ、S−OS用でもそうですが、間違えたオプションを指定すると簡単な使 用法が表示されます。この時、−l#というオプションの表示があります。英文ドキ ュメントによると、 -l1 insert as comments in output file -l2 display source on screen as compile progresses  −l1は、出力するアセンブラソースリストに何等かのコメントを入れます。  −l2は、コンパイルしているソースを画面表示します。  ということなのですが、どちらを指定しても−l2オプションの動作をしました。 ・Small−Cのバグ  S−OS通信に入っているSmall−Cに、FATを破壊するという重大なバグ が発見されました。一見なんでもない使用法により発生するバグですが、注意すれば 充分防げるものです。  まず、どのようにすると発生するかを説明します。A・Bの2ドライブがあると仮 定して、AにはSC(コンパイラ本体),stdio.h(標準入出力ヘッダファイル)を、B にはSAMPLE.C(コンパイルするソースファイル)を入れておき、DVコマンドにてデ フォルトドライブをAに設定します。そして、コマンドラインより次のように入力し てコンパイルします。 # SC: B:SAMPLE -M -A -O -P SAMPLE.Cは、#include疑似命令にてstdio.hを読み込むようにしておきます。すると、 コンパイルが終わった時点ですでにFATが破壊されています。  DREAMで見てみると、AドライブとBドライブのFATがほとんど同じように なっています。この事から、ヘッダファイルを読み込んだ時点でソースの入っている ディスクのFATがバッファ内で上書きされ、Bドライブに書き込むのにAドライブ のFAT情報でディスクを操作していると考えられます。  対処としては、必要なヘッダファイルをソースと同じディスクに入れてそのドライ ブをデフォルトとすることです。本来、<>でくくればそのヘッダファイルはコンパ イラと同じディスク(MS−DOSマシンなら環境変数にセットしたディレクトリ) から探すと思うのですが、このSmall−Cはデフォルトドライブから探します。 そのために、このような操作が必要になります。  なお、Oh!X10月号に幾つかのバグフィックスが載っていましたが、今回の報 告はフィックス前の物を対象としており、フィックスした物は手元にない(つまりま だフィックスしていない)ために動作確認をしていません。フィックスした人は一度 確認して結果を報告して下さい。 (発見までに都合5枚のディスクを潰した) Oh!石 (EOF)