/*++

Copyright (c) 1991  Microsoft Corporation

Module Name:

    prtstrm.hxx

Abstract:

    This module contains the declaration for the PRINT_STREAM class.
    The PRINT_STREAM is a class derived from STREAM that provides
    methods to write data to a print device.
    A PRINT_STREAM has always WRITE_ACCESS.


Author:

    Jaime Sasson (jaimes) 18-Apr-1991

Environment:

    ULIB, User Mode


--*/


#if !defined( _PRINT_STREAM_ )

#define _PRINT_STREAM_

#include "stream.hxx"


//
//  Forward references
//

DECLARE_CLASS( PRINT_STREAM );
DECLARE_CLASS( WSTRING );
DECLARE_CLASS( PATH );


class PRINT_STREAM : public STREAM {

    public:

        ULIB_EXPORT
        DECLARE_CONSTRUCTOR( PRINT_STREAM );

        DECLARE_CAST_MEMBER_FUNCTION( PRINT_STREAM );

        VIRTUAL
        ULIB_EXPORT
        ~PRINT_STREAM(
            );

        NONVIRTUAL
        ULIB_EXPORT
        BOOLEAN
        Initialize(
            IN PCPATH       DeviceName
            );

        VIRTUAL
        BOOLEAN
        IsAtEnd(
            ) CONST;

        VIRTUAL
        STREAMACCESS
        QueryAccess(
            ) CONST;

        VIRTUAL
        BOOLEAN
        Read(
            OUT PBYTE   Buffer,
            IN  ULONG   BytesToRead,
            OUT PULONG  BytesRead
            );

        VIRTUAL
        BOOLEAN
        ReadChar(
            OUT PWCHAR  Char,
                        IN  BOOLEAN     Unicode   DEFAULT FALSE
            );

        VIRTUAL
        BOOLEAN
        ReadMbString(
            IN      PSTR    String,
            IN      DWORD   BufferSize,
            INOUT   PDWORD  StringSize,
            IN      PSTR    Delimiters,
            IN      BOOLEAN ExpandTabs  DEFAULT FALSE,
            IN      DWORD   TabExp      DEFAULT 8
            );

        VIRTUAL
        BOOLEAN
        ReadWString(
            IN      PWSTR    String,
            IN      DWORD   BufferSize,
            INOUT   PDWORD  StringSize,
            IN      PWSTR    Delimiters,
            IN      BOOLEAN ExpandTabs  DEFAULT FALSE,
            IN      DWORD   TabExp      DEFAULT 8
            );

        VIRTUAL
        BOOLEAN
        ReadString(
            OUT PWSTRING    String,
            IN  PWSTRING    Delimiters,
            IN  BOOLEAN     Unicode   DEFAULT FALSE
            );



    protected:

        VIRTUAL
        HANDLE
        QueryHandle(
            ) CONST;


    private:

        NONVIRTUAL
        VOID
        Construct(
            );

        HANDLE          _Handle;
};



#endif // _PRINT_STREAM_