xref: /plan9/sys/src/cmd/aux/antiword/imgtrans.c (revision f5736e95f14e1485b3a0291fa82d86cca323ab61)
1*f5736e95SDavid du Colombier /*
2*f5736e95SDavid du Colombier  * imgtrans.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  * Generic functions to translate Word images
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 
13*f5736e95SDavid du Colombier /*
14*f5736e95SDavid du Colombier  * bTranslateImage - translate the image
15*f5736e95SDavid du Colombier  *
16*f5736e95SDavid du Colombier  * This function reads the type of the given image and and gets it translated.
17*f5736e95SDavid du Colombier  *
18*f5736e95SDavid du Colombier  * return TRUE when sucessful, otherwise FALSE
19*f5736e95SDavid du Colombier  */
20*f5736e95SDavid du Colombier BOOL
bTranslateImage(diagram_type * pDiag,FILE * pFile,BOOL bMinimalInformation,ULONG ulFileOffsetImage,const imagedata_type * pImg)21*f5736e95SDavid du Colombier bTranslateImage(diagram_type *pDiag, FILE *pFile, BOOL bMinimalInformation,
22*f5736e95SDavid du Colombier 	ULONG ulFileOffsetImage, const imagedata_type *pImg)
23*f5736e95SDavid du Colombier {
24*f5736e95SDavid du Colombier 	options_type	tOptions;
25*f5736e95SDavid du Colombier 
26*f5736e95SDavid du Colombier 	DBG_MSG("bTranslateImage");
27*f5736e95SDavid du Colombier 
28*f5736e95SDavid du Colombier 	fail(pDiag == NULL);
29*f5736e95SDavid du Colombier 	fail(pFile == NULL);
30*f5736e95SDavid du Colombier 	fail(ulFileOffsetImage == FC_INVALID);
31*f5736e95SDavid du Colombier 	fail(pImg == NULL);
32*f5736e95SDavid du Colombier 	fail(pImg->iHorSizeScaled <= 0);
33*f5736e95SDavid du Colombier 	fail(pImg->iVerSizeScaled <= 0);
34*f5736e95SDavid du Colombier 
35*f5736e95SDavid du Colombier 	vGetOptions(&tOptions);
36*f5736e95SDavid du Colombier 	fail(tOptions.eImageLevel == level_no_images);
37*f5736e95SDavid du Colombier 
38*f5736e95SDavid du Colombier 	if (bMinimalInformation) {
39*f5736e95SDavid du Colombier 		return bAddDummyImage(pDiag, pImg);
40*f5736e95SDavid du Colombier 	}
41*f5736e95SDavid du Colombier 
42*f5736e95SDavid du Colombier 	switch (pImg->eImageType) {
43*f5736e95SDavid du Colombier 	case imagetype_is_dib:
44*f5736e95SDavid du Colombier 		return bTranslateDIB(pDiag, pFile,
45*f5736e95SDavid du Colombier 				ulFileOffsetImage + pImg->tPosition,
46*f5736e95SDavid du Colombier 				pImg);
47*f5736e95SDavid du Colombier 	case imagetype_is_jpeg:
48*f5736e95SDavid du Colombier 		return bTranslateJPEG(pDiag, pFile,
49*f5736e95SDavid du Colombier 				ulFileOffsetImage + pImg->tPosition,
50*f5736e95SDavid du Colombier 				pImg->tLength - pImg->tPosition,
51*f5736e95SDavid du Colombier 				pImg);
52*f5736e95SDavid du Colombier 	case imagetype_is_png:
53*f5736e95SDavid du Colombier 		if (tOptions.eImageLevel == level_ps_2) {
54*f5736e95SDavid du Colombier 			return bAddDummyImage(pDiag, pImg);
55*f5736e95SDavid du Colombier 		}
56*f5736e95SDavid du Colombier 		return bTranslatePNG(pDiag, pFile,
57*f5736e95SDavid du Colombier 				ulFileOffsetImage + pImg->tPosition,
58*f5736e95SDavid du Colombier 				pImg->tLength - pImg->tPosition,
59*f5736e95SDavid du Colombier 				pImg);
60*f5736e95SDavid du Colombier 	case imagetype_is_emf:
61*f5736e95SDavid du Colombier 	case imagetype_is_wmf:
62*f5736e95SDavid du Colombier 	case imagetype_is_pict:
63*f5736e95SDavid du Colombier 	case imagetype_is_external:
64*f5736e95SDavid du Colombier 		/* FIXME */
65*f5736e95SDavid du Colombier 		return bAddDummyImage(pDiag, pImg);
66*f5736e95SDavid du Colombier 	case imagetype_is_unknown:
67*f5736e95SDavid du Colombier 	default:
68*f5736e95SDavid du Colombier 		DBG_DEC(pImg->eImageType);
69*f5736e95SDavid du Colombier 		return bAddDummyImage(pDiag, pImg);
70*f5736e95SDavid du Colombier 	}
71*f5736e95SDavid du Colombier } /* end of bTranslateImage */
72