/*
 * PROJECT:     ReactOS Console Utilities Library
 * LICENSE:     GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
 * PURPOSE:     Provides basic abstraction wrappers around CRT streams or
 *              Win32 console API I/O functions, to deal with i18n + Unicode
 *              related problems.
 * COPYRIGHT:   Copyright 2017-2018 ReactOS Team
 *              Copyright 2017-2018 Hermes Belusca-Maito
 */

#ifndef __STREAM_PRIVATE_H__
#define __STREAM_PRIVATE_H__

#pragma once

/*
 * Console I/O streams
 */

#if 0
// Shadow type, implementation-specific
typedef struct _CON_STREAM CON_STREAM, *PCON_STREAM;
#endif

typedef struct _CON_STREAM
{
    CON_WRITE_FUNC WriteFunc;

#ifdef USE_CRT
    FILE* fStream;
#else
    BOOL IsInitialized;
    CRITICAL_SECTION Lock;

    HANDLE hHandle;

    /*
     * TRUE if 'hHandle' refers to a console, in which case I/O UTF-16
     * is directly used. If 'hHandle' refers to a file or a pipe, the
     * 'Mode' flag is used.
     */
    BOOL IsConsole;

    /*
     * The 'Mode' flag is used to know the translation mode
     * when 'hHandle' refers to a file or a pipe.
     */
    CON_STREAM_MODE Mode;
    UINT CodePage;  // Used to convert UTF-16 text to some ANSI code page.
#endif /* defined(USE_CRT) */
} CON_STREAM, *PCON_STREAM;

#endif  /* __STREAM_PRIVATE_H__ */

/* EOF */