PTErr_t TpReadHdr ( KpFd_p fd, KpHandle_t FAR* PTHdr, PTType_p formatP) { PTErr_t errnum; fut_hdr_p futHdr; KpInt32_t ret, hdrSize; hdrSize = (KpInt32_t)sizeof (fut_hdr_t); /* get header memory */ futHdr = (fut_hdr_p) allocBufferPtr (hdrSize); if (futHdr == NULL) { errnum = KCP_NO_CHECKIN_MEM; goto ErrOut; } ret = Kp_read (fd, (KpGenericPtr_t)&futHdr->magic, sizeof (KpInt32_t)); if (ret != 1) { errnum = KCP_INVAL_PT_BLOCK; goto ErrOut; } #if !defined KCP_ICC_ONLY if ((futHdr->magic == FUT_CIGAM) || (futHdr->magic == FUT_MAGIC) ) { ret = fut_read_futhdr (fd, futHdr); /* read in the header */ } else { #endif #if defined (KPLSBFIRST) /* swap bytes if necessary */ Kp_swab32 ((KpGenericPtr_t)&futHdr->magic, 1); #endif switch (futHdr->magic) { case PTTYPE_MFT1: /* 8 bit matrix fut */ case PTTYPE_MFT2: /* 16 bit matrix fut */ ret = fut_readMFutHdr (fd, futHdr); /* read the matrix fut header */ futHdr->idstr_len = 0; break; case PTTYPE_MA2B: case PTTYPE_MB2A: ret = fut_readMabFutHdr (fd, futHdr); /* read the matrix fut header */ futHdr->idstr_len = 0; break; default: errnum = KCP_INVAL_PT_BLOCK; /* unknown type */ goto ErrOut; } #if !defined KCP_ICC_ONLY } #endif if (ret != 1) { errnum = KCP_INVAL_PT_BLOCK; goto ErrOut; } futHdr->srcFormat = futHdr->magic; /* remember original format */ *formatP = futHdr->magic; /* return type of PT */ *PTHdr = unlockBufferPtr((KpGenericPtr_t)futHdr); /* return handle to header info */ if (*PTHdr == NULL) { errnum = KCP_MEM_UNLOCK_ERR; goto ErrOut; } return KCP_SUCCESS; ErrOut: if (futHdr != NULL) { freeBufferPtr ((KpGenericPtr_t)futHdr); } return (errnum); }
KpHandle_t unlockSysBufferPtr (KpGenericPtr_t p) { return (unlockBufferPtr (p)); }
/* frees source fut on error */ PTErr_t fut2PT (fut_p *futSrc, KpInt32_t inSpace, KpInt32_t outSpace, KpInt32_t srcFormat, PTRefNum_p PTRefNumNew) { PTErr_t PTErr; fut_hdr_p PTHdr = NULL; KpHandle_t PTHdrH = NULL, PTDataH = NULL; KpChar_t colorSpaceAttr[20]; *PTRefNumNew = 0; if ( ! IS_FUT(*futSrc)) goto ErrOut1; PTHdr = allocBufferPtr (sizeof(fut_hdr_t)); /* get buffer for resultant info header */ if (PTHdr == NULL) { goto ErrOut4; } if (!fut_io_encode (*futSrc, PTHdr)) { /* make the info header */ goto ErrOut3; } PTHdr->srcFormat = srcFormat; PTDataH = fut_unlock_fut (*futSrc); if (PTDataH == NULL) { goto ErrOut2; } *futSrc = NULL; PTHdrH = unlockBufferPtr (PTHdr); /* unlock the header buffer */ if (PTHdrH == NULL) { goto ErrOut2; } PTHdr = NULL; PTErr = registerPT (PTHdrH, NULL, PTRefNumNew); /* enter PT into list */ if (PTErr != KCP_SUCCESS) { goto ErrOut0; } makeActive (*PTRefNumNew, PTDataH); /* activate the new PT */ if (inSpace != -1) { /* set the input color space attribute */ KpItoa (inSpace, colorSpaceAttr); PTErr = PTSetAttribute (*PTRefNumNew, KCM_IN_SPACE, colorSpaceAttr); } if (outSpace != -1) { /* set the output color space attribute */ KpItoa (outSpace, colorSpaceAttr); PTErr = PTSetAttribute (*PTRefNumNew, KCM_OUT_SPACE, colorSpaceAttr); } if (PTErr != KCP_SUCCESS) { goto ErrOut0; } getOut: return PTErr; ErrOut4: PTErr = KCP_NO_CHECKIN_MEM; goto ErrOut0; ErrOut3: PTErr = KCP_ENCODE_PTHDR_ERR; goto ErrOut0; ErrOut2: PTErr = KCP_MEM_UNLOCK_ERR; goto ErrOut0; ErrOut1: PTErr = KCP_BAD_ARG; ErrOut0: if (PTDataH != NULL) { *futSrc = fut_lock_fut (PTDataH); } if (*futSrc != FUT_NULL) fut_free (*futSrc); if (PTHdr != NULL) freeBufferPtr (PTHdr); if (PTHdrH != NULL) freeBuffer (PTHdrH); if (*PTRefNumNew != 0) PTCheckOut (*PTRefNumNew); goto getOut; }