EA iffw.c ライブラリを使用して IFF ファイルを書き込もうとすると、StartWGroup() 呼び出しを通過できません。context->ckHdr.ckSize がゼロであるため、IFFWriteBytes() で失敗します。IFFWriteBytes() の内部には、(サイズ) != szNotYetKnown をチェックする if() があります。(szNotYetKnown は定数です。) この例は、それが機能することを示しているようですが、方法がわかりません。nBytes が 4 であるため、IFFWriteBytes() は CLIENT_ERROR を返します。32 ビットの int を保存しようとしています。
私の失敗したコード:
outfp = fopen(outfile, "wb");
ifferr = OpenWIFF(outfp, &filec, szNotYetKnown);
if (ifferr) {
return 2;
}
ifferr = StartWGroup(&filec, LIST, sizeof (ID_NATAMI_FLASH), ID_NATAMI_FLASH, &listc);
if (ifferr) {
printf("ifferr: %d\n", ifferr);
return 3;
}
最後の失敗、StartWGroup()。
IFF は、XML と同様に単純なので、ライブラリーなしで生成することもできますが、よくテストされた一般的なライブラリーを使用するとよいでしょう。
質問は実際には Amiga に関するものではありませんが、このファイル形式は Amiga で人気がありました。ところで、DjVU、RMFF、AIFF 、 RIFF など、多くの形式が IFF か、わずかに異なる形式であることをご存知でしたか?
更新: 読みやすい IFF の説明。