csstob v1.01 −− Cソース中の // コメントを /* コメント */ に変換 −− writen by てんか☆(M.Kitamura) □ はじめに Cソース中の // コメントを /* コメント */ に置換するツールです。最近 の Cコンパイラは // を受け付けますが、古いコンパイラやC99以前の文法に 忠実なCコンパイラでコンパイルするために用意しました。 (移植作業しててターゲット用のCコンパイラが // を受け付けてくれないの でデッチあげたプログラム... エディタのキーマクロでその場しのぎで書 きかえてたのですが馬鹿らしくなって作った代物)。 ただし完璧なツールというわけではなく、基本的にコンパイルの通るソース 前提ですし、#if 〜 #endifの中身は条件式の結果に関わらずすべて処理対象 ですので、動作や対象とするソースの状態をよく確認した上で変換作業は行 なってください。 □ 使い方 usage> csstob [-opts] srcfile newfile opts: -x[EXT] 指定ファイルは一つで新しいファイルを元の名で出力 し、元ファイルは拡張子を .EXT にする. EXT省略時は .bak にする. -j 指定ファイル名や入力したテキストに関して全角文字 を考慮する(デフォルト動作) -j- 全角を考慮しない -y[FILE] エラーメッセージを FILE に出力する。 -y のみだと標準出力する。 -y がなければエラーメッセージは標準エラー出力される。 - 何もしないオプション。 入力ファイルを指定せず標準入力したい場合に - を 指定してください。 (このプログラムは引数がない場合、ヘルプ表示になるため) □ 動作 Cソースを読込み、// コメントを /* コメント */ に置き換えます。 とりあえず、以下のようになります。 1) 変換前: int tstflag; // テストを 1:する 0:しない 変換後: int tstflag; /* テストを 1:する 0:しない */ 2) 変換前: ="// とか /* "; // コメント // 変換後: ="// とか /* "; /* コメント // */ 3) 変換前: {L'表','"','\'',"\"\\"}, // 全角や \ " ' は一応対処 変換後: {L'表','"','\'',"\"\\"}, /* 全角や \ " ' は一応対処 */ 4) 変換前: ///////// サブルーチン ////////// 変換後: /* ////// サブルーチン ////////// */ 5) 変換前: // /*危ない?...*/ 大丈夫か '/*'は 変換後: /* / *危ない?...* / 大丈夫か '/ *'は */ 基本的に入力行中に // があれば /* に置き換え行末に */ を付加している だけです。 上記 2), 3) のように 一応 " ' \ やMS全角にはある程度対処してあります。 " や ' の囲みでは途中に改行が現れても大丈夫です。 というか閉じるまでは コメント変換処理をしません。 MS全角(シフトJIS)に関しては -j[-] オプションで、チェックの有無を切り 替えられます。デフォルトでは、全角チェックを行います。 4)のように /// が 3つ以上続いている場合、 /*/ となるとコンパイラに文 句言われる場合もあるので 3つ目の / は空白に置き代えています。 5)のように // コメント中に /* や */ があると / * とか * / のように、 間に空白' 'を挿入します. □ 注意点 単純な作りなので基本的に入力するソースはコンパイルできるもののみに してください。/* */ のネストは不可です(今時しないけど)。 また、#if 〜 #endif などで条件不成立にしてコメントを書いている場合 も不都合が発生する可能性があります。 例)#if 0 /* COMMENT */ コンパイル時はコメントして機能するが、このツールでは この部分も処理しちゃうので、 //があったり、 " や ' が奇数個あったり */ や /* が閉じてなかったりする と、誤変換しちゃうでせう #endif 上記のようなことをせず、つまり #if 〜 #endif の中身は 文法的に C の ソースで、コメントは/*〜*/や //〜 に必ずなるように記述されたソースで あれば問題ないはずです。 ■ 配布条件等 フリーソフトウェアです。オンラインでの非営利配布ならば作者に連絡不要 で再配布していただいてかまいません。その他の場合(雑誌紹介とかディスク 配布で同梱したいなど)事前に相談ください、ってことで。 なお、配布ファイル中の実行ファイルは Inprise の BCC32 v5.5 でコンパ イルしてあります。 営利配布は自由でないですが、営利利用(仕事場で業務に使うとか)はもち ろん構いません。 ソースですが、原作者を含め第三者のプログラミングを阻害しない人に限り 流用や改造は自由です(改造部分の著作権でもって他者の利用を禁止するとか いう人は駄目です) 直接的な改造物を再配布したい場合は改造物であることを明示し配布条件を 原作者と同じような趣旨にしてください。ささいな流用程度ならば出所明記は 特には不要です。 再コンパイルですが、 ANSI系,unix系のライブラリ関数以外で使ってるのは stricmpだけなので、MS-Cを意識した(MS-DOS用ANSI)Cコンパイラならば,ほぼ そのまま再コンパイルできると思われます(v1.0において BC3,LsiC86(試食), WatcomC10.5, BCC v5.5 で確認) 作者はいかなる責任も義務も負いません。利用者の責任で用いてださい。 例によって十分なチェックなんて行ってるわけないので、気をつけてくださ いませ。 てんか☆ (北村雅史) NBB00541@nifty.ne.jp