Пример #1
0
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);

}
Пример #2
0
KpHandle_t unlockSysBufferPtr (KpGenericPtr_t p)
{
        return (unlockBufferPtr (p));
}
Пример #3
0
/* 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;
}