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?)とかにしてしまえば よいでしょうか。