コマンドラインオプションを用意したい
UNIX向けにコマンドラインオプションを用意したいと突然思いました。
毎回GUIを開いて、サーバに接続するのが面倒かもしれないので。
Qt AssistantでQApplicationクラスを見るとコンストラクタに引数argc, argvを渡して、いくつかのオプションは解析するようです。
気になったのは以下の3つのオプションです。
1, -style オプション GUIの見た目を変えられるそうです。古いWindowsとかMotifとか…
2, -reverse オプション レイアウトが左右逆転します。文字列自体は逆転しませんが、不思議な感じです。右から左に文字を書く言語向けでしょうか。
3, -widgetcount デバッグメッセージにどのwidgetから出たものかが表示されるそうです。デバッグ時に使えるかも。
QApplicationで解釈してくれるオプション以外は必要な物は自前で解釈しなくてはなりません。
コマンドラインオプションを解析するのは面倒なので、getoptを使おうと思いましたが、いろいろ対応できたほうが便利そうなので、GNUのgengetoptを使おうと思います。このツールを使うとC言語向けの解析部分を生成してくれるそうです。
gengetoptの最新は2.22.6みたいです。cygwin/x64上でコンパイル、インストールしました。
cygwinの最新make (4.0)だと
"*** 複数のターゲットパターンです. 中止."
となるので、少し古いmakeか、さらに最新make(例えばMinGW-W64に付属の4.0.90)を使うと問題なくコンパイル/インストールできました。
/usr/local/binにgengetoptコマンドが入りますので、これを使って.cのソースファイルを生成します。
まず、使い方を調べなければいけませんね。man gengetoptを実行します。
パッケージのdocディレクトリを見るとC++での利用サンプルソースがあるようです。あと生成されるソースファイルのサンプルもあります。参考になりそうですね。
man以外にもtexinfoやhtmlのドキュメントも見られるようです。ちょっと眺めてみます。
doc/sample1.ggo
にあるような定義ファイルをまず書くみたいです。gengetoptの-i オプションで指定します。
ここまで来て、今更ですが、ヘルプメッセージは日本語化したいですね。その処理だけQtの多言語対応を使いたいです。
そのためには、gengetoptでソースファイルを生成する時に"-n"もしくは"--no-handle-help"を指定すれば、自動では処理関数が追加されず、その関数だけ自前で定義するようにできそうです。
さて、次はオプションの定義ファイルのフォーマットを調べます。
んー、このオプションの定義ファイルとヘルプメッセージの内容の整合性をとることを考慮すると、自前で簡単なオプションの管理クラスを作ったほうが管理が楽そうな気がしてきました。
(追記)
アプリケーションの設定情報を管理しているクラスにオプション解析その他もろもろを追加しました。gengetoptはこのアプリケーションには少しオーバースペックで、getoptはロースペックということで、作ったほうが早い、という結果に落ち着きました。GUIでの接続操作なしで起動後に接続します。
仕様は以下の様な感じです。パスワードが生なのが少し気にはなるのですが…
-server <server name|IP address>:<password>[:<port no>]
サーバ名(IPアドレス)とパスワードは必須。ポート番号は省略可能。省略時は55500を設定する。
各要素は":"で区切る。
パスワードに空文字は入れられない。(要検討)
ポート番号は1 - 65535の整数値とする。
exp)
-server 192.168.10.1:mcz-xoxo
-server 192.168.10.1:mcz-xoxo:55500
-server urd-PC:mcz-xoxo
-server urd-PC:mcz-xoxo:30000
-version (-v)
バージョン情報を表示する。
アプリケーション名、バージョン、プラットフォーム(OS, ホストタイプ)などを表示する。
-debug < on | off >
デバッグログ出力を制御する。
-help (-h)
コマンドラインオプションのヘルプを表示する。
今日リリースされたBrynhildr 1.0.3への接続は一応確認しました。サウンドの遅延、ノイズに関してはまだ確認していません。
最近のコメント