FGALEL 02 LFN to SFN の失敗  みなさん、こんにちは  お久しぶりです。 普段、LSI C-86 の試食版でプログラムを作っているのですが、窓95用の長い ファイル名に対応したソフトを作るはめになりました。そこで、ファイルのオー プンやその他ファイル名が必要になる部分では、以下のような perfect_name 関 数で短いファイル名に変換してから、LSI C-86 のライブラリ関数を呼び出すと いう、姑息と言うか横着な対応をとっています。 元は清十郎さんの書いた長いファイル名に関するドキュメントです。 #define LFN_EXT 0x7100 #define TRUENAME 0x60 #define LFN2SFN 1 #define SFN2LFN 2 static int perfect_name( char *buf , int mode ){ union REGS inregs,outregs; struct SREGS segregs; int ax; segread( &segregs ); segregs.ds = segregs.es = FP_SEG( buf ); inregs.x.si = inregs.x.di = FP_OFF( buf ); inregs.x.ax = LFN_EXT+TRUENAME; inregs.h.cl = mode; ax=intdosx( &inregs , &outregs , &segregs ); if (outregs.x.cflag != 0 || ax==LFN_EXT) { /* printf( "%d,%d\n" , outregs.x.cflag , ax ); *************/ segread( &segregs ); segregs.ds = segregs.es = FP_SEG( buf ); inregs.x.si = inregs.x.di = FP_OFF( buf ); inregs.h.ah = TRUENAME; inregs.h.al = 0x00; intdosx( &inregs , &outregs , &segregs ); } } で、例えば、 strcpy( fname , filename ); perfect_name( fname , LFN2SFN ); fopen( fname , "rb" ); みたいな呼び出し方をしています。 さて、通常はこれでうまく行くことが多いのですが、たまにうまくいかないこと があります。そのときには、コメントアウトしてある printf の出力によると、 キャリーフラグが on になっているのです。 この時には、perfect_name関数の if 節を通るため、変換結果は  長いファイル名   希望する出力  実際の出力 longfilename.txt LONGFI~1.TXT  LONGFILE.TXT となってしまい、ファイルのオープンに失敗してしまいます。 いったい、私は何を間違えているのでしょうか? もちろん、存在しているファイルでテストを行っております。       としき