/*
**    Name: Connect.c
**
**    Date: Sat Jan 19 20:06:19 2002
**
*/

#include "ODBCLib.h"
#include "isql.h"
#include "isqlext.h"
#include "kernel.h"

SQLRETURN  SQLConnect (
    SQLHDBC ConnectionHandle,
    SQLCHAR *ServerName,
    SQLSMALLINT NameLength1,
    SQLCHAR *UserName,
    SQLSMALLINT NameLength2,
    SQLCHAR *Authentication,
    SQLSMALLINT NameLength3)
    {
    _kernel_swi_regs regs;

/* Wait for ready status */

    if (ODBCLibWait(ODBC_STATE_READY))
        {
        return SQL_ERROR;
        }

/* Store parameters */

    regs.r[0] = SQL_Connect;
    regs.r[1] = (int)ConnectionHandle;
    regs.r[2] = (int)ServerName;
    regs.r[3] = (int)NameLength1;
    regs.r[4] = (int)UserName;
    regs.r[5] = (int)NameLength2;
    regs.r[6] = (int)Authentication;
    regs.r[7] = (int)NameLength3;

    _kernel_swi(SQL_ConnectionP,&regs,&regs);

/* Wait for completion */

    if (ODBCLibWait(ODBC_STATE_COMPLETE))
        {
        return SQL_ERROR;
        }

/* Get results */

    regs.r[0] = SQL_Connect;
    regs.r[1] = (int)ConnectionHandle;
    regs.r[2] = (int)ServerName;
    regs.r[3] = (int)NameLength1;
    regs.r[4] = (int)UserName;
    regs.r[5] = (int)NameLength2;
    regs.r[6] = (int)Authentication;
    regs.r[7] = (int)NameLength3;

    _kernel_swi(SQL_Connection,&regs,&regs);

    return (SQLRETURN)ODBCLibFinished();
    }


SQLRETURN  SQLDisconnect (
    SQLHDBC ConnectionHandle)
    {
    _kernel_swi_regs regs;

/* Wait for ready status */

    if (ODBCLibWait(ODBC_STATE_READY))
        {
        return SQL_ERROR;
        }

/* Store parameters */

    regs.r[0] = SQL_Disconnect;
    regs.r[1] = (int)ConnectionHandle;

    _kernel_swi(SQL_ConnectionP,&regs,&regs);

/* Wait for completion */

    if (ODBCLibWait(ODBC_STATE_COMPLETE))
        {
        return SQL_ERROR;
        }

/* Get results */

    regs.r[0] = SQL_Disconnect;
    regs.r[1] = (int)ConnectionHandle;

    _kernel_swi(SQL_Connection,&regs,&regs);

    return (SQLRETURN)ODBCLibFinished();
    }
