/*
**    Name: BindParamt.c
**
**    Date: Sat Jan 19 20:26:54 2002
**
*/

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

SQLRETURN SQLBindParameter (
    SQLHSTMT hstmt,
    SQLUSMALLINT ipar,
    SQLSMALLINT fParamType,
    SQLSMALLINT fCType,
    SQLSMALLINT fSqlType,
    SQLUINTEGER cbColDef,
    SQLSMALLINT ibScale,
    SQLPOINTER rgbValue,
    SQLINTEGER cbValueMax,
    SQLINTEGER * pcbValue)
    {
    _kernel_swi_regs regs;

    int block[4];

/* Wait for ready status */

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

/* Store parameters */

    regs.r[0] = SQL_BindParameter;
    regs.r[1] = (int)hstmt;
    regs.r[2] = (int)ipar;
    regs.r[3] = (int)fParamType;
    regs.r[4] = (int)fCType;
    regs.r[5] = (int)fSqlType;
    regs.r[6] = (int)cbColDef;

    block[0] = (int)ibScale;
    block[1] = (int)rgbValue;
    block[2] = (int)cbValueMax;
    block[3] = (int)pcbValue;

    regs.r[7] = (int)block;

    _kernel_swi(SQL_PreparationP,&regs,&regs);

/* Wait for completion */

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

/* Get results */

    regs.r[0] = SQL_BindParameter;
    regs.r[1] = (int)hstmt;
    regs.r[2] = (int)ipar;
    regs.r[3] = (int)fParamType;
    regs.r[4] = (int)fCType;
    regs.r[5] = (int)fSqlType;
    regs.r[6] = (int)cbColDef;

    block[0] = (int)ibScale;
    block[1] = (int)rgbValue;
    block[2] = (int)cbValueMax;
    block[3] = (int)pcbValue;

    regs.r[7] = (int)block;

    _kernel_swi(SQL_Preparation,&regs,&regs);

    return (SQLRETURN)ODBCLibFinished();
    }

