SDIFresult SDIF_WriteFrameHeader(const SDIF_FrameHeader *fh, FILE *f) { #ifdef LITTLE_ENDIAN SDIFresult r; if ((r = SDIF_Write1(&(fh->frameType),4,f))!=ESDIF_SUCCESS) return r; if ((r = SDIF_Write4(&(fh->size),1,f))!=ESDIF_SUCCESS) return r; if ((r = SDIF_Write8(&(fh->time),1,f))!=ESDIF_SUCCESS) return r; if ((r = SDIF_Write4(&(fh->streamID),1,f))!=ESDIF_SUCCESS) return r; if ((r = SDIF_Write4(&(fh->matrixCount),1,f))!=ESDIF_SUCCESS) return r; #ifdef _WIN32 fflush(f); #endif return ESDIF_SUCCESS; #else return (fwrite(fh, sizeof(*fh), 1, f) == 1)?ESDIF_SUCCESS:ESDIF_WRITE_FAILED; #endif }
SDIFresult SDIFmem_WriteMatrix(FILE *sdif_handle, SDIFmem_Matrix m) { SDIFresult r; sdif_int32 sz, numElements; int paddingNeeded; if ((r = SDIF_WriteMatrixHeader(&(m->header), sdif_handle))!=ESDIF_SUCCESS) { return r; } sz = SDIF_GetMatrixDataTypeSize(m->header.matrixDataType); numElements = (m->header.rowCount * m->header.columnCount); switch (sz) { case 1: r = SDIF_Write1(m->data, numElements, sdif_handle); break; case 2: r = SDIF_Write2(m->data, numElements, sdif_handle); break; case 4: r = SDIF_Write4(m->data, numElements, sdif_handle); break; case 8: r = SDIF_Write8(m->data, numElements, sdif_handle); break; default: return ESDIF_BAD_MATRIX_DATA_TYPE; } if (r !=ESDIF_SUCCESS) return r; paddingNeeded = SDIF_PaddingRequired(&(m->header)); if (paddingNeeded) { char pad[8] = "\0\0\0\0\0\0\0\0"; if ((r = SDIF_Write1(pad, paddingNeeded, sdif_handle))!=ESDIF_SUCCESS) return r; } return ESDIF_SUCCESS; }
SDIFresult SDIF_WriteMatrixHeader(const SDIF_MatrixHeader *m, FILE *f) { #ifdef LITTLE_ENDIAN SDIFresult r; if ((r = SDIF_Write1(&(m->matrixType),4,f))!=ESDIF_SUCCESS) return r; if ((r = SDIF_Write4(&(m->matrixDataType),1,f))!=ESDIF_SUCCESS) return r; if ((r = SDIF_Write4(&(m->rowCount),1,f))!=ESDIF_SUCCESS) return r; if ((r = SDIF_Write4(&(m->columnCount),1,f))!=ESDIF_SUCCESS) return r; return ESDIF_SUCCESS; #else return (fwrite(m, sizeof(*m), 1, f) == 1) ? ESDIF_SUCCESS:ESDIF_READ_FAILED; #endif }
SDIFresult SDIF_WriteGlobalHeader(const SDIF_GlobalHeader *h, FILE *f) { SDIFresult r; assert(h != NULL); assert(f != NULL); #ifdef LITTLE_ENDIAN if ((r = SDIF_Write1(&(h->SDIF), 4, f))!=ESDIF_SUCCESS) return r; if ((r = SDIF_Write4(&(h->size), 1, f))!=ESDIF_SUCCESS) return r; if ((r = SDIF_Write4(&(h->SDIFversion), 1, f))!=ESDIF_SUCCESS) return r; if ((r = SDIF_Write4(&(h->SDIFStandardTypesVersion), 1, f))!=ESDIF_SUCCESS) return r; return ESDIF_SUCCESS; #else return (fwrite(h, sizeof(*h), 1, f) == 1) ?ESDIF_SUCCESS:ESDIF_WRITE_FAILED; #endif }