Cuando intento utilizar el EA iffw.c library para escribir un archivo IFF, no puedo pasar la llamada a StartWGroup(). Falla en IFFWriteBytes() porque context-> ckHdr.ckSize es cero. Dentro de IFFWriteBytes() hay un if() que comprueba que (size)! = SzNotYetKnown. (szNotYetKnown es una constante.) El example parece indicar que debería funcionar, pero no puedo ver cómo. IFFWriteBytes() devuelve CLIENT_ERROR porque nBytes es 4 - Estoy intentando guardar un int de 32 bits.Obtener un error en la biblioteca iffw al intentar escribir el fragmento
Mi código no:
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;
}
La última falla, StartWGroup().
IFF es, como XML, lo suficientemente simple como para poder generarlo sin una biblioteca, pero sería bueno utilizar una biblioteca que alguna vez fue una biblioteca común y bien probada.
Pregunta realmente no es sobre Amiga, pero este formato de archivo era popular en Amiga. Por cierto, ¿sabía DjVU, RMFF, AIFF, RIFF and many other formats are IFF or slight variations?
Actualización: easy to read IFF description.
No estoy seguro de que lo entiendo. StartWGroup parece sugerir que está comenzando un grupo (¿como un elemento XML?) Que necesita ser "cerrado" con EndWGroup(). Pareces estar diciendo que estás usando StartWGroup() para escribir un int de 32 bits que parece "incorrecto" - ¿me falta algo? – John3136
EndWGroup se cierra, como dices. Pero el programa falla sin que llegue demasiado lejos. (EndWGroup tampoco escribe una etiqueta final, vuelve atrás y actualiza la longitud del fragmento en su lugar. Así que la biblioteca de EA básicamente crea una API similar a XML para escribir la etiqueta final, donde de hecho no hay etiquetas finales.) –
¿No es esto? pregunta cpp? El enlace apunta a iifw.cpp not iifw.c. – AoeAoe