// --------------------------------------------------------------------------------
// Textstm.h
// Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
// Steven J. Bailey
// --------------------------------------------------------------------------------
#ifndef __TEXTSTM_H
#define __TEXTSTM_H

// --------------------------------------------------------------------------------
// Depends On
// --------------------------------------------------------------------------------
#include "stmutil.h"

// --------------------------------------------------------------------------------
// Forward Decls
// --------------------------------------------------------------------------------
class CStreamLockBytes;

// --------------------------------------------------------------------------------
// TEXTSTREAMINFO
// --------------------------------------------------------------------------------
typedef struct tagTEXTSTREAMINFO {
    CStreamLockBytes   *pStmLock;
    LPSTREAM            pStream;
    ULONG               iPos;
    ULONG               cbLineAlloc;
    CHAR                szLine[1024];
    LPSTR               pszLine;
    ULONG               cbLine;
    ULONG               iLine;
    CHAR                szBuffer[4096];
    ULONG               iBuffer;
    ULONG               iBufferStart;
    ULONG               cbBuffer;
} TEXTSTREAMINFO;

// --------------------------------------------------------------------------------
// CTextStream
// --------------------------------------------------------------------------------
class CTextStream
{
private:
    // ----------------------------------------------------------------------------
    // Text Stream Info
    // ----------------------------------------------------------------------------
    TEXTSTREAMINFO m_rInfo;

    // ----------------------------------------------------------------------------
    // Fill next buffer
    // ----------------------------------------------------------------------------
    HRESULT HrGetNextBuffer(void);

public:
    // ----------------------------------------------------------------------------
    // CTextStream
    // ----------------------------------------------------------------------------
    CTextStream(void);
    ~CTextStream(void);

    // ----------------------------------------------------------------------------
    // Methods
    // ----------------------------------------------------------------------------
    HRESULT HrInit(IStream *pStream, CStreamLockBytes *pStmLock);
    void    Free(void);
    HRESULT HrReadLine(LPSTR *ppszLine, ULONG *pcbLine);
    HRESULT HrGetSize(ULONG *pcb);
    HRESULT HrSeek(ULONG iPos);
    HRESULT HrReadHeaderLine(LPSTR *ppszHeader, ULONG *pcbHeader, LONG *piColonPos);
    ULONG   UlGetPos(void);
    void    GetStream(IStream **ppStream);
    HRESULT HrGetStreamLockBytes(CStreamLockBytes **ppStmLock);
};

#endif // __TEXTSTM_H