ANSC_STATUS
ScliShoDoBufferedCommands
    (
        ANSC_HANDLE                 hThisObject,
        ANSC_HANDLE                 hSrvSession,
        ANSC_HANDLE                 hExecEnv
    )
{
    ANSC_STATUS                     returnStatus = ANSC_STATUS_SUCCESS;
    PSCLI_SHELL_OBJECT              pMyObject    = (PSCLI_SHELL_OBJECT       )hThisObject;
    PSCLI_SHELL_PROPERTY            pProperty    = (PSCLI_SHELL_PROPERTY     )&pMyObject->Property;
    PSCLI_SHELL_EXEC_ENV            pScliExecEnv = (PSCLI_SHELL_EXEC_ENV     )hExecEnv;
    PTELNET_CMD_EXECUTION_ENV       pTelnetEnv   = (PTELNET_CMD_EXECUTION_ENV)pScliExecEnv->hTelnetEnv;
    PTELNET_TSC_INTERFACE           pTscIf       = (PTELNET_TSC_INTERFACE    )pTelnetEnv->hTscIf;
    PSCLI_SHELL_SESSION_EXEC        pSession;
    BOOL                            bCmdAvailable;
    PSCLI_SHELL_BUFFERED_CMD_LIST   pBufferedCmdArray; 

    pSession    = (PSCLI_SHELL_SESSION_EXEC)pMyObject->GetSession((ANSC_HANDLE)pMyObject, (ULONG)hSrvSession);
    
    if ( !pSession )
    {
        return ANSC_STATUS_RESOURCES;
    }

    pBufferedCmdArray   = &pSession->BufferedCmd;

    if ( TRUE )
    {
        AnscAcquireLock(&pSession->AccessLock);
        bCmdAvailable   = ( pBufferedCmdArray->ulCount != 0 );
        AnscReleaseLock(&pSession->AccessLock);

        if ( bCmdAvailable )
        {
            returnStatus =
                pMyObject->RunCmd
                    (
                        (ANSC_HANDLE)pMyObject,
                        hSrvSession,
                        (ANSC_HANDLE)pTelnetEnv
                    );
        }
        else
        {
            AnscAcquireLock(&pSession->AccessLock);
            
            if ( pSession->CommandLen != 0 )
            {
                returnStatus = 
                    pTscIf->Output
                        (
                            pTscIf->hOwnerContext,
                            hSrvSession,
                            pSession->Command,
                            pSession->CommandLen
                        );
            }

            AnscReleaseLock(&pSession->AccessLock);
        }
    }

    return ANSC_STATUS_SUCCESS;
}