yaegashiさんのところから引越し。
WiLiKi の Debian パッケージで苦労したので、 Gauche が実行時に(コマンドラインオプションなどで) 内部エンコーディングを指定できるようにできないかと思いソースコードを眺めています。 char_euc_jp.h などの中で定義されているマクロ類を グローバル変数や関数ポインタに定義しなおせば実現できるような気がしますが、 SCM_CHAR_NBYTES() とか繰り返し読んでいるところではえらく速度が落ちそうです。
別々のエンコーディング用にコンパイルされたバイナリやライラリファイルを (ディレクトリを分ける等で)同時にインストールできるようにする。
マクロを関数に置き換えるよりも粒度の大きい方法。
yaegashi(2002/12/22 01:46:39 PST): エンコーディングにかかわる部分だけ別の .so に分離することは簡単かと考え、 手始めに SCM_CHAR_* マクロの呼び出され具合を src/*.o について調べてみたところ、 以下のファイルで使われていることがわかりました。 これらを libgauche から分離して、 エンコーディング毎に別ディレクトリに格納とかできるといいかな?
char.o: U SCM_CHAR_ENCODING_NAME U SCM_CHAR_MAX_BYTES U SCM_CHAR_NBYTES U SCM_CHAR_PUT main.o: U SCM_CHAR_ENCODING_NAME port.o: U SCM_CHAR_GET U SCM_CHAR_MAX_BYTES U SCM_CHAR_NBYTES U SCM_CHAR_NFOLLOWS U SCM_CHAR_PUT read.o: U SCM_CHAR_MAX_BYTES U SCM_CHAR_NBYTES U SCM_CHAR_PUT regexp.o: U SCM_CHAR_GET U SCM_CHAR_MAX_BYTES U SCM_CHAR_NBYTES U SCM_CHAR_NFOLLOWS U SCM_CHAR_PUT string.o: U SCM_CHAR_BACKWARD U SCM_CHAR_GET U SCM_CHAR_MAX_BYTES U SCM_CHAR_NBYTES U SCM_CHAR_NFOLLOWS U SCM_CHAR_PUT symbol.o: U SCM_CHAR_GET U SCM_CHAR_NBYTES
あと SCM_CHAR_MAX_BYTES が 構造体や配列の宣言で使われているところがありましたが、 これについてはサポートするエンコーディング中で最大のもの(6?)とかにしてしまえば よいでしょうか。