This repository has been archived on 2024-12-16. You can view files and clone it, but cannot push or open issues or pull requests.
CodeBlocksPortable/Borland/BCC55/Include/rtflib.h

289 lines
8.7 KiB
C

/*
* R T F L I B . H
*
* Definitions for RTF library.
*
* Copyright 1986-1996 Microsoft Corporation. All Rights Reserved.
*/
#ifndef RTFLIB_H
#pragma option push -b -a8 -pc -A- /*P_O_Push*/
#define RTFLIB_H
#if defined (WIN32) && !defined (_WIN32)
#define _WIN32
#endif
#if defined (_WIN32)
#ifndef _OBJBASE_H_
#include <objbase.h>
#endif
#endif
#if defined (WIN16) || defined (DOS) || defined (DOS16)
#ifndef _COMPOBJ_H_
#include <compobj.h>
#endif
#endif
/*
* RTFLIB only looks at the first cchBodyTagMax characters of the body tag.
*/
#define cchBodyTagMax 100
typedef struct _RTFSYNCINFO
{
LONG lBodyCRC;
LONG lBodyCount;
LONG lPrefixCount;
LONG lTrailingCount;
char szBodyTag[cchBodyTagMax + 2];
} RTFSYNCINFO;
// header for compressed stream
typedef struct _lzfuhdr
{
ULONG cbSize; // total number of bytes following this field
ULONG cbRawSize; // size before compression
DWORD dwMagic; // identifies this as a compressed stream
DWORD dwCRC; // CRC-32 of the compressed data for error checking
} LZFUHDR;
// magic number that identifies the stream as a compressed stream
#define dwMagicCompressedRTF 0x75465a4c
// magic number that identifies the stream as a uncompressed stream
#define dwMagicUncompressedRTF 0x414c454d
// array used for CRC calculations
extern const DWORD rgdwCRC[];
/* IMPORTED FUNCTIONS */
/*
* LogInvalidCpid
*
* Imported callback function for logging code page conversion
* errors. A stub function is provided if a function is
* not provided by the project linking with RTFLIB
*
* The cpid parameter is the unsupported code page ID.
*
*/
STDAPI_(void) LogInvalidCpid( ULONG cpid );
/* MAIN RTF ROUTINES */
/*
* HrTextFromCompressedRTFStream
*
* Takes compressed RTF stream (pstmRTF) and returns a wrapper
* stream (*ppstmText) giving access to the plain text. The text
* stream supports Read and CopyTo methods.
*
* The pointer psi must be valid until *ppstmText is released.
* It is updated as *ppstmText is read and is not accurate until
* all of the text has been read.
*
* cpid is the code page for the text stream. It can be any code page
* INCLUDING unicode. cpid=0 means current system code page. If the
* requested code page is not supported, S_FALSE warning may be
* returned during Read or CopyTo operation.
*/
STDAPI_(HRESULT) HrTextFromCompressedRTFStream(LPSTREAM pstmCompressed,
LPSTREAM FAR *ppstmText, RTFSYNCINFO FAR *psi, ULONG cpid);
/*
* HrTextFromCompressedRTFStreamEx()
*
* Takes compressed RTF stream (pstmRTF) and returns a wrapper
* stream (*ppstmText) giving access to the plain text. The text
* stream supports Read and CopyTo methods.
*
* The pointer psi must be valid until *ppstmText is released.
* It is updated as *ppstmText is read and is not accurate until
* all of the text has been read.
*
* rgAttachPos is an array of attachment positions. It must be
* initialized to the current attachment positions before
* HrTextFromCompressedRTFStreamEx() is called.
*
* cAttach must contain the number of elements in rgAttachPos
*
* The pointer to rgAttachPos must be valid until *ppstmText is
* released. It is updated as *ppstmText is read with the new
* attachment positions and is not accurate until all of the text
* has been read.
*
* cpid is the code page for the text stream. It can be any code page
* INCLUDING unicode. cpid=0 means current system code page. If the
* requested code page is not supported, S_FALSE warning may be
* returned during Read or CopyTo operation.
*/
STDAPI_(HRESULT) HrTextFromCompressedRTFStreamEx( LPSTREAM pstmCompressed,
LPSTREAM FAR *ppstmText, RTFSYNCINFO FAR *psi, ULONG cpid,
ULONG cAttach, ULONG FAR *rgAttachPos );
/*
* HrRTFFromTextStream
*
* This function takes a text stream and returns a wrapper
* stream interface that converts the text to RTF. The
* stream wrapper is read only and only supports
* a minimum stream interface.
*
* The pointer to rgAttachPos must be valid until *ppstmRTF is
* released. This array is used to allow the insertion of
* attachment tags in the RTF.
*
* cpid is the code page for the text stream. It is used to
* set the charset and font in the RTF. No code page conversion
* is currently done inside this function.
*/
STDAPI_(HRESULT) HrRTFFromTextStream( LPSTREAM pstmText,
LPSTREAM *ppstmRTF,
ULONG cpid,
ULONG cAttach,
ULONG FAR *rgAttachPos );
/*
* WrapCompressedRTFStream
*
* Takes compressed RTF stream (pstmCompressed) and returns a wrapper
* stream (*ppstmRTF) giving access to uncompressed RTF. The RTF
* stream can support both Read and Write operations, but to get
* write access the flag ulFlags must have MAPI_MODIFY bit set.
*
* This function also supports reading and writing uncompressed
* RTF through the use of the STORE_UNCOMPRESSED_RTF flag. For reading,
* uncompressed RTF streams are detected automatically and thus the
* STORE_UNCOMPRESSED_RTF flag only has meaning if MAPI_MODIFY is set.
* If this flag is used, the data will be written in uncompressed form.
*/
STDAPI_(HRESULT) WrapCompressedRTFStream(LPSTREAM pstmCompressed,
ULONG ulFlags, LPSTREAM FAR *ppstmRTF);
/*
* RTFSync
* RTFSyncCpid
*
* Perforts body and RTF synchronization.
*
* If synchronization cannot be performed, RTF properties are removed.
* It is up to the caller to create new RTF from PR_BODY.
*
* cpid is the code page for the body property. It can be any code page
* EXCLUDING unicode. cpid=0 means current system code page. If the
* requested code page is not supported, S_FALSE warning is returned.
* RTFSync is the same as RTFSyncCpid(cpid=0).
*/
STDAPI_(HRESULT) RTFSync(LPMESSAGE lpMessage, ULONG ulFlags,
BOOL FAR *pfMessageUpdated);
STDAPI_(HRESULT) RTFSyncCpid(LPMESSAGE lpMessage, ULONG ulFlags,
BOOL FAR *pfMessageUpdated, ULONG cpid);
/* ulFlags for RTFSync */
#define RTF_SYNC_RTF_CHANGED ((ULONG) 0x00000001)
#define RTF_SYNC_BODY_CHANGED ((ULONG) 0x00000002)
/*
* ScUpdateRTFAux
*
* Calculates and updates RTF auxiliary properties.
*/
STDAPI_(SCODE) ScUpdateRTFAux(LPMESSAGE lpMessage,
BOOL FAR *lpfMessageUpdated);
STDAPI_(SCODE) ScUpdateRTFAuxCpid(LPMESSAGE lpMessage,
BOOL FAR *lpfMessageUpdated, ULONG cpid);
/*
* HrAppendTextToCompressedRTF
*
* Takes a text buffer (pbText, cchText) and appends it to the compressed
* RTF property of the message (lpMessage) appying default text formatting.
*
* The text can be added either at the beginning of the message
* (RTF_APPEND_BEGIN) or at the end (RTF_APPEND_END).
* The text can be treated as a plain text (RTF_APPEND_PLAIN_TEXT)
* or as a piece of text with some RTF formatting in it
* (RTF_APPEND_RTF_TEXT).
*
* If case of RTF text, cchText is the number of plain text characters.
*
* cpid is the code page for the text stream. It should be one of
* Windows code pages EXCLUDING unicode. cpid=0 means current system
* code page. If the requested code page is not supported,
* S_FALSE warning is returned.
*/
STDAPI_(HRESULT) HrAppendTextToCompressedRTF(LPMESSAGE lpMessage,
LPSTR strText, ULONG cchText, ULONG ulFlags, ULONG cpid);
/* ulFlags for HrAppendTextToCompressedRTF */
/* text properties (mutually exclusive) */
#define RTF_APPEND_RTF_TEXT ((ULONG) 0x00000001)
#define RTF_APPEND_PLAIN_TEXT ((ULONG) 0x00000000)
/* append position (mutually exclusive) */
#define RTF_APPEND_BEGIN ((ULONG) 0x00000002)
#define RTF_APPEND_END ((ULONG) 0x00000000)
/* ATTACHMENT TABLE HANDLING ROUTINES */
/*
* ScGetAttachTable()
*
* Takes a message and returns a pointer to the set of rows in
* the attachment table (ppRowSet), the number of attachments
* (pcAttach), and a pointer to an array of ULONGs containing
* the PR_RENDERING_POSITIONs for the attachments in sorted
* order.
*
*/
STDAPI_(SCODE) ScGetAttachTable(LPMESSAGE pmsg, LPSRowSet *ppRowSet,
UINT *pcAttach, ULONG **prgAttachPos);
/*
* ScUpdateAttachTable()
*
* Takes a message, a rowset for the attachment table, the
* number of attachments, and an array of rendering positions
* to update the attachment table with. This function is
* designed to be used in conjunction with ScGetAttachTable().
* The BOOLEAN pointed to by pfUpdated will be set to TRUE if
* the attachment table was modified.
*
*/
STDAPI_(SCODE) ScUpdateAttachTable(LPMESSAGE pmsg, LPSRowSet pRowSet,
UINT cAttach, ULONG *rgAttachPos, BOOL *pfUpdated);
/* CPID CONVERSION ROUTINES */
/*
* These functions are in a separate object file (cpmap.obj),
* since on the store side they are linked into a different DLL.
*/
STDAPI_(ULONG) WinCpidFromCpid (ULONG cpid);
STDAPI_(ULONG) CharsetFromCpid (ULONG cpid);
STDAPI_(ULONG) CpidFromCharset (ULONG charset);
STDAPI_(CHAR FAR*) SzDefFontFmtFromCpid (ULONG cpid);
#pragma option pop /*P_O_Pop*/
#endif /* RTFLIB_H */