/*
**    Name: reset.c
**
**    Date: Thu Jul 31 19:01:50 2003
**
*/

#include "odbcdm.h"
#include "support.h"
#include "sql.h"
#include "kernel.h"
#include "ODBCLib.h"

osbool menu_reset(bits event_code,
               toolbox_action *action,
               toolbox_block *block,
               void *handle)
    {
    _kernel_swi_regs regs;

    NOT_USED(event_code);
    NOT_USED(action);
    NOT_USED(block);
    NOT_USED(handle);

/* Check status and reset */

    regs.r[0] = SQL_QueryStatusGet;
    _kernel_swi(SQL_QueryStatus,&regs,&regs);

    if (regs.r[1] != ODBC_STATE_READY &&
        regs.r[1] != ODBC_STATE_NOSERVER)
        {
        if (report_prompt(messagetrans_simplelookup("Reset")) == TRUE)
            {

/* A pending query is no longer being run (this task would be busy in the
   driver otherwise), so fail it: its client is waiting for COMPLETE and
   would never see READY */

            if (regs.r[1] == ODBC_STATE_PENDING)
                {
                regs.r[0] = SQL_QueryStatusReplySet;
                regs.r[1] = SQL_ERROR;
                _kernel_swi(SQL_QueryStatus,&regs,&regs);

                regs.r[0] = SQL_QueryStatusSet;
                regs.r[1] = ODBC_STATE_COMPLETE;
                _kernel_swi(SQL_QueryStatus,&regs,&regs);
                }
            else
                {
                regs.r[0] = SQL_QueryStatusSet;
                regs.r[1] = ODBC_STATE_READY;
                _kernel_swi(SQL_QueryStatus,&regs,&regs);
                }
            }
        }

    return TRUE;
    }
