/*
**    Name: GetDescRec.c
**
**    Date: Sat Jan 19 21:01:08 2002
**
*/

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

SQLRETURN  SQLGetDescRec(
    SQLHDESC DescriptorHandle,
    SQLSMALLINT RecNumber,
    SQLCHAR *Name,
    SQLSMALLINT BufferLength,
    SQLSMALLINT *StringLength,
    SQLSMALLINT *Type,
    SQLSMALLINT *SubType,
    SQLINTEGER *Length,
    SQLSMALLINT *Precision,
    SQLSMALLINT *Scale,
    SQLSMALLINT *Nullable)
    {
    _kernel_swi_regs regs;

    int block[5];

/* Wait for ready status */

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

/* Store parameters */

    regs.r[0] = SQL_GetDescRec;
    regs.r[1] = (int)DescriptorHandle;
    regs.r[2] = (int)RecNumber;
    regs.r[3] = (int)Name;
    regs.r[4] = (int)BufferLength;
    regs.r[5] = (int)StringLength;
    regs.r[6] = (int)Type;
    block[0] = (int)SubType;
    block[1] = (int)Length;
    block[2] = (int)Precision;
    block[3] = (int)Scale;
    block[4] = (int)Nullable;

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

    _kernel_swi(SQL_DescriptorP,&regs,&regs);

/* Wait for completion */

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

/* Get results */

    regs.r[0] = SQL_GetDescRec;
    regs.r[1] = (int)DescriptorHandle;
    regs.r[2] = (int)RecNumber;
    regs.r[3] = (int)Name;
    regs.r[4] = (int)BufferLength;
    regs.r[5] = (int)StringLength;
    regs.r[6] = (int)Type;
    block[0] = (int)SubType;
    block[1] = (int)Length;
    block[2] = (int)Precision;
    block[3] = (int)Scale;
    block[4] = (int)Nullable;

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

    _kernel_swi(SQL_Descriptor,&regs,&regs);

    return (SQLRETURN)ODBCLibFinished();
    }
