#include "convbase.h"

class CInccUTF7In : public CINetCodeConverter
{
private:
    BOOL (CInccUTF7In::*m_pfnConv)(UCHAR tc);
    BOOL (CInccUTF7In::*m_pfnCleanUp)();

    LONG m_tcUnicode ;
    BOOL m_fUTF7Mode;
    int  m_nBitCount;
    int  m_nOutCount;

public:
    CInccUTF7In(UINT uCodePage, int nCodeSet);
    ~CInccUTF7In() {}
    virtual HRESULT ConvertChar(UCHAR tc, int cchSrc=-1);
    virtual BOOL CleanUp();
    virtual int GetUnconvertBytes();
    virtual DWORD GetConvertMode();
    virtual void SetConvertMode(DWORD mode);

private:
    void Reset();    // initialization
    BOOL ConvMain(UCHAR tc);
    BOOL CleanUpMain();
};

class CInccUTF7Out : public CINetCodeConverter
{
private:
    BOOL m_fUTF7Mode;
    BOOL m_fDoubleByte;
    BYTE m_tcFirstByte;
    int  m_nBitCount;
    LONG m_tcUnicode ;

public:
    CInccUTF7Out(UINT uCodePage, int nCodeSet);
    ~CInccUTF7Out() {}
    virtual HRESULT ConvertChar(UCHAR tc, int cchSrc=-1);
    virtual BOOL CleanUp();
    virtual int GetUnconvertBytes();
    virtual DWORD GetConvertMode();
    virtual void SetConvertMode(DWORD mode);
private:
    void Reset();    // initialization
};