/*++

Copyright (c) 1995  Microsoft Corporation
All rights reserved.

Module Name:

    spltest.c

Abstract:

    Test program for enabling a spooler group.

Author:

    Albert Ting (AlbertT)  2-Oct-1996

Revision History:

--*/

#include "precomp.hxx"
#pragma hdrstop


MODULE_DEBUG_INIT( DBG_ERROR|DBG_WARN|DBG_TRACE, DBG_ERROR );

#ifdef __cplusplus
extern "C"
#endif
INT _CRTAPI1
main(
    INT argc,
    CHAR* argv[]
    )
{
    if( !bSplLibInit() )
    {
        return 1;
    }

    BOOL bOpen = FALSE;
    HANDLE hSpooler = NULL;

    HANDLE hStdIn = GetStdHandle( STD_INPUT_HANDLE );

    SetConsoleMode( hStdIn, ENABLE_PROCESSED_INPUT );

    for( ; ; )
    {
        TCHAR c;
        DWORD dwRead;

        printf( "SplTest> " );

        TStatusB bStatus;
        bStatus DBGCHK = ReadConsole( hStdIn,
                                      &c,
                                      1,
                                      &dwRead,
                                      NULL );


        c = TCHAR( CharLower( LPTSTR( c )));

        switch( c )
        {
        case '?':

            printf( "Usage: spltest {action}\n"
                    "       Actions: o - Open\n"
                    "                c - Close\n"
                    "                a - IsAlive\n" );
            break;

        case 'q':

            printf( "q: Exiting\n" );
            return 0;

        case 'o':
        {
            if( bOpen )
            {
                printf( "o: Error: already open %x\n", hSpooler );
                break;
            }


            TStatusB bStatus;
            bStatus DBGCHK = ClusterSplOpen( NULL,
                                             TEXT( "Spooler" ),
                                             &hSpooler,
                                             TEXT( "alberttc,," ),
                                             TEXT( ",1.2.3.4," ));

            if( bStatus )
            {
                printf( "o: Spooler albertt2 NULL opened %x\n", hSpooler );
                bOpen = TRUE;
            }
            else
            {
                printf( "o: Error: %d\n", GetLastError() );
            }
            break;
        }
        case 'c':
        {
            if( !bOpen )
            {
                printf( "c: Error: not open\n" );
                break;
            }

            TStatusB bStatus;
            bStatus DBGCHK = ClusterSplClose( hSpooler );

            if( bStatus )
            {
                printf( "c: Spooler closed %x.\n", hSpooler );
            }
            else
            {
                printf( "c: Error: closing %x %d\n", hSpooler, GetLastError() );
            }

            bOpen = FALSE;

            break;
        }
        case 'a':
        {

            TStatusB bStatus;
            bStatus DBGCHK = ClusterSplIsAlive( hSpooler );

            if( bStatus )
            {
                printf( "a: Spooler alive %x.\n", hSpooler );
            }
            else
            {
                printf( "a: Error: not alive %x %d (%x)\n",
                        hSpooler,
                        GetLastError(),
                        GetLastError() );
            }
            break;
        }
        default:

            printf( "%c: Unknown command\n", c );
            break;
        }
    }

    return 0;
}