xref: /plan9/sys/src/cmd/aux/antiword/jpeg2eps.c (revision f5736e95f14e1485b3a0291fa82d86cca323ab61)
1*f5736e95SDavid du Colombier /*
2*f5736e95SDavid du Colombier  * jpeg2eps.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 eps
7*f5736e95SDavid du Colombier  *
8*f5736e95SDavid du Colombier  */
9*f5736e95SDavid du Colombier 
10*f5736e95SDavid du Colombier #include <stdio.h>
11*f5736e95SDavid du Colombier #include "antiword.h"
12*f5736e95SDavid du Colombier 
13*f5736e95SDavid du Colombier #if defined(DEBUG)
14*f5736e95SDavid du Colombier static int	iPicCounter = 0;
15*f5736e95SDavid du Colombier #endif /* DEBUG */
16*f5736e95SDavid du Colombier 
17*f5736e95SDavid du Colombier 
18*f5736e95SDavid du Colombier #if defined(DEBUG)
19*f5736e95SDavid du Colombier /*
20*f5736e95SDavid du Colombier  * vCopy2File
21*f5736e95SDavid du Colombier  */
22*f5736e95SDavid du Colombier static void
vCopy2File(FILE * pFile,ULONG ulFileOffset,size_t tPictureLen)23*f5736e95SDavid du Colombier vCopy2File(FILE *pFile, ULONG ulFileOffset, size_t tPictureLen)
24*f5736e95SDavid du Colombier {
25*f5736e95SDavid du Colombier 	FILE	*pOutFile;
26*f5736e95SDavid du Colombier 	size_t	tIndex;
27*f5736e95SDavid du Colombier 	int	iTmp;
28*f5736e95SDavid du Colombier 	char	szFilename[30];
29*f5736e95SDavid du Colombier 
30*f5736e95SDavid du Colombier 	if (!bSetDataOffset(pFile, ulFileOffset)) {
31*f5736e95SDavid du Colombier 		return;
32*f5736e95SDavid du Colombier 	}
33*f5736e95SDavid du Colombier 
34*f5736e95SDavid du Colombier 	sprintf(szFilename, "/tmp/pic/pic%04d.jpg", ++iPicCounter);
35*f5736e95SDavid du Colombier 	pOutFile = fopen(szFilename, "wb");
36*f5736e95SDavid du Colombier 	if (pOutFile == NULL) {
37*f5736e95SDavid du Colombier 		return;
38*f5736e95SDavid du Colombier 	}
39*f5736e95SDavid du Colombier 	for (tIndex = 0; tIndex < tPictureLen; tIndex++) {
40*f5736e95SDavid du Colombier 		iTmp = iNextByte(pFile);
41*f5736e95SDavid du Colombier 		if (putc(iTmp, pOutFile) == EOF) {
42*f5736e95SDavid du Colombier 			break;
43*f5736e95SDavid du Colombier 		}
44*f5736e95SDavid du Colombier 	}
45*f5736e95SDavid du Colombier 	(void)fclose(pOutFile);
46*f5736e95SDavid du Colombier } /* end of vCopy2File */
47*f5736e95SDavid du Colombier #endif /* DEBUG */
48*f5736e95SDavid du Colombier 
49*f5736e95SDavid du Colombier /*
50*f5736e95SDavid du Colombier  * bTranslateJPEG - translate a JPEG picture
51*f5736e95SDavid du Colombier  *
52*f5736e95SDavid du Colombier  * This function translates a picture from jpeg to eps
53*f5736e95SDavid du Colombier  *
54*f5736e95SDavid du Colombier  * return TRUE when sucessful, otherwise FALSE
55*f5736e95SDavid du Colombier  */
56*f5736e95SDavid du Colombier BOOL
bTranslateJPEG(diagram_type * pDiag,FILE * pFile,ULONG ulFileOffset,size_t tPictureLen,const imagedata_type * pImg)57*f5736e95SDavid du Colombier bTranslateJPEG(diagram_type *pDiag, FILE *pFile,
58*f5736e95SDavid du Colombier 	ULONG ulFileOffset, size_t tPictureLen, const imagedata_type *pImg)
59*f5736e95SDavid du Colombier {
60*f5736e95SDavid du Colombier #if defined(DEBUG)
61*f5736e95SDavid du Colombier 	vCopy2File(pFile, ulFileOffset, tPictureLen);
62*f5736e95SDavid du Colombier #endif /* DEBUG */
63*f5736e95SDavid du Colombier 
64*f5736e95SDavid du Colombier 	/* Seek to start position of JPEG data */
65*f5736e95SDavid du Colombier 	if (!bSetDataOffset(pFile, ulFileOffset)) {
66*f5736e95SDavid du Colombier 		return FALSE;
67*f5736e95SDavid du Colombier 	}
68*f5736e95SDavid du Colombier 
69*f5736e95SDavid du Colombier 	vImagePrologue(pDiag, pImg);
70*f5736e95SDavid du Colombier 	vASCII85EncodeFile(pFile, pDiag->pOutFile, tPictureLen);
71*f5736e95SDavid du Colombier 	vImageEpilogue(pDiag);
72*f5736e95SDavid du Colombier 
73*f5736e95SDavid du Colombier 	return TRUE;
74*f5736e95SDavid du Colombier } /* end of bTranslateJPEG */
75