/*
 * Converter API
 * 
 * Copyright (C) 2002 Sean Young
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

#ifndef __CONVAPI_H
#define __CONVAPI_H

#ifdef __cplusplus
extern "C" {
#endif

/* RtfToForeign conversion percent complete */
typedef short FCE;

typedef struct {
    short cbpcvt;	/* sizeof (PCVT) */
    short wVersion;	/* word version */
    short wPctWord;	/* percentage complete according to caller */
    short wPctConvtr;	/* percentage complete according to converter */
} PCVT;

/* RegisterApp input flags */
#define fRegAppPctComp                  0x00000001 
#define fRegAppNoBinary                 0x00000002
#define fRegAppPreview                  0x00000004
#define fRegAppSupportNonOem            0x00000008
#define fRegAppIndexing                 0x00000010

/* RegisterApp return structers */
#define RegAppOpcodeVer                 0x01
#define RegAppOpcodeDocfile             0x02
#define RegAppOpcodecharset             0x03
#define RegAppOpcodeReloadOnSave        0x04
#define RegAppOpcodePicPlacehold        0x05
#define RegAppOpcodeFavourUnicode       0x06
#define RegAppOpcodeNoClassifychars     0x07

#define RegAppOpcodeFilename            0x80
#define RegAppOpcodeInterimPath         0x81

/* The functions */
typedef long (pascal *PFN_RTF)(INT, INT);

typedef long pascal InitConverter32 (HANDLE, char *);
typedef void pascal UninitConverter (void);
typedef void pascal GetReadNames (HANDLE, HANDLE, HANDLE);
typedef void pascal GetWriteNames (HANDLE, HANDLE, HANDLE);
typedef HGLOBAL pascal RegisterApp (unsigned long, void *);
typedef FCE pascal IsFormatCorrect32 (HANDLE, HANDLE);
typedef FCE pascal ForeignToRtf32 (HANDLE, void *, HANDLE, HANDLE, HANDLE, PFN_RTF);
typedef FCE pascal RtfToForeign32 (HANDLE, void *, HANDLE, HANDLE, PFN_RTF);
typedef long pascal CchFetchLpszError (long, char *, long);
typedef long pascal FRegisterConverter (HKEY);


/* File conversion errors */
#define fceTrue             1    /* IsFormatCorrect recognised the file      */
#define fceNoErr            0    /* success                                  */
#define fceOpenInFileErr   (-1)  /* could not open input file                */
#define fceReadErr         (-2)  /* error during read                        */
#define fceOpenConvErr     (-3)  /* error opening conversion file            */
#define fceWriteErr        (-4)  /* error during write                       */
#define fceInvalidFile     (-5)  /* invalid data in conversion file          */
#define fceOpenExceptErr   (-6)  /* error opening exception file             */
#define fceWriteExceptErr  (-7)  /* error writing exception file             */
#define fceNoMemory        (-8)  /* out of memory                            */
#define fceInvalidDoc      (-9)  /* invalid document                         */
#define fceDiskFull        (-10) /* out of space on output                   */
#define fceDocTooLarge     (-11) /* conversion document too large for target */
#define fceOpenOutFileErr  (-12) /* could not open output file               */
#define fceUserCancel      (-13) /* conversion cancelled by user             */
#define fceWrongFileType   (-14) /* wrong file type for this converter       */

#ifdef __cplusplus
}
#endif

#endif /* __CONVAPI_H */

