/*
* jpeg2sprt.c
* Copyright (C) 2000-2002 A.J. van Os; Released under GPL
*
* Description:
* Functions to translate jpeg pictures into sprites
*/

#include <stdio.h>
#include "antiword.h"

#if 0 /* defined(DEBUG) */
static int iPicCounter = 0;
#endif /* DEBUG */


#if 0 /* defined(DEBUG) */
static void
vCopy2File(UCHAR *pucJpeg, size_t tJpegSize)
{
       FILE    *pOutFile;
       size_t  tIndex;
       char    szFilename[30];

       sprintf(szFilename, "<Wimp$ScrapDir>.jpeg%04d", ++iPicCounter);
       pOutFile = fopen(szFilename, "wb");
       if (pOutFile == NULL) {
               return;
       }
       DBG_MSG(szFilename);
       for (tIndex = 0; tIndex < tJpegSize; tIndex++) {
               if (putc(pucJpeg[tIndex], pOutFile) == EOF) {
                       break;
               }
       }
       (void)fclose(pOutFile);
       vSetFiletype(szFilename, FILETYPE_JPEG);
} /* end of vCopy2File */
#endif /* DEBUG */

/*
* bSave2Draw - save the JPEG picture to the Draw file
*
* This function puts a JPEG picture in a Draw file
*
* return TRUE when sucessful, otherwise FALSE
*/
BOOL
bSave2Draw(diagram_type *pDiag, FILE *pFile,
       size_t tJpegSize, const imagedata_type *pImg)
{
       UCHAR   *pucJpeg, *pucTmp;
       size_t  tLen;
       int     iByte;

       pucJpeg = xmalloc(tJpegSize);
       for (pucTmp = pucJpeg, tLen = 0; tLen < tJpegSize; pucTmp++, tLen++) {
               iByte = iNextByte(pFile);
               if (iByte == EOF) {
                       return FALSE;
               }
               *pucTmp = (UCHAR)iByte;
       }

#if 0 /* defined(DEBUG) */
       vCopy2File(pucJpeg, tJpegSize);
#endif /* DEBUG */

       /* Add the JPEG to the Draw file */
       vImage2Diagram(pDiag, pImg, pucJpeg, tJpegSize);

       xfree(pucJpeg);
       return TRUE;
} /* end of bSave2Draw */

/*
* bTranslateJPEG - translate a JPEG picture
*
* This function translates a picture from jpeg to sprite
*
* return TRUE when sucessful, otherwise FALSE
*/
BOOL
bTranslateJPEG(diagram_type *pDiag, FILE *pFile,
       ULONG ulFileOffset, size_t tPictureLen, const imagedata_type *pImg)
{
       /* Seek to start position of JPEG data */
       if (!bSetDataOffset(pFile, ulFileOffset)) {
               return FALSE;
       }

       if (iGetRiscOsVersion() >= 360) {
               return bSave2Draw(pDiag, pFile, tPictureLen, pImg);
       }
       /* JPEG is not supported until RISC OS 3.6 */
       return bAddDummyImage(pDiag, pImg);
} /* end of bTranslateJPEG */