xref: /plan9/sys/src/cmd/aux/antiword/jpeg2sprt.c (revision f5736e95f14e1485b3a0291fa82d86cca323ab61)
1*f5736e95SDavid du Colombier /*
2*f5736e95SDavid du Colombier  * jpeg2sprt.c
3*f5736e95SDavid du Colombier  * Copyright (C) 2000-2002 A.J. van Os; Released under GPL
4*f5736e95SDavid du Colombier  *
5*f5736e95SDavid du Colombier  * Description:
6*f5736e95SDavid du Colombier  * Functions to translate jpeg pictures into sprites
7*f5736e95SDavid du Colombier  */
8*f5736e95SDavid du Colombier 
9*f5736e95SDavid du Colombier #include <stdio.h>
10*f5736e95SDavid du Colombier #include "antiword.h"
11*f5736e95SDavid du Colombier 
12*f5736e95SDavid du Colombier #if 0 /* defined(DEBUG) */
13*f5736e95SDavid du Colombier static int iPicCounter = 0;
14*f5736e95SDavid du Colombier #endif /* DEBUG */
15*f5736e95SDavid du Colombier 
16*f5736e95SDavid du Colombier 
17*f5736e95SDavid du Colombier #if 0 /* defined(DEBUG) */
18*f5736e95SDavid du Colombier static void
19*f5736e95SDavid du Colombier vCopy2File(UCHAR *pucJpeg, size_t tJpegSize)
20*f5736e95SDavid du Colombier {
21*f5736e95SDavid du Colombier 	FILE	*pOutFile;
22*f5736e95SDavid du Colombier 	size_t	tIndex;
23*f5736e95SDavid du Colombier 	char	szFilename[30];
24*f5736e95SDavid du Colombier 
25*f5736e95SDavid du Colombier 	sprintf(szFilename, "<Wimp$ScrapDir>.jpeg%04d", ++iPicCounter);
26*f5736e95SDavid du Colombier 	pOutFile = fopen(szFilename, "wb");
27*f5736e95SDavid du Colombier 	if (pOutFile == NULL) {
28*f5736e95SDavid du Colombier 		return;
29*f5736e95SDavid du Colombier 	}
30*f5736e95SDavid du Colombier 	DBG_MSG(szFilename);
31*f5736e95SDavid du Colombier 	for (tIndex = 0; tIndex < tJpegSize; tIndex++) {
32*f5736e95SDavid du Colombier 		if (putc(pucJpeg[tIndex], pOutFile) == EOF) {
33*f5736e95SDavid du Colombier 			break;
34*f5736e95SDavid du Colombier 		}
35*f5736e95SDavid du Colombier 	}
36*f5736e95SDavid du Colombier 	(void)fclose(pOutFile);
37*f5736e95SDavid du Colombier 	vSetFiletype(szFilename, FILETYPE_JPEG);
38*f5736e95SDavid du Colombier } /* end of vCopy2File */
39*f5736e95SDavid du Colombier #endif /* DEBUG */
40*f5736e95SDavid du Colombier 
41*f5736e95SDavid du Colombier /*
42*f5736e95SDavid du Colombier  * bSave2Draw - save the JPEG picture to the Draw file
43*f5736e95SDavid du Colombier  *
44*f5736e95SDavid du Colombier  * This function puts a JPEG picture in a Draw file
45*f5736e95SDavid du Colombier  *
46*f5736e95SDavid du Colombier  * return TRUE when sucessful, otherwise FALSE
47*f5736e95SDavid du Colombier  */
48*f5736e95SDavid du Colombier BOOL
bSave2Draw(diagram_type * pDiag,FILE * pFile,size_t tJpegSize,const imagedata_type * pImg)49*f5736e95SDavid du Colombier bSave2Draw(diagram_type *pDiag, FILE *pFile,
50*f5736e95SDavid du Colombier 	size_t tJpegSize, const imagedata_type *pImg)
51*f5736e95SDavid du Colombier {
52*f5736e95SDavid du Colombier 	UCHAR	*pucJpeg, *pucTmp;
53*f5736e95SDavid du Colombier 	size_t	tLen;
54*f5736e95SDavid du Colombier 	int	iByte;
55*f5736e95SDavid du Colombier 
56*f5736e95SDavid du Colombier 	pucJpeg = xmalloc(tJpegSize);
57*f5736e95SDavid du Colombier 	for (pucTmp = pucJpeg, tLen = 0; tLen < tJpegSize; pucTmp++, tLen++) {
58*f5736e95SDavid du Colombier 		iByte = iNextByte(pFile);
59*f5736e95SDavid du Colombier 		if (iByte == EOF) {
60*f5736e95SDavid du Colombier 			return FALSE;
61*f5736e95SDavid du Colombier 		}
62*f5736e95SDavid du Colombier 		*pucTmp = (UCHAR)iByte;
63*f5736e95SDavid du Colombier 	}
64*f5736e95SDavid du Colombier 
65*f5736e95SDavid du Colombier #if 0 /* defined(DEBUG) */
66*f5736e95SDavid du Colombier 	vCopy2File(pucJpeg, tJpegSize);
67*f5736e95SDavid du Colombier #endif /* DEBUG */
68*f5736e95SDavid du Colombier 
69*f5736e95SDavid du Colombier 	/* Add the JPEG to the Draw file */
70*f5736e95SDavid du Colombier 	vImage2Diagram(pDiag, pImg, pucJpeg, tJpegSize);
71*f5736e95SDavid du Colombier 
72*f5736e95SDavid du Colombier 	xfree(pucJpeg);
73*f5736e95SDavid du Colombier 	return TRUE;
74*f5736e95SDavid du Colombier } /* end of bSave2Draw */
75*f5736e95SDavid du Colombier 
76*f5736e95SDavid du Colombier /*
77*f5736e95SDavid du Colombier  * bTranslateJPEG - translate a JPEG picture
78*f5736e95SDavid du Colombier  *
79*f5736e95SDavid du Colombier  * This function translates a picture from jpeg to sprite
80*f5736e95SDavid du Colombier  *
81*f5736e95SDavid du Colombier  * return TRUE when sucessful, otherwise FALSE
82*f5736e95SDavid du Colombier  */
83*f5736e95SDavid du Colombier BOOL
bTranslateJPEG(diagram_type * pDiag,FILE * pFile,ULONG ulFileOffset,size_t tPictureLen,const imagedata_type * pImg)84*f5736e95SDavid du Colombier bTranslateJPEG(diagram_type *pDiag, FILE *pFile,
85*f5736e95SDavid du Colombier 	ULONG ulFileOffset, size_t tPictureLen, const imagedata_type *pImg)
86*f5736e95SDavid du Colombier {
87*f5736e95SDavid du Colombier   	/* Seek to start position of JPEG data */
88*f5736e95SDavid du Colombier 	if (!bSetDataOffset(pFile, ulFileOffset)) {
89*f5736e95SDavid du Colombier 		return FALSE;
90*f5736e95SDavid du Colombier 	}
91*f5736e95SDavid du Colombier 
92*f5736e95SDavid du Colombier 	if (iGetRiscOsVersion() >= 360) {
93*f5736e95SDavid du Colombier 		return bSave2Draw(pDiag, pFile, tPictureLen, pImg);
94*f5736e95SDavid du Colombier 	}
95*f5736e95SDavid du Colombier   	/* JPEG is not supported until RISC OS 3.6 */
96*f5736e95SDavid du Colombier 	return bAddDummyImage(pDiag, pImg);
97*f5736e95SDavid du Colombier } /* end of bTranslateJPEG */
98