K.Maebashi's BBS

ご自由に書き込んでください。雑談も可。
テスト書き込みの類はテスト用掲示板にどうぞ

[日付順表示] [日付順インデックス] [スレッド順インデックス]

新規投稿 | 開設者ホームページへ戻る | ヘルプ

[589] なんだかんだで遅れていますが
投稿者:(ぱ)
2007/02/20 02:13:25

crowbarのver.0.3.02は、9/26中には出します… と言っておかないとずるずる遅れていきそうなので (^^: いやその所詮マイナーバージョンアップなんですが。
[この投稿を含むスレッドを表示] [この投稿を削除]
[590] Re:なんだかんだで遅れていますが
投稿者:kit
2007/02/20 02:13:25

>crowbarのver.0.3.02は、9/26中には出します… 日本語関係は、ISO-C の mbr/wcs 系関数 (1バイトずつ処理するなら mbrtowc(3)) を使うのはどうですか? 想像だけど、これで Windows なら wchar_t は Unicode になるん じゃないでしょうか。(UNIX 系だと wchar_t 表現も locale 依存に なります。Linux の場合は Unicode) これが存在しない古い OS では1バイト文字だけサポートするとか。
[この投稿を含むスレッドを表示] [この投稿を削除]
[593] Re:なんだかんだで遅れていますが
投稿者:NykR
2007/02/20 02:13:25

>crowbarのver.0.3.02は、9/26中には出します… : >いやその所詮マイナーバージョンアップなんですが。 ダウンロードしようとしたら、UNIX版のtgzファイルがver.0.3.01とver.0.3.02で同じになってました。 あと、 if (5 < 8) { print("5 < 8\n"); } else { print("5 >= 8\n"); } を実行すると怒られました。 | Assertion failure (v->type == CRB_DOUBLE_VALUE) file..create.c line..187 | v->type..1 | Assertion failure (v->type == CRB_DOUBLE_VALUE) file..create.c line..187 | v->type..1 | アボートしました 何で2回?
[この投稿を含むスレッドを表示] [この投稿を削除]
[594] Re:なんだかんだで遅れていますが
投稿者:(ぱ)
2007/02/20 02:13:25

>ダウンロードしようとしたら、UNIX版のtgzファイルがver.0.3.01とver.0.3.02で同じになってました。 … >if (5 < 8) { > print("5 < 8\n"); >} else { > print("5 >= 8\n"); >} > >を実行すると怒られました。 ご指摘ありがとうございます。まぬけなバグで申し訳ありません。 修正してアップロード途中です。最近ネットの調子が悪いようで、 GLOBALをかけたソースの途中で今止まっています。 >| Assertion failure (v->type == CRB_DOUBLE_VALUE) file..create.c line..187 定数同士の比較では、解析木の畳み込みを行うのですが、論理型を追加したときの 修正漏れで、「畳み込んだ式は整数か実数のどちらかだ」というassert()が残っていました。 テスト不足ですみません。 >何で2回? crowbarに付属するデバッグ用ルーチンは、 ・事前に設定したファイルポインタ ・stderr の両方にエラーメッセージを吐くようになっているようです。 そして、「事前に設定したファイルポインタ」は、デフォルトでstderrなので、 デフォルトでは両方に出る… ということです。 大昔に作ったものなので、今ソースを見て確認しました。ファイル指定の出力の方は 本当に動くかどうかも自信がありません (^^;
[この投稿を含むスレッドを表示] [この投稿を削除]
[608] Re:なんだかんだで遅れていますが
投稿者:NykR
2007/02/20 02:13:25

>>何で2回? > >crowbarに付属するデバッグ用ルーチンは、 >・事前に設定したファイルポインタ >・stderr >の両方にエラーメッセージを吐くようになっているようです。 >そして、「事前に設定したファイルポインタ」は、デフォルトでstderrなので、 >デフォルトでは両方に出る… ということです。 …なるほど。了解です。どこでassertが2回も呼ばれてるんだろ? と見当はずれな疑問を抱いてました abortしてるんだから1回しか呼べないって (汗 >大昔に作ったものなので、今ソースを見て確認しました。ファイル指定の出力の方は >本当に動くかどうかも自信がありません (^^; abort()の前にファイルを閉じないといけませんね # if~elseのバグが… # |ミ サッ
[この投稿を含むスレッドを表示] [この投稿を削除]
[617] Re:なんだかんだで遅れていますが
投稿者:(ぱ)
2007/02/20 02:13:25

レスの順番がむちゃくちゃですみません。 >abort()の前にファイルを閉じないといけませんね どちらかというと、出力のたびにfflush()すべきでしょうね。 デバッグ用出力のファイルポインタをバッファリングするなんて使用者側の問題だ、 と主張することはできるかもしれませんが。次回までには修正を検討します。 ># if~elseのバグが… す、すみません、then側とelse側が同じだというバグと、論理型の畳み込みに 関するバグはあって、修正したつもりなのですが、まだ何かありましたでしょうか。 この際恥は何度でもかきますが、バグがあるなら直しておきたいと思いますので。
[この投稿を含むスレッドを表示] [この投稿を削除]
[618] Re:なんだかんだで遅れていますが
投稿者:NykR
2007/02/20 02:13:25

>># if~elseのバグが… > >        then側とelse側が同じだというバグ あ、はい、そのバグが復活してます。
[この投稿を含むスレッドを表示] [この投稿を削除]
[619] Re:なんだかんだで遅れていますが
投稿者:(ぱ)
2007/02/20 02:13:25

>あ、はい、そのバグが復活してます。 うわっ。 すみません、今GLOBALかけたソースを見ても、確かにそうなっています。 今日はちょっと無理なので、明日にでも修正させていただきます。 # マスターのソースはUNIX側のひとつしかないのに、どうしてこんなことが # 起きたのか謎です。 ご迷惑をおかけしまして申し訳ありません > 皆様
[この投稿を含むスレッドを表示] [この投稿を削除]
[620] Re:なんだかんだで遅れていますが
投稿者:(ぱ)
2007/02/20 02:13:25

>>あ、はい、そのバグが復活してます。 修正しました。報告いただきありがとうございました。 ># マスターのソースはUNIX側のひとつしかないのに、どうしてこんなことが ># 起きたのか謎です。 この「謎」はすぐ解明できたのですが… あまりにはずかしいので黙秘権を行使させてください (^^; # いくら忙しいからって、あんなことしてちゃこんなことも起きるよなあ…
[この投稿を含むスレッドを表示] [この投稿を削除]
[623] Re:なんだかんだで遅れていますが
投稿者:(ぱ)
2007/02/20 02:13:25

いつもありがとうございます。お返事が大変遅くなりましてすみません。 >日本語関係は、ISO-C の mbr/wcs 系関数 (1バイトずつ処理するなら >mbrtowc(3)) を使うのはどうですか? >想像だけど、これで Windows なら wchar_t は Unicode になるん >じゃないでしょうか。 やってみました。WindowsXP + MinGWです。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <locale.h> #include <wchar.h> int SJIStoUCS16(const char *src, wchar_t *dest) { int src_idx, dest_idx; int status; mbstate_t ps; memset(&ps, 0, sizeof(mbstate_t)); for (src_idx = dest_idx = 0; src[src_idx] != '\0'; ) { status = mbrtowc(&dest[dest_idx], &src[src_idx], 2, &ps); dest_idx++; src_idx += status; } return dest_idx; } int main(int argc, char **argv) { const char *src = "abcあいうえお憂鬱"; wchar_t dest[1024]; int size; int i; setlocale(LC_CTYPE, ""); for (i = 0; src[i] != '\0'; i++) { printf("[%02x]", ((unsigned char*)src)[i]); } putchar('\n'); size = SJIStoUCS16(src, dest); for (i = 0; i < size; i++) { printf("[%04x]", dest[i]); } putchar('\n'); return 0; } C:\>gcc sjtoucs16.c -o sjtoucs16 -lmsvcp60 C:\>sjtoucs16 [61][62][63][82][a0][82][a2][82][a4][82][a6][82][a8][97][4a][9f][54] [0061][0062][0063][3042][3044][3046][3048][304a][6182][9b31] UNICODE(UCS-2)に変換できたようです。 コンパイルオプションに-lmsvcp60がないと、mbrtowc()はリンクできません。 しかし、mbtowc()では不要です。よくわかりません。 また、mbsrtowcs()は、いろいろ試しましたが動いてくれませんでした。 setlocale(LC_CTYPE, "")とすると-1を返しますし、setlocale()しなければ 動きますが、戻ってくるのは、元のS-JISをwchar_tに1バイトずつ入れただけのものです。 それをwprint()すると、ちゃんと表示されるのですが。こっちもよくわかりません (Linuxでは動く)。 http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/_crt_setlocale.2c_._wsetlocale.asp | LC_CTYPE | 文字処理関数 (isdigit、isxdigit、mbstowcs、mbtowc の各関数は除く)。 このせい? (全然わかってませんが)
[この投稿を含むスレッドを表示] [この投稿を削除]