/*
**    Name: swi_handler.c
**
**    Date: Thu Jan 17 12:27:28 2002
**
*/

#include <stdlib.h>
#include <string.h>
#include "ODBC.h"
#include "isql.h"
#include "isqlext.h"
#include "rmamem.h"

_kernel_oserror *swi_handler(int swi_no,int *r,void *pw)
    {
    int *block;

    pw = pw;

    if (rmamem_status == RMAMEM_UNITIALISED)
        {
        memset(odbcquerytype.boundparameters,0,sizeof(odbcquerytype.boundparameters));
        strcpy(rmamem_name,"ODBCManager");
        rmamem_init(RMAMEM_UNITIALISED);
        }

    switch (swi_no)
        {
        case SQL_ConnectionP - SQL_Base:

             switch (r[0])
                 {
                 case SQL_AllocConnect:
                     initialise_parameters(SQL_Connection,SQL_AllocConnect);
                     store_parameter(r[1],ODBC_VALUE,0); /* SQLHENV   */
                     store_parameter(r[2],
                                     ODBC_REFERENCE,
                                     sizeof(SQLHDBC *)); /* SQLHDBC * */
                     break;

                 case SQL_AllocEnv:
                     initialise_parameters(SQL_Connection,SQL_AllocEnv);
                     store_parameter(r[1],
                                     ODBC_REFERENCE,
                                     sizeof(SQLHENV *)); /* SQLHENV *  */
                     break;

                 case SQL_AllocHandle:
                     initialise_parameters(SQL_Connection,SQL_AllocHandle);
                     store_parameter(r[1],ODBC_VALUE,0);   /* SQLSMALLINT */
                     store_parameter(r[2],ODBC_VALUE,0);   /* SQLHANDLE   */
                     store_parameter(r[3],
                                     ODBC_REFERENCE,
                                     sizeof(SQLHANDLE *)); /* SQLHANDLE * */
                     break;

                 case SQL_AllocStmt:
                     initialise_parameters(SQL_Connection,SQL_AllocStmt);
                     store_parameter(r[1],ODBC_VALUE,0);  /* SQLHDBC    */
                     store_parameter(r[2],
                                     ODBC_REFERENCE,
                                     sizeof(SQLHSTMT *)); /* SQLHSTMT * */
                     break;

                 case SQL_Connect:
                     initialise_parameters(SQL_Connection,SQL_Connect);
                     store_parameter(r[1],ODBC_VALUE,0);        /* SQLHDBC     */
                     store_parameter(r[2],ODBC_REFERENCE,r[3]); /* SQLCHAR *   */
                     store_parameter(r[3],ODBC_VALUE,0);        /* SQLSMALLINT */
                     store_parameter(r[4],ODBC_REFERENCE,r[5]); /* SQLCHAR *   */
                     store_parameter(r[5],ODBC_VALUE,0);        /* SQLSMALLINT */
                     store_parameter(r[6],ODBC_REFERENCE,r[7]); /* SQLCHAR *   */
                     store_parameter(r[7],ODBC_VALUE,0);        /* SQLSMALLINT */
                     break;

                 case SQL_DriverConnect:

                     block = (int *)r[7];

                     initialise_parameters(SQL_Connection,SQL_DriverConnect);
                     store_parameter(r[1],ODBC_VALUE,0);        /* SQLHDBC      */
                     store_parameter(r[2],ODBC_VALUE,0);        /* SQLHWND      */
                     store_parameter(r[3],ODBC_REFERENCE,r[4]); /* SQLCHAR *    */
                     store_parameter(r[4],ODBC_VALUE,0);        /* SQLSMALLINT  */
                     store_parameter(r[5],ODBC_REFERENCE,r[6]); /* SQLCHAR *    */
                     store_parameter(r[6],ODBC_VALUE,0);        /* SQLSMALLINT  */
                     store_parameter(block[0],
                                     ODBC_REFERENCE,
                                     sizeof(SQLSMALLINT));      /* SQLSMALLINT **/
                     store_parameter(block[1],ODBC_VALUE,0);    /* SQLUSMALLINT */
                     break;

                 case SQL_BrowseConnect:
                     initialise_parameters(SQL_Connection,SQL_BrowseConnect);
                     store_parameter(r[1],ODBC_VALUE,0);        /* SQLHDBC       */
                     store_parameter(r[2],ODBC_REFERENCE,r[3]); /* SQLCHAR *     */
                     store_parameter(r[3],ODBC_VALUE,0);        /* SQLSMALLINT   */
                     store_parameter(r[4],ODBC_REFERENCE,r[5]); /* SQLCHAR *     */
                     store_parameter(r[5],ODBC_VALUE,0);        /* SQLSMALLINT   */
                     store_parameter(r[6],
                                     ODBC_REFERENCE,
                                     sizeof(SQLSMALLINT)); /* SQLSMALLINT * */

                     break;

                 case SQL_FreeConnect:
                     initialise_parameters(SQL_Connection,SQL_FreeConnect);
                     store_parameter(r[1],ODBC_VALUE,0); /* SQLHDBC */
                     break;

                 case SQL_FreeEnv:
                     initialise_parameters(SQL_Connection,SQL_FreeEnv);
                     store_parameter(r[1],ODBC_VALUE,0); /* SQLHENV */
                     break;

                 case SQL_FreeHandle:
                     initialise_parameters(SQL_Connection,SQL_FreeHandle);
                     store_parameter(r[1],ODBC_VALUE,0); /* SQLSMALLINT */
                     store_parameter(r[2],ODBC_VALUE,0); /* SQLHANDLE   */
                     break;

                 case SQL_FreeStmt:
                     initialise_parameters(SQL_Connection,SQL_FreeStmt);
                     store_parameter(r[1],ODBC_VALUE,0); /* SQLHSTMT     */
                     store_parameter(r[2],ODBC_VALUE,0); /* SQLUSMALLINT */
                     break;

                 case SQL_Disconnect:
                     initialise_parameters(SQL_Connection,SQL_Disconnect);
                     store_parameter(r[1],ODBC_VALUE,0); /* SQLHDBC */
                     break;
                 }

             break;

        case SQL_DriverInfoP - SQL_Base:

             switch (r[0])
                 {
                 case SQL_DataSources:

                     block = (int *)r[7];

                     initialise_parameters(SQL_DriverInfo,SQL_DataSources);
                     store_parameter(r[1],ODBC_VALUE,0);        /* SQLHENV       */
                     store_parameter(r[2],ODBC_VALUE,0);        /* SQLUSMALLINT  */
                     store_parameter(r[3],
                                     ODBC_REFERENCE,
                                     r[4]);                /* SQLCHAR *     */
                     store_parameter(r[4],ODBC_VALUE,0);        /* SQLSMALLINT   */
                     store_parameter(r[5],
                                     ODBC_REFERENCE,
                                     sizeof(SQLSMALLINT)); /* SQLSMALLINT * */
                     store_parameter(r[6],
                                     ODBC_REFERENCE,
                                     block[0]);            /* SQLCHAR *     */

                     store_parameter(block[0],ODBC_VALUE,0);    /* SQLSMALLINT   */
                     store_parameter(block[1],
                                     ODBC_REFERENCE,
                                     sizeof(SQLSMALLINT)); /* SQLSMALLINT * */

                     break;

                 case SQL_Drivers:

                     block = (int *)r[7];

                     initialise_parameters(SQL_DriverInfo,SQL_Drivers);

                     store_parameter(r[1],ODBC_VALUE,0);        /* SQLHENV       */
                     store_parameter(r[2],ODBC_VALUE,0);        /* SQLUSMALLINT  */
                     store_parameter(r[3],
                                     ODBC_REFERENCE,
                                     r[4]);                /* SQLCHAR *     */
                     store_parameter(r[4],ODBC_VALUE,0);        /* SQLSMALLINT   */
                     store_parameter(r[5],
                                     ODBC_REFERENCE,
                                     sizeof(SQLSMALLINT)); /* SQLSMALLINT * */
                     store_parameter(r[6],
                                     ODBC_REFERENCE,
                                     block[0]);            /* SQLCHAR *     */

                     store_parameter(block[0],ODBC_VALUE,0);    /* SQLSMALLINT   */
                     store_parameter(block[1],
                                     ODBC_REFERENCE,
                                     sizeof(SQLSMALLINT)); /* SQLSMALLINT * */

                     break;

                 case SQL_GetFunctions:
                     initialise_parameters(SQL_DriverInfo,SQL_GetFunctions);
                     store_parameter(r[1],ODBC_VALUE,0);         /* SQLHDBC        */
                     store_parameter(r[2],ODBC_VALUE,0);         /* SQLUSMALLINT   */
                     store_parameter(r[3],
                                     ODBC_REFERENCE,
                                     sizeof(SQLUSMALLINT)); /* SQLUSMALLINT * */
                     break;

                 case SQL_GetInfo:
                     initialise_parameters(SQL_DriverInfo,SQL_GetInfo);
                     store_parameter(r[1],ODBC_VALUE,0);        /* SQLHDBC       */
                     store_parameter(r[2],ODBC_VALUE,0);        /* SQLUSMALLINT  */
                     store_parameter(r[3],ODBC_REFERENCE,r[4]); /* SQLPOINTER    */
                     store_parameter(r[4],ODBC_VALUE,0);        /* SQLSMALLINT   */
                     store_parameter(r[5],
                                     ODBC_REFERENCE,
                                     sizeof(SQLSMALLINT)); /* SQLSMALLINT * */

                     break;

                 case SQL_GetTypeInfo:
                     initialise_parameters(SQL_DriverInfo,SQL_GetTypeInfo);
                     store_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT    */
                     store_parameter(r[2],ODBC_VALUE,0);        /* SQLSMALLINT */
                     break;
                 }
             break;

         case SQL_DriverAttributesP - SQL_Base:

             switch (r[0])
                 {
                 case SQL_GetConnectAttr:
                     initialise_parameters(SQL_DriverAttributes,SQL_GetConnectAttr);
                     store_parameter(r[1],ODBC_VALUE,0);        /* SQLHDBC     */
                     store_parameter(r[2],ODBC_VALUE,0);        /* SQLINTEGER  */
                     store_parameter(r[3],ODBC_REFERENCE,r[4]); /* SQLPOINTER  */
                     store_parameter(r[4],ODBC_VALUE,0);        /* SQLINTEGER  */
                     store_parameter(r[5],
                                     ODBC_REFERENCE,
                                     sizeof(SQLINTEGER)); /* SQLINTEGER * */

                     break;

                 case SQL_SetConnectAttr:
                     initialise_parameters(SQL_DriverAttributes,SQL_SetConnectAttr);
                     store_parameter(r[1],ODBC_VALUE,0);        /* SQLHDBC    */
                     store_parameter(r[2],ODBC_VALUE,0);        /* SQLINTEGER */
                     store_parameter(r[3],ODBC_REFERENCE,r[4]); /* SQLPOINTER */
                     store_parameter(r[4],ODBC_VALUE,0);        /* SQLINTEGER */
                     break;

                 case SQL_GetEnvAttr:
                     initialise_parameters(SQL_DriverAttributes,SQL_GetEnvAttr);
                     store_parameter(r[1],ODBC_VALUE,0);        /* SQLHENV     */
                     store_parameter(r[2],ODBC_VALUE,0);        /* SQLINTEGER  */
                     store_parameter(r[3],ODBC_REFERENCE,r[4]); /* SQLPOINTER  */
                     store_parameter(r[4],ODBC_VALUE,0);        /* SQLINTEGER  */
                     store_parameter(r[5],
                                     ODBC_REFERENCE,
                                     sizeof(SQLINTEGER)); /* SQLINTEGER * */

                     break;

                 case SQL_SetEnvAttr:
                     initialise_parameters(SQL_DriverAttributes,SQL_SetEnvAttr);
                     store_parameter(r[1],ODBC_VALUE,0);        /* SQLHENV     */
                     store_parameter(r[2],ODBC_VALUE,0);        /* SQLINTEGER  */
                     store_parameter(r[3],ODBC_REFERENCE,r[4]); /* SQLPOINTER  */
                     store_parameter(r[4],ODBC_VALUE,0);        /* SQLINTEGER  */

                     break;

                 case SQL_GetStmtAttr:
                     initialise_parameters(SQL_DriverAttributes,SQL_GetStmtAttr);
                     store_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                     store_parameter(r[2],ODBC_VALUE,0);        /* SQLINTEGER   */
                     store_parameter(r[3],ODBC_REFERENCE,r[4]); /* SQLPOINTER   */
                     store_parameter(r[4],ODBC_VALUE,0);        /* SQLINTEGER   */
                     store_parameter(r[5],
                                     ODBC_REFERENCE,
                                     sizeof(SQLINTEGER));  /* SQLINTEGER * */

                     break;

                 case SQL_SetStmtAttr:
                     initialise_parameters(SQL_DriverAttributes,SQL_SetStmtAttr);
                     store_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT   */
                     store_parameter(r[2],ODBC_VALUE,0);        /* SQLINTEGER */
                     store_parameter(r[3],ODBC_REFERENCE,r[4]); /* SQLPOINTER */
                     store_parameter(r[4],ODBC_VALUE,0);        /* SQLINTEGER */
                     break;

                 case SQL_GetConnectOption:
                     initialise_parameters(SQL_DriverAttributes,SQL_GetConnectOption);
                     store_parameter(r[1],ODBC_VALUE,0);        /* SQLHDBC      */
                     store_parameter(r[2],ODBC_VALUE,0);        /* SQLUSMALLINT */
                     store_parameter(r[3],
                                     ODBC_REFERENCE,
                                     sizeof(SQLINTEGER));  /* SQLPOINTER   */
                     break;

                 case SQL_SetConnectOption:
                     initialise_parameters(SQL_DriverAttributes,SQL_SetConnectOption);
                     store_parameter(r[1],ODBC_VALUE,0);        /* SQLHDBC       */
                     store_parameter(r[2],ODBC_VALUE,0);        /* SQLUSMALLINT  */
                     store_parameter(r[3],ODBC_VALUE,0);        /* SQLUINTEGER   */
                     break;

                 case SQL_GetStmtOption:
                     initialise_parameters(SQL_DriverAttributes,SQL_GetStmtOption);
                     store_parameter(r[1],ODBC_VALUE,0);       /* SQLHSTMT     */
                     store_parameter(r[2],ODBC_VALUE,0);       /* SQLUSMALLINT */
                     store_parameter(r[3],
                                     ODBC_REFERENCE,
                                     sizeof(SQLINTEGER)); /* SQLPOINTER   */
                     break;

                 case SQL_SetStmtOption:
                     initialise_parameters(SQL_DriverAttributes,SQL_SetStmtOption);
                     store_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                     store_parameter(r[2],ODBC_VALUE,0);        /* SQLUSMALLINT */
                     store_parameter(r[3],ODBC_VALUE,0);        /* SQLUINTEGER  */
                     break;
                 }
             break;

         case SQL_DescriptorP - SQL_Base:

             switch (r[0])
                 {
                 case SQL_GetDescField:
                     initialise_parameters(SQL_Descriptor,SQL_GetDescField);
                     store_parameter(r[1],ODBC_VALUE,0);        /* SQLHDESC     */
                     store_parameter(r[2],ODBC_VALUE,0);        /* SQLSMALLINT  */
                     store_parameter(r[3],ODBC_VALUE,0);        /* SQLSMALLINT  */
                     store_parameter(r[4],ODBC_REFERENCE,r[5]); /* SQLPOINTER   */
                     store_parameter(r[5],ODBC_VALUE,0);        /* SQLINTEGER   */
                     store_parameter(r[6],
                                     ODBC_REFERENCE,
                                     sizeof(SQLINTEGER));  /* SQLINTEGER * */

                     break;

                 case SQL_SetDescField:
                     initialise_parameters(SQL_Descriptor,SQL_SetDescField);
                     store_parameter(r[1],ODBC_VALUE,0);        /* SQLHDESC    */
                     store_parameter(r[2],ODBC_VALUE,0);        /* SQLSMALLINT */
                     store_parameter(r[3],ODBC_VALUE,0);        /* SQLSMALLINT */
                     store_parameter(r[4],ODBC_REFERENCE,r[5]); /* SQLPOINTER  */
                     store_parameter(r[5],ODBC_VALUE,0);        /* SQLINTEGER  */
                     break;

                 case SQL_GetDescRec:

                     block = (int *)r[7];

                     initialise_parameters(SQL_Descriptor,SQL_GetDescRec);
                     store_parameter(r[1],ODBC_VALUE,0);        /* SQLHDESC     */
                     store_parameter(r[2],ODBC_VALUE,0);        /* SQLSMALLINT  */
                     store_parameter(r[3],ODBC_REFERENCE,r[4]); /* SQLCHAR *    */
                     store_parameter(r[4],ODBC_VALUE,0);        /* SQLSMALLINT  */
                     store_parameter(r[5],
                                     ODBC_REFERENCE,
                                     sizeof(SQLSMALLINT)); /* SQLSMALLINT **/
                     store_parameter(r[6],
                                     ODBC_REFERENCE,
                                     sizeof(SQLSMALLINT)); /* SQLSMALLINT **/
                     store_parameter(block[0],
                                     ODBC_REFERENCE,
                                     sizeof(SQLINTEGER));  /* SQLINTEGER * */
                     store_parameter(block[1],
                                     ODBC_REFERENCE,
                                     sizeof(SQLSMALLINT)); /* SQLSMALLINT **/
                     store_parameter(block[2],
                                     ODBC_REFERENCE,
                                     sizeof(SQLSMALLINT)); /* SQLSMALLINT **/
                     store_parameter(block[3],
                                     ODBC_REFERENCE,
                                     sizeof(SQLSMALLINT)); /* SQLSMALLINT **/
                     store_parameter(block[4],
                                     ODBC_REFERENCE,
                                     sizeof(SQLSMALLINT)); /* SQLSMALLINT **/

                     break;

                 case SQL_SetDescRec:

                     block = (int *)r[7];

                     initialise_parameters(SQL_Descriptor,SQL_SetDescRec);
                     store_parameter(r[1],ODBC_VALUE,0);        /* SQLHDESC     */
                     store_parameter(r[2],ODBC_VALUE,0);        /* SQLSMALLINT  */
                     store_parameter(r[3],ODBC_VALUE,0);        /* SQLSMALLINT  */
                     store_parameter(r[4],ODBC_VALUE,0);        /* SQLSMALLINT  */
                     store_parameter(r[5],ODBC_VALUE,0);        /* SQLINTEGER   */
                     store_parameter(r[6],ODBC_VALUE,0);        /* SQLSMALLINT  */
                     store_parameter(block[0],ODBC_VALUE,0);    /* SQLSMALLINT  */
                     store_parameter(block[1],
                                     ODBC_REFERENCE,
                                     r[5]);                /* SQLPOINTER   */
                     store_parameter(block[2],
                                     ODBC_REFERENCE,
                                     sizeof(SQLINTEGER));  /* SQLINTEGER * */
                     store_parameter(block[3],
                                     ODBC_REFERENCE,
                                     sizeof(SQLINTEGER));  /* SQLINTEGER * */

                     break;
                 }
             break;

         case SQL_PreparationP - SQL_Base:

             switch (r[0])
                 {
                 case SQL_Prepare:
                     free_bound_parameters(r[1]);
                     initialise_parameters(SQL_Preparation,SQL_Prepare);
                     store_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT   */
                     store_parameter(r[2],ODBC_REFERENCE,r[3]); /* SQLCHAR *  */
                     store_parameter(r[3],ODBC_VALUE,0);        /* SQLINTEGER */
                     break;

                 case SQL_BindParameter:

                     block = (int *)r[7];

                     initialise_parameters(SQL_Preparation,SQL_BindParameter);
                     store_parameter(r[1],ODBC_VALUE,0);   /* SQLHSTMT     */
                     store_parameter(r[2],ODBC_VALUE,0);   /* SQLUSMALLINT */
                     store_parameter(r[3],ODBC_VALUE,0);   /* SQLSMALLINT  */
                     store_parameter(r[4],ODBC_VALUE,0);   /* SQLSMALLINT  */
                     store_parameter(r[5],ODBC_VALUE,0);   /* SQLSMALLINT  */
                     store_parameter(r[6],ODBC_VALUE,0);   /* SQLUINTEGER  */
                     store_parameter(block[0],
                                     ODBC_VALUE,
                                     0);                   /* SQLSMALLINT  */
                     store_bound_parameter(r[1],
                                     block[1],
                                     data_size(r[4],
                                               r[6]));     /* SQLPOINTER   */
                     store_parameter(block[2],
                                     ODBC_VALUE,
                                     0);                   /* SQLINTEGER   */
                     store_bound_parameter(r[1],
                                     block[3],
                                     sizeof(SQLINTEGER));  /* SQLINTEGER * */

                     break;

                 case SQL_ParamOptions:
                     initialise_parameters(SQL_Preparation,SQL_ParamOptions);
                     store_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT      */
                     store_parameter(r[2],ODBC_VALUE,0);        /* SQLUINTEGER   */
                     store_parameter(r[3],
                                     ODBC_REFERENCE,
                                     sizeof(SQLUINTEGER)); /* SQLUINTEGER * */

                     break;

                 case SQL_GetCursorName:
                     initialise_parameters(SQL_Preparation,SQL_GetCursorName);
                     store_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT      */
                     store_parameter(r[2],ODBC_REFERENCE,r[3]); /* SQLCHAR *     */
                     store_parameter(r[3],ODBC_VALUE,0);        /* SQLSMALLINT   */
                     store_parameter(r[4],
                                     ODBC_REFERENCE,
                                     sizeof(SQLSMALLINT)); /* SQLSMALLINT * */

                     break;

                 case SQL_SetCursorName:
                     initialise_parameters(SQL_Preparation,SQL_SetCursorName);
                     store_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT    */
                     store_parameter(r[2],ODBC_REFERENCE,r[3]); /* SQLCHAR *   */
                     store_parameter(r[3],ODBC_VALUE,0);        /* SQLSMALLINT */

                     break;

                 case SQL_SetScrollOptions:
                     initialise_parameters(SQL_Preparation,SQL_SetScrollOptions);
                     store_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                     store_parameter(r[2],ODBC_VALUE,0);        /* SQLUSMALLINT */
                     store_parameter(r[3],ODBC_VALUE,0);        /* SQLINTEGER   */
                     store_parameter(r[4],ODBC_VALUE,0);        /* SQLUSMALLINT */

                     break;

                 case SQL_BindParam:

                     block = (int *)r[7];

                     initialise_parameters(SQL_Preparation,SQL_BindParam);
                     store_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                     store_parameter(r[2],ODBC_VALUE,0);        /* SQLUSMALLINT */
                     store_parameter(r[3],ODBC_VALUE,0);        /* SQLSMALLINT  */
                     store_parameter(r[4],ODBC_VALUE,0);        /* SQLSMALLINT  */
                     store_parameter(r[5],ODBC_VALUE,0);        /* SQLUINTEGER  */
                     store_parameter(r[6],ODBC_VALUE,0);        /* SQLSMALLINT  */
                     store_bound_parameter(r[1],
                                     block[0],
                                     data_size(r[3],
                                               r[5]));          /* SQLPOINTER   */
                     store_bound_parameter(r[1],
                                     block[1],
                                     sizeof(SQLINTEGER));       /* SQLINTEGER * */
                     break;
                 }
             break;

         case SQL_RequestP - SQL_Base:

             switch (r[0])
                 {
                 case SQL_Execute:
                     initialise_parameters(SQL_Request,SQL_Execute);
                     store_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                     break;

                 case SQL_ExecDirect:
                     initialise_parameters(SQL_Request,SQL_ExecDirect);
                     store_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                     store_parameter(r[2],
                                     ODBC_REFERENCE,
                                     r[3]);                /* SQLCHAR *    */
                     store_parameter(r[3],ODBC_VALUE,0);        /* SQLINTEGER   */
                     break;

                 case SQL_NativeSql:
                     initialise_parameters(SQL_Request,SQL_NativeSql);
                     store_parameter(r[1],ODBC_VALUE,0);        /* SQLHDBC     */
                     store_parameter(r[2],
                                     ODBC_REFERENCE,
                                     r[3]);                /* SQLCHAR *   */
                     store_parameter(r[3],ODBC_VALUE,0);        /* SQLINTEGER  */
                     store_parameter(r[4],
                                     ODBC_REFERENCE,
                                     r[5]);                /* SQLCHAR *   */
                     store_parameter(r[5],ODBC_VALUE,0);        /* SQLINTEGER  */
                     store_parameter(r[6],
                                     ODBC_REFERENCE,
                                     sizeof(SQLINTEGER));  /* SQLINTEGER **/
                     break;

                 case SQL_DescribeParam:
                     initialise_parameters(SQL_Request,SQL_DescribeParam);
                     store_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                     store_parameter(r[2],ODBC_VALUE,0);        /* SQLUSMALLINT */
                     store_parameter(r[3],
                                     ODBC_REFERENCE,
                                     sizeof(SQLSMALLINT)); /* SQLSMALLINT **/
                     store_parameter(r[4],
                                     ODBC_REFERENCE,
                                     sizeof(SQLUINTEGER)); /* SQLUINTEGER **/
                     store_parameter(r[5],
                                     ODBC_REFERENCE,
                                     sizeof(SQLSMALLINT)); /* SQLSMALLINT **/
                     store_parameter(r[6],
                                     ODBC_REFERENCE,
                                     sizeof(SQLSMALLINT)); /* SQLSMALLINT **/

                     break;

                 case SQL_NumParams:
                     initialise_parameters(SQL_Request,SQL_NumParams);
                     store_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                     store_parameter(r[2],
                                     ODBC_REFERENCE,
                                     sizeof(SQLSMALLINT)); /* SQLSMALLINT **/
                     break;

                 case SQL_ParamData:
                     initialise_parameters(SQL_Request,SQL_ParamData);
                     store_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT   */
                     store_parameter(r[2],
                                     ODBC_REFERENCE,
                                     sizeof(SQLPOINTER));  /* SQLPOINTER */
                     break;

                 case SQL_PutData:
                     initialise_parameters(SQL_Request,SQL_PutData);
                     store_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                     store_parameter(r[2],
                                     ODBC_REFERENCE,
                                     r[3]);                /* SQLPOINTER   */
                     store_parameter(r[3],ODBC_VALUE,0);        /* SQLINTEGER   */
                     break;
                 }

             break;

         case SQL_ResultP - SQL_Base:

             switch (r[0])
                 {
                 case SQL_BindCol:
                     initialise_parameters(SQL_Result,SQL_BindCol);
                     store_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                     store_parameter(r[2],ODBC_VALUE,0);        /* SQLUSMALLINT */
                     store_parameter(r[3],ODBC_VALUE,0);        /* SQLSMALLINT  */
                     store_bound_parameter(r[1],
                                           r[4],
                                           r[5]);                /* SQLPOINTER   */
                     store_parameter(r[5],ODBC_VALUE,0);        /* SQLINTEGER   */
                     store_bound_parameter(r[1],
                                     r[6],
                                     sizeof(SQLINTEGER));  /* SQLINTEGER * */
                     break;

                 case SQL_BulkOperations:
                     initialise_parameters(SQL_Result,SQL_BulkOperations);
                     store_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                     store_parameter(r[2],ODBC_VALUE,0);        /* SQLSMALLINT  */
                     break;

                 case SQL_Fetch:
                     initialise_parameters(SQL_Result,SQL_Fetch);
                     store_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                     break;

                 case SQL_FetchScroll:
                     initialise_parameters(SQL_Result,SQL_FetchScroll);
                     store_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                     store_parameter(r[2],ODBC_VALUE,0);        /* SQLSMALLINT  */
                     store_parameter(r[3],ODBC_VALUE,0);        /* SQLINTEGER   */
                     break;

                 case SQL_ExtendedFetch:
                     initialise_parameters(SQL_Result,SQL_ExtendedFetch);
                     store_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT      */
                     store_parameter(r[2],ODBC_VALUE,0);        /* SQLUSMALLINT  */
                     store_parameter(r[3],ODBC_VALUE,0);        /* SQLINTEGER    */
                     store_parameter(r[4],
                                     ODBC_REFERENCE,
                                     sizeof(SQLUINTEGER)); /* SQLUINTEGER **/
                     store_parameter(r[5],
                                     ODBC_REFERENCE,
                                     sizeof(SQLUSMALLINT));/* SQLUSMALLINT **/

                     break;

                 case SQL_GetData:
                     initialise_parameters(SQL_Result,SQL_GetData);
                     store_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                     store_parameter(r[2],ODBC_VALUE,0);        /* SQLUSMALLINT  */
                     store_parameter(r[3],ODBC_VALUE,0);        /* SQLSMALLINT  */
                     store_parameter(r[4],
                                     ODBC_REFERENCE,
                                     data_size(r[3],
                                               r[5]));          /* SQLPOINTER   */
                     store_parameter(r[5],ODBC_VALUE,0);        /* SQLINTEGER   */
                     store_parameter(r[6],
                                     ODBC_REFERENCE,
                                     sizeof(SQLINTEGER));  /* SQLINTEGER * */
                     break;

                 case SQL_SetPos:
                     initialise_parameters(SQL_Result,SQL_SetPos);
                     store_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                     store_parameter(r[2],ODBC_VALUE,0);        /* SQLUSMALLINT */
                     store_parameter(r[3],ODBC_VALUE,0);        /* SQLUSMALLINT */
                     store_parameter(r[4],ODBC_VALUE,0);        /* SQLUSMALLINT */
                     break;
                 }

             break;

        case SQL_ResultInfoP - SQL_Base:

            switch (r[0])
                {
                case SQL_ColAttribute:
                    initialise_parameters(SQL_ResultInfo,SQL_ColAttribute);
                    store_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                    store_parameter(r[2],ODBC_VALUE,0);        /* SQLUSMALLINT */
                    store_parameter(r[3],ODBC_VALUE,0);        /* SQLUSMALLINT */
                    store_parameter(r[4],
                                    ODBC_REFERENCE,
                                    r[5]);                /* SQLPOINTER   */
                    store_parameter(r[5],ODBC_VALUE,0);        /* SQLSMALLINT  */
                    store_parameter(r[6],
                                    ODBC_REFERENCE,
                                    sizeof(SQLSMALLINT)); /* SQLSMALLINT **/
                    store_parameter(r[7],
                                    ODBC_REFERENCE,
                                    sizeof(double));      /* SQLPOINTER   */
                    break;

                case SQL_ColAttributes:
                    initialise_parameters(SQL_ResultInfo,SQL_ColAttributes);
                    store_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                    store_parameter(r[2],ODBC_VALUE,0);        /* SQLUSMALLINT */
                    store_parameter(r[3],ODBC_VALUE,0);        /* SQLUSMALLINT */
                    store_parameter(r[4],
                                    ODBC_REFERENCE,
                                    r[5]);                /* SQLPOINTER   */
                    store_parameter(r[5],ODBC_VALUE,0);        /* SQLSMALLINT  */
                    store_parameter(r[6],
                                    ODBC_REFERENCE,
                                    sizeof(SQLSMALLINT)); /* SQLSMALLINT **/
                    store_parameter(r[7],
                                    ODBC_REFERENCE,
                                    sizeof(SQLINTEGER));  /* SQLINTEGER * */
                    break;

                case SQL_DescribeCol:

                    block = (int *)r[7];

                    initialise_parameters(SQL_ResultInfo,SQL_DescribeCol);
                    store_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                    store_parameter(r[2],ODBC_VALUE,0);        /* SQLUSMALLINT */
                    store_parameter(r[3],
                                    ODBC_REFERENCE,
                                    r[4]);                /* SQLCHAR *    */
                    store_parameter(r[4],ODBC_VALUE,0);        /* SQLSMALLINT  */
                    store_parameter(r[5],
                                    ODBC_REFERENCE,
                                    sizeof(SQLSMALLINT)); /* SQLSMALLINT **/
                    store_parameter(r[6],
                                    ODBC_REFERENCE,
                                    sizeof(SQLSMALLINT)); /* SQLSMALLINT **/
                    store_parameter(block[0],
                                    ODBC_REFERENCE,
                                    sizeof(SQLUINTEGER)); /* SQLUINTEGER **/
                    store_parameter(block[1],
                                    ODBC_REFERENCE,
                                    sizeof(SQLSMALLINT)); /* SQLSMALLINT **/
                    store_parameter(block[2],
                                    ODBC_REFERENCE,
                                    sizeof(SQLSMALLINT)); /* SQLSMALLINT **/
                    break;

                case SQL_NumResultCols:
                    initialise_parameters(SQL_ResultInfo,SQL_NumResultCols);
                    store_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                    store_parameter(r[2],
                                    ODBC_REFERENCE,
                                    sizeof(SQLSMALLINT)); /* SQLSMALLINT **/
                    break;

                case SQL_RowCount:
                    initialise_parameters(SQL_ResultInfo,SQL_RowCount);
                    store_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                    store_parameter(r[2],
                                    ODBC_REFERENCE,
                                    sizeof(SQLINTEGER));  /* SQLINTEGER **/
                    break;

                case SQL_MoreResults:
                    initialise_parameters(SQL_ResultInfo,SQL_MoreResults);
                    store_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                    break;

                case SQL_GetDiagField:
                    initialise_parameters(SQL_ResultInfo,SQL_GetDiagField);
                    store_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                    store_parameter(r[2],ODBC_VALUE,0);        /* SQLHANDLE    */
                    store_parameter(r[3],ODBC_VALUE,0);        /* SQLSMALLINT  */
                    store_parameter(r[4],ODBC_VALUE,0);        /* SQLSMALLINT  */
                    store_parameter(r[5],
                                    ODBC_REFERENCE,
                                    r[6]);                /* SQLPOINTER   */
                    store_parameter(r[6],ODBC_VALUE,0);        /* SQLSMALLINT  */
                    store_parameter(r[7],
                                    ODBC_REFERENCE,
                                    sizeof(SQLSMALLINT)); /* SQLSMALLINT **/
                    break;

                case SQL_GetDiagRec:

                    block = (int *)r[7];

                    initialise_parameters(SQL_ResultInfo,SQL_GetDiagRec);
                    store_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                    store_parameter(r[2],ODBC_VALUE,0);        /* SQLHANDLE */
                    store_parameter(r[3],ODBC_VALUE,0);        /* SQLSMALLINT  */
                    store_parameter(r[4],
                                    ODBC_REFERENCE,
                                    6);                        /* SQLCHAR *    */
                    store_parameter(r[5],
                                    ODBC_REFERENCE,
                                    sizeof(SQLINTEGER));  /* SQLINTEGER * */
                    store_parameter(r[6],
                                    ODBC_REFERENCE,
                                    block[0]);            /* SQLCHAR *    */
                    store_parameter(block[0],ODBC_VALUE,0);    /* SQLSMALLINT  */
                    store_parameter(block[1],
                                    ODBC_REFERENCE,
                                    sizeof(SQLSMALLINT)); /* SQLSMALLINT **/
                    break;

                case SQL_Error:

                     block = (int *)r[7];

                    initialise_parameters(SQL_ResultInfo,SQL_Error);
                    store_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                    store_parameter(r[2],ODBC_VALUE,0);        /* SQLHDBC */
                    store_parameter(r[3],ODBC_VALUE,0);        /* SQLHSTMT */
                    store_parameter(r[4],
                                    ODBC_REFERENCE,
                                    6);                        /* SQLCHAR *    */
                    store_parameter(r[5],
                                    ODBC_REFERENCE,
                                    sizeof(SQLINTEGER));  /* SQLINTEGER * */
                    store_parameter(r[6],
                                    ODBC_REFERENCE,
                                    block[0]);            /* SQLCHAR *    */
                    store_parameter(block[0],ODBC_VALUE,0);    /* SQLSMALLINT  */
                    store_parameter(block[1],
                                    ODBC_REFERENCE,
                                    sizeof(SQLSMALLINT)); /* SQLSMALLINT **/
                    break;

                }

            break;

        case SQL_SystemTablesP - SQL_Base:

            switch (r[0])
                {
                case SQL_ColumnPrivileges:

                    block = (int *)r[7];

                    initialise_parameters(SQL_SystemTables,SQL_ColumnPrivileges);
                    store_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                    store_parameter(r[2],
                                    ODBC_REFERENCE,
                                    r[3]);               /* SQLCHAR *    */
                    store_parameter(r[3],ODBC_VALUE,0);       /* SQLSMALLINT  */
                    store_parameter(r[4],
                                    ODBC_REFERENCE,
                                    r[5]);               /* SQLCHAR *    */
                    store_parameter(r[5],ODBC_VALUE,0);       /* SQLSMALLINT  */
                    store_parameter(r[6],
                                    ODBC_REFERENCE,
                                    block[0]);           /* SQLCHAR *    */
                    store_parameter(block[0],ODBC_VALUE,0);   /* SQLSMALLINT  */
                    store_parameter(block[1],
                                    ODBC_REFERENCE,
                                    block[2]);           /* SQLCHAR *    */
                    store_parameter(block[2],ODBC_VALUE,0);   /* SQLSMALLINT  */
                    break;

                case SQL_Columns:

                    block = (int *)r[7];

                    initialise_parameters(SQL_SystemTables,SQL_Columns);
                    store_parameter(r[1],ODBC_VALUE,0);       /* SQLHSTMT     */
                    store_parameter(r[2],
                                    ODBC_REFERENCE,
                                    r[3]);               /* SQLCHAR *    */
                    store_parameter(r[3],ODBC_VALUE,0);       /* SQLSMALLINT  */
                    store_parameter(r[4],
                                    ODBC_REFERENCE,
                                    r[5]);               /* SQLCHAR *    */
                    store_parameter(r[5],ODBC_VALUE,0);       /* SQLSMALLINT  */
                    store_parameter(r[6],
                                    ODBC_REFERENCE,
                                    block[0]);           /* SQLCHAR *    */
                    store_parameter(block[0],ODBC_VALUE,0);   /* SQLSMALLINT  */
                    store_parameter(block[1],
                                    ODBC_REFERENCE,
                                    block[2]);           /* SQLCHAR *    */
                    store_parameter(block[2],ODBC_VALUE,0);   /* SQLSMALLINT  */
                    break;

                case SQL_SpecialColumns:

                    block = (int *)r[7];

                    initialise_parameters(SQL_SystemTables,SQL_SpecialColumns);
                    store_parameter(r[1],ODBC_VALUE,0);       /* SQLHSTMT     */
                    store_parameter(r[2],ODBC_VALUE,0);       /* SQLUSMALLINT */
                    store_parameter(r[3],
                                    ODBC_REFERENCE,
                                    r[4]);               /* SQLCHAR *    */
                    store_parameter(r[4],ODBC_VALUE,0);       /* SQLUSMALLINT */
                    store_parameter(r[5],
                                    ODBC_REFERENCE,
                                    r[6]);               /* SQLCHAR *    */
                    store_parameter(r[6],ODBC_VALUE,0);       /* SQLUSMALLINT */
                    store_parameter(block[0],
                                    ODBC_REFERENCE,
                                    block[1]);           /* SQLCHAR *    */
                    store_parameter(block[1],ODBC_VALUE,0);   /* SQLSMALLINT  */
                    store_parameter(block[2],ODBC_VALUE,0);   /* SQLUSMALLINT */
                    store_parameter(block[3],ODBC_VALUE,0);   /* SQLUSMALLINT */
                    break;

                case SQL_ForeignKeys:

                    block = (int *)r[7];

                    initialise_parameters(SQL_SystemTables,SQL_ForeignKeys);
                    store_parameter(r[1],ODBC_VALUE,0);       /* SQLHSTMT     */
                    store_parameter(r[2],
                                    ODBC_REFERENCE,
                                    r[3]);               /* SQLCHAR *    */
                    store_parameter(r[3],ODBC_VALUE,0);       /* SQLSMALLINT  */
                    store_parameter(r[4],
                                    ODBC_REFERENCE,
                                    r[5]);               /* SQLCHAR *    */
                    store_parameter(r[5],ODBC_VALUE,0);       /* SQLSMALLINT  */
                    store_parameter(r[6],
                                    ODBC_REFERENCE,
                                    block[0]);           /* SQLCHAR *    */
                    store_parameter(block[0],ODBC_VALUE,0);   /* SQLSMALLINT  */
                    store_parameter(block[1],
                                    ODBC_REFERENCE,
                                    block[2]);           /* SQLCHAR *    */
                    store_parameter(block[2],ODBC_VALUE,0);   /* SQLSMALLINT  */
                    store_parameter(block[3],
                                    ODBC_REFERENCE,
                                    block[4]);           /* SQLCHAR *    */
                    store_parameter(block[4],ODBC_VALUE,0);   /* SQLSMALLINT  */
                    store_parameter(block[5],
                                    ODBC_REFERENCE,
                                    block[6]);           /* SQLCHAR *    */
                    store_parameter(block[6],ODBC_VALUE,0);   /* SQLSMALLINT  */
                    break;

                case SQL_PrimaryKeys:
                    initialise_parameters(SQL_SystemTables,SQL_PrimaryKeys);
                    store_parameter(r[1],ODBC_VALUE,0);       /* SQLHSTMT     */
                    store_parameter(r[2],
                                    ODBC_REFERENCE,
                                    r[3]);               /* SQLCHAR *    */
                    store_parameter(r[3],ODBC_VALUE,0);       /* SQLSMALLINT  */
                    store_parameter(r[4],
                                    ODBC_REFERENCE,
                                    r[5]);               /* SQLCHAR *    */
                    store_parameter(r[5],ODBC_VALUE,0);       /* SQLSMALLINT  */
                    store_parameter(r[6],
                                    ODBC_REFERENCE,
                                    r[7]);               /* SQLCHAR *    */
                    store_parameter(r[7],ODBC_VALUE,0);       /* SQLSMALLINT  */
                    break;

                case SQL_ProcedureColumns:

                    block = (int *)r[7];

                    initialise_parameters(SQL_SystemTables,SQL_ProcedureColumns);
                    store_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                    store_parameter(r[2],
                                    ODBC_REFERENCE,
                                    r[3]);               /* SQLCHAR *    */
                    store_parameter(r[3],ODBC_VALUE,0);       /* SQLSMALLINT  */
                    store_parameter(r[4],
                                    ODBC_REFERENCE,
                                    r[5]);               /* SQLCHAR *    */
                    store_parameter(r[5],ODBC_VALUE,0);       /* SQLSMALLINT  */
                    store_parameter(r[6],
                                    ODBC_REFERENCE,
                                    block[0]);           /* SQLCHAR *    */
                    store_parameter(block[0],ODBC_VALUE,0);   /* SQLSMALLINT  */
                    store_parameter(block[1],
                                    ODBC_REFERENCE,
                                    block[2]);           /* SQLCHAR *    */
                    store_parameter(block[2],ODBC_VALUE,0);   /* SQLSMALLINT  */
                    break;

                case SQL_Procedures:
                    initialise_parameters(SQL_SystemTables,SQL_Procedures);
                    store_parameter(r[1],ODBC_VALUE,0);       /* SQLHSTMT     */
                    store_parameter(r[2],
                                    ODBC_REFERENCE,
                                    r[3]);               /* SQLCHAR *    */
                    store_parameter(r[3],ODBC_VALUE,0);       /* SQLSMALLINT  */
                    store_parameter(r[4],
                                    ODBC_REFERENCE,
                                    r[5]);               /* SQLCHAR *    */
                    store_parameter(r[5],ODBC_VALUE,0);       /* SQLSMALLINT  */
                    store_parameter(r[6],
                                    ODBC_REFERENCE,
                                    r[7]);               /* SQLCHAR *    */
                    store_parameter(r[7],ODBC_VALUE,0);       /* SQLSMALLINT  */
                    break;

                case SQL_Statistics:

                    block = (int *)r[7];

                    initialise_parameters(SQL_SystemTables,SQL_Statistics);
                    store_parameter(r[1],ODBC_VALUE,0);        /*      */
                    store_parameter(r[2],
                                    ODBC_REFERENCE,
                                    r[3]);               /* SQLCHAR *    */
                    store_parameter(r[3],ODBC_VALUE,0);       /* SQLSMALLINT  */
                    store_parameter(r[4],
                                    ODBC_REFERENCE,
                                    r[5]);               /* SQLCHAR *    */
                    store_parameter(r[5],ODBC_VALUE,0);       /* SQLSMALLINT  */
                    store_parameter(r[6],
                                    ODBC_REFERENCE,
                                    block[0]);           /* SQLCHAR *    */
                    store_parameter(block[0],ODBC_VALUE,0);   /* SQLSMALLINT  */
                    store_parameter(block[1],ODBC_VALUE,0);   /* SQLUSMALLINT  */
                    store_parameter(block[2],ODBC_VALUE,0);   /* SQLUSMALLINT  */
                    break;

                case SQL_TablePrivileges:
                    initialise_parameters(SQL_SystemTables,SQL_TablePrivileges);
                    store_parameter(r[1],ODBC_VALUE,0);       /* SQLHSTMT     */
                    store_parameter(r[2],
                                    ODBC_REFERENCE,
                                    r[3]);               /* SQLCHAR *    */
                    store_parameter(r[3],ODBC_VALUE,0);       /* SQLSMALLINT  */
                    store_parameter(r[4],
                                    ODBC_REFERENCE,
                                    r[5]);               /* SQLCHAR *    */
                    store_parameter(r[5],ODBC_VALUE,0);       /* SQLSMALLINT  */
                    store_parameter(r[6],
                                    ODBC_REFERENCE,
                                    r[7]);               /* SQLCHAR *    */
                    store_parameter(r[7],ODBC_VALUE,0);       /* SQLSMALLINT  */
                    break;

                case SQL_Tables:

                    block = (int *)r[7];

                    initialise_parameters(SQL_SystemTables,SQL_Tables);
                    store_parameter(r[1],ODBC_VALUE,0);       /* SQLHSTMT     */
                    store_parameter(r[2],
                                    ODBC_REFERENCE,
                                    r[3]);               /* SQLCHAR *    */
                    store_parameter(r[3],ODBC_VALUE,0);       /* SQLSMALLINT  */
                    store_parameter(r[4],
                                    ODBC_REFERENCE,
                                    r[5]);               /* SQLCHAR *    */
                    store_parameter(r[5],ODBC_VALUE,0);       /* SQLSMALLINT  */
                    store_parameter(r[6],
                                    ODBC_REFERENCE,
                                    block[0]);           /* SQLCHAR *    */
                    store_parameter(block[0],ODBC_VALUE,0);   /* SQLSMALLINT  */
                    store_parameter(block[1],
                                    ODBC_REFERENCE,
                                    block[2]);           /* SQLCHAR *    */
                    store_parameter(block[2],ODBC_VALUE,0);   /* SQLSMALLINT  */
                    break;
                }

            break;

        case SQL_TerminateP - SQL_Base:

            switch (r[0])
                {
                case SQL_CloseCursor:
                    initialise_parameters(SQL_Terminate,SQL_CloseCursor);
                    store_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                    break;

                case SQL_Cancel:
                    initialise_parameters(SQL_Terminate,SQL_Cancel);
                    store_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                    break;

                case SQL_EndTran:
                    initialise_parameters(SQL_Terminate,SQL_EndTran);
                    store_parameter(r[1],ODBC_VALUE,0);        /* SQLSMALLINT  */
                    store_parameter(r[2],ODBC_VALUE,0);        /* SQLHANDLE    */
                    store_parameter(r[3],ODBC_VALUE,0);        /* SQLSMALLINT  */
                    break;

                case SQL_Transact:
                    initialise_parameters(SQL_Terminate,SQL_Transact);
                    store_parameter(r[1],ODBC_VALUE,0);        /* SQLHENV      */
                    store_parameter(r[2],ODBC_VALUE,0);        /* SQLHDBC      */
                    store_parameter(r[3],ODBC_VALUE,0);        /* SQLUSMALLINT */
                    break;
                }

            break;

        case SQL_Connection - SQL_Base:

             switch (r[0])
                 {
                 case SQL_AllocConnect:
                     initialise_parameters(SQL_Connection,SQL_AllocConnect);
                     fetch_parameter(r[1],ODBC_VALUE,0); /* SQLHENV   */
                     fetch_parameter(r[2],
                                     ODBC_REFERENCE,
                                     sizeof(SQLHDBC *)); /* SQLHDBC * */
                     free_parameters();
                     break;

                 case SQL_AllocEnv:
                     initialise_parameters(SQL_Connection,SQL_AllocEnv);
                     fetch_parameter(r[1],
                                     ODBC_REFERENCE,
                                     sizeof(SQLHENV *)); /* SQLHENV *  */
                     free_parameters();
                     break;

                 case SQL_AllocHandle:
                     initialise_parameters(SQL_Connection,SQL_AllocHandle);
                     fetch_parameter(r[1],ODBC_VALUE,0);   /* SQLSMALLINT */
                     fetch_parameter(r[2],ODBC_VALUE,0);   /* SQLHANDLE   */
                     fetch_parameter(r[3],
                                     ODBC_REFERENCE,
                                     sizeof(SQLHANDLE *)); /* SQLHANDLE * */
                     free_parameters();
                     break;

                 case SQL_AllocStmt:
                     initialise_parameters(SQL_Connection,SQL_AllocStmt);
                     fetch_parameter(r[1],ODBC_VALUE,0);  /* SQLHDBC    */
                     fetch_parameter(r[2],
                                     ODBC_REFERENCE,
                                     sizeof(SQLHSTMT *)); /* SQLHSTMT * */
                     free_parameters();
                     break;

                 case SQL_Connect:
                     initialise_parameters(SQL_Connection,SQL_Connect);
                     fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHDBC     */
                     fetch_parameter(r[2],ODBC_REFERENCE,r[3]); /* SQLCHAR *   */
                     fetch_parameter(r[3],ODBC_VALUE,0);        /* SQLSMALLINT */
                     fetch_parameter(r[4],ODBC_REFERENCE,r[5]); /* SQLCHAR *   */
                     fetch_parameter(r[5],ODBC_VALUE,0);        /* SQLSMALLINT */
                     fetch_parameter(r[6],ODBC_REFERENCE,r[7]); /* SQLCHAR *   */
                     fetch_parameter(r[7],ODBC_VALUE,0);        /* SQLSMALLINT */
                     free_parameters();
                     break;

                 case SQL_DriverConnect:

                     block = (int *)r[7];

                     initialise_parameters(SQL_Connection,SQL_DriverConnect);
                     fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHDBC      */
                     fetch_parameter(r[2],ODBC_VALUE,0);        /* SQLHWND      */
                     fetch_parameter(r[3],ODBC_REFERENCE,r[4]); /* SQLCHAR *    */
                     fetch_parameter(r[4],ODBC_VALUE,0);        /* SQLSMALLINT  */
                     fetch_parameter(r[5],ODBC_REFERENCE,r[6]); /* SQLCHAR *    */
                     fetch_parameter(r[6],ODBC_VALUE,0);        /* SQLSMALLINT  */
                     fetch_parameter(block[0],
                                     ODBC_REFERENCE,
                                     sizeof(SQLSMALLINT));      /* SQLSMALLINT **/
                     fetch_parameter(block[1],ODBC_VALUE,0);    /* SQLUSMALLINT */
                     free_parameters();
                     break;

                 case SQL_BrowseConnect:
                     initialise_parameters(SQL_Connection,SQL_BrowseConnect);
                     fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHDBC       */
                     fetch_parameter(r[2],ODBC_REFERENCE,r[3]); /* SQLCHAR *     */
                     fetch_parameter(r[3],ODBC_VALUE,0);        /* SQLSMALLINT   */
                     fetch_parameter(r[4],ODBC_REFERENCE,r[5]); /* SQLCHAR *     */
                     fetch_parameter(r[5],ODBC_VALUE,0);        /* SQLSMALLINT   */
                     fetch_parameter(r[6],
                                     ODBC_REFERENCE,
                                     sizeof(SQLSMALLINT)); /* SQLSMALLINT * */
                     free_parameters();
                     break;

                 case SQL_FreeConnect:
                     initialise_parameters(SQL_Connection,SQL_FreeConnect);
                     fetch_parameter(r[1],ODBC_VALUE,0); /* SQLHDBC */
                     free_parameters();
                     break;

                 case SQL_FreeEnv:
                     initialise_parameters(SQL_Connection,SQL_FreeEnv);
                     fetch_parameter(r[1],ODBC_VALUE,0); /* SQLHENV */
                     free_parameters();
                     break;

                 case SQL_FreeHandle:
                     initialise_parameters(SQL_Connection,SQL_FreeHandle);
                     fetch_parameter(r[1],ODBC_VALUE,0); /* SQLSMALLINT */
                     fetch_parameter(r[2],ODBC_VALUE,0); /* SQLHANDLE   */
                     free_parameters();
                     break;

                 case SQL_FreeStmt:
                     initialise_parameters(SQL_Connection,SQL_FreeStmt);
                     fetch_parameter(r[1],ODBC_VALUE,0); /* SQLHSTMT     */
                     fetch_parameter(r[2],ODBC_VALUE,0); /* SQLUSMALLINT */
                     free_parameters();
                     free_bound_parameters(r[1]);
                     break;

                 case SQL_Disconnect:
                     initialise_parameters(SQL_Connection,SQL_Disconnect);
                     fetch_parameter(r[1],ODBC_VALUE,0); /* SQLHDBC */
                     free_parameters();
                     break;
                 }

             break;

        case SQL_DriverInfo - SQL_Base:

             switch (r[0])
                 {
                 case SQL_DataSources:

                     block = (int *)r[7];

                     initialise_parameters(SQL_DriverInfo,SQL_DataSources);
                     fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHENV       */
                     fetch_parameter(r[2],ODBC_VALUE,0);        /* SQLUSMALLINT  */
                     fetch_parameter(r[3],
                                     ODBC_REFERENCE,
                                     r[4]);                /* SQLCHAR *     */
                     fetch_parameter(r[4],ODBC_VALUE,0);        /* SQLSMALLINT   */
                     fetch_parameter(r[5],
                                     ODBC_REFERENCE,
                                     sizeof(SQLSMALLINT)); /* SQLSMALLINT * */
                     fetch_parameter(r[6],
                                     ODBC_REFERENCE,
                                     block[0]);            /* SQLCHAR *     */

                     fetch_parameter(block[0],ODBC_VALUE,0);    /* SQLSMALLINT   */
                     fetch_parameter(block[1],
                                     ODBC_REFERENCE,
                                     sizeof(SQLSMALLINT)); /* SQLSMALLINT * */
                     free_parameters();
                     break;

                 case SQL_Drivers:

                     block = (int *)r[7];

                     initialise_parameters(SQL_DriverInfo,SQL_Drivers);

                     fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHENV       */
                     fetch_parameter(r[2],ODBC_VALUE,0);        /* SQLUSMALLINT  */
                     fetch_parameter(r[3],
                                     ODBC_REFERENCE,
                                     r[4]);                /* SQLCHAR *     */
                     fetch_parameter(r[4],ODBC_VALUE,0);        /* SQLSMALLINT   */
                     fetch_parameter(r[5],
                                     ODBC_REFERENCE,
                                     sizeof(SQLSMALLINT)); /* SQLSMALLINT * */
                     fetch_parameter(r[6],
                                     ODBC_REFERENCE,
                                     block[0]);            /* SQLCHAR *     */

                     fetch_parameter(block[0],ODBC_VALUE,0);    /* SQLSMALLINT   */
                     fetch_parameter(block[1],
                                     ODBC_REFERENCE,
                                     sizeof(SQLSMALLINT)); /* SQLSMALLINT * */
                     free_parameters();
                     break;

                 case SQL_GetFunctions:
                     initialise_parameters(SQL_DriverInfo,SQL_GetFunctions);
                     fetch_parameter(r[1],ODBC_VALUE,0);         /* SQLHDBC        */
                     fetch_parameter(r[2],ODBC_VALUE,0);         /* SQLUSMALLINT   */
                     fetch_parameter(r[3],
                                     ODBC_REFERENCE,
                                     sizeof(SQLUSMALLINT)); /* SQLUSMALLINT * */
                     free_parameters();
                     break;

                 case SQL_GetInfo:
                     initialise_parameters(SQL_DriverInfo,SQL_GetInfo);
                     fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHDBC       */
                     fetch_parameter(r[2],ODBC_VALUE,0);        /* SQLUSMALLINT  */
                     fetch_parameter(r[3],ODBC_REFERENCE,r[4]); /* SQLPOINTER    */
                     fetch_parameter(r[4],ODBC_VALUE,0);        /* SQLSMALLINT   */
                     fetch_parameter(r[5],
                                     ODBC_REFERENCE,
                                     sizeof(SQLSMALLINT)); /* SQLSMALLINT * */
                     free_parameters();
                     break;

                 case SQL_GetTypeInfo:
                     initialise_parameters(SQL_DriverInfo,SQL_GetTypeInfo);
                     fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT    */
                     fetch_parameter(r[2],ODBC_VALUE,0);        /* SQLSMALLINT */
                     free_parameters();
                     break;
                 }
             break;

         case SQL_DriverAttributes - SQL_Base:

             switch (r[0])
                 {
                 case SQL_GetConnectAttr:
                     initialise_parameters(SQL_DriverAttributes,SQL_GetConnectAttr);
                     fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHDBC     */
                     fetch_parameter(r[2],ODBC_VALUE,0);        /* SQLINTEGER  */
                     fetch_parameter(r[3],ODBC_REFERENCE,r[4]); /* SQLPOINTER  */
                     fetch_parameter(r[4],ODBC_VALUE,0);        /* SQLINTEGER  */
                     fetch_parameter(r[5],
                                     ODBC_REFERENCE,
                                     sizeof(SQLINTEGER)); /* SQLINTEGER * */
                     free_parameters();
                     break;

                 case SQL_SetConnectAttr:
                     initialise_parameters(SQL_DriverAttributes,SQL_SetConnectAttr);
                     fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHDBC    */
                     fetch_parameter(r[2],ODBC_VALUE,0);        /* SQLINTEGER */
                     fetch_parameter(r[3],ODBC_REFERENCE,r[4]); /* SQLPOINTER */
                     fetch_parameter(r[4],ODBC_VALUE,0);        /* SQLINTEGER */
                     free_parameters();
                     break;

                 case SQL_GetEnvAttr:
                     initialise_parameters(SQL_DriverAttributes,SQL_GetEnvAttr);
                     fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHENV     */
                     fetch_parameter(r[2],ODBC_VALUE,0);        /* SQLINTEGER  */
                     fetch_parameter(r[3],ODBC_REFERENCE,r[4]); /* SQLPOINTER  */
                     fetch_parameter(r[4],ODBC_VALUE,0);        /* SQLINTEGER  */
                     fetch_parameter(r[5],
                                     ODBC_REFERENCE,
                                     sizeof(SQLINTEGER)); /* SQLINTEGER * */
                     free_parameters();
                     break;

                 case SQL_SetEnvAttr:
                     initialise_parameters(SQL_DriverAttributes,SQL_SetEnvAttr);
                     fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHENV     */
                     fetch_parameter(r[2],ODBC_VALUE,0);        /* SQLINTEGER  */
                     fetch_parameter(r[3],ODBC_REFERENCE,r[4]); /* SQLPOINTER  */
                     fetch_parameter(r[4],ODBC_VALUE,0);        /* SQLINTEGER  */
                     free_parameters();
                     break;

                 case SQL_GetStmtAttr:
                     initialise_parameters(SQL_DriverAttributes,SQL_GetStmtAttr);
                     fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                     fetch_parameter(r[2],ODBC_VALUE,0);        /* SQLINTEGER   */
                     fetch_parameter(r[3],ODBC_REFERENCE,r[4]); /* SQLPOINTER   */
                     fetch_parameter(r[4],ODBC_VALUE,0);        /* SQLINTEGER   */
                     fetch_parameter(r[5],
                                     ODBC_REFERENCE,
                                     sizeof(SQLINTEGER));  /* SQLINTEGER * */
                     free_parameters();
                     break;

                 case SQL_SetStmtAttr:
                     initialise_parameters(SQL_DriverAttributes,SQL_SetStmtAttr);
                     fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT   */
                     fetch_parameter(r[2],ODBC_VALUE,0);        /* SQLINTEGER */
                     fetch_parameter(r[3],ODBC_REFERENCE,r[4]); /* SQLPOINTER */
                     fetch_parameter(r[4],ODBC_VALUE,0);        /* SQLINTEGER */
                     free_parameters();
                     break;
                 case SQL_GetConnectOption:
                     initialise_parameters(SQL_DriverAttributes,SQL_GetConnectOption);
                     fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHDBC      */
                     fetch_parameter(r[2],ODBC_VALUE,0);        /* SQLUSMALLINT */
                     fetch_parameter(r[3],
                                     ODBC_REFERENCE,
                                     sizeof(SQLINTEGER));  /* SQLPOINTER   */
                     free_parameters();
                     break;

                 case SQL_SetConnectOption:
                     initialise_parameters(SQL_DriverAttributes,SQL_SetConnectOption);
                     fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHDBC       */
                     fetch_parameter(r[2],ODBC_VALUE,0);        /* SQLUSMALLINT  */
                     fetch_parameter(r[3],ODBC_VALUE,0);        /* SQLUINTEGER   */
                     free_parameters();
                     break;

                 case SQL_GetStmtOption:
                     initialise_parameters(SQL_DriverAttributes,SQL_GetStmtOption);
                     fetch_parameter(r[1],ODBC_VALUE,0);       /* SQLHSTMT     */
                     fetch_parameter(r[2],ODBC_VALUE,0);       /* SQLUSMALLINT */
                     fetch_parameter(r[3],
                                     ODBC_REFERENCE,
                                     sizeof(SQLINTEGER)); /* SQLPOINTER   */
                     free_parameters();
                     break;

                 case SQL_SetStmtOption:
                     initialise_parameters(SQL_DriverAttributes,SQL_SetStmtOption);
                     fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                     fetch_parameter(r[2],ODBC_VALUE,0);        /* SQLUSMALLINT */
                     fetch_parameter(r[3],ODBC_VALUE,0);        /* SQLUINTEGER  */
                     free_parameters();
                     break;
                 }
             break;

         case SQL_Descriptor - SQL_Base:

             switch (r[0])
                 {
                 case SQL_GetDescField:
                     initialise_parameters(SQL_Descriptor,SQL_GetDescField);
                     fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHDESC     */
                     fetch_parameter(r[2],ODBC_VALUE,0);        /* SQLSMALLINT  */
                     fetch_parameter(r[3],ODBC_VALUE,0);        /* SQLSMALLINT  */
                     fetch_parameter(r[4],ODBC_REFERENCE,r[5]); /* SQLPOINTER   */
                     fetch_parameter(r[5],ODBC_VALUE,0);        /* SQLINTEGER   */
                     fetch_parameter(r[6],
                                     ODBC_REFERENCE,
                                     sizeof(SQLINTEGER));  /* SQLINTEGER * */
                     free_parameters();
                     break;

                 case SQL_SetDescField:
                     initialise_parameters(SQL_Descriptor,SQL_SetDescField);
                     fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHDESC    */
                     fetch_parameter(r[2],ODBC_VALUE,0);        /* SQLSMALLINT */
                     fetch_parameter(r[3],ODBC_VALUE,0);        /* SQLSMALLINT */
                     fetch_parameter(r[4],ODBC_REFERENCE,r[5]); /* SQLPOINTER  */
                     fetch_parameter(r[5],ODBC_VALUE,0);        /* SQLINTEGER  */
                     free_parameters();
                     break;

                 case SQL_GetDescRec:

                     block = (int *)r[7];

                     initialise_parameters(SQL_Descriptor,SQL_GetDescRec);
                     fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHDESC     */
                     fetch_parameter(r[2],ODBC_VALUE,0);        /* SQLSMALLINT  */
                     fetch_parameter(r[3],ODBC_REFERENCE,r[4]); /* SQLCHAR *    */
                     fetch_parameter(r[4],ODBC_VALUE,0);        /* SQLSMALLINT  */
                     fetch_parameter(r[5],
                                     ODBC_REFERENCE,
                                     sizeof(SQLSMALLINT)); /* SQLSMALLINT **/
                     fetch_parameter(r[6],
                                     ODBC_REFERENCE,
                                     sizeof(SQLSMALLINT)); /* SQLSMALLINT **/
                     fetch_parameter(block[0],
                                     ODBC_REFERENCE,
                                     sizeof(SQLINTEGER));  /* SQLINTEGER * */
                     fetch_parameter(block[1],
                                     ODBC_REFERENCE,
                                     sizeof(SQLSMALLINT)); /* SQLSMALLINT **/
                     fetch_parameter(block[2],
                                     ODBC_REFERENCE,
                                     sizeof(SQLSMALLINT)); /* SQLSMALLINT **/
                     fetch_parameter(block[3],
                                     ODBC_REFERENCE,
                                     sizeof(SQLSMALLINT)); /* SQLSMALLINT **/
                     fetch_parameter(block[4],
                                     ODBC_REFERENCE,
                                     sizeof(SQLSMALLINT)); /* SQLSMALLINT **/
                     free_parameters();
                     break;

                 case SQL_SetDescRec:

                     block = (int *)r[7];

                     initialise_parameters(SQL_Descriptor,SQL_SetDescRec);
                     fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHDESC     */
                     fetch_parameter(r[2],ODBC_VALUE,0);        /* SQLSMALLINT  */
                     fetch_parameter(r[3],ODBC_VALUE,0);        /* SQLSMALLINT  */
                     fetch_parameter(r[4],ODBC_VALUE,0);        /* SQLSMALLINT  */
                     fetch_parameter(r[5],ODBC_VALUE,0);        /* SQLINTEGER   */
                     fetch_parameter(r[6],ODBC_VALUE,0);        /* SQLSMALLINT  */
                     fetch_parameter(block[0],ODBC_VALUE,0);    /* SQLSMALLINT  */
                     fetch_parameter(block[1],
                                     ODBC_REFERENCE,
                                     r[5]);                /* SQLPOINTER   */
                     fetch_parameter(block[2],
                                     ODBC_REFERENCE,
                                     sizeof(SQLINTEGER));  /* SQLINTEGER * */
                     fetch_parameter(block[3],
                                     ODBC_REFERENCE,
                                     sizeof(SQLINTEGER));  /* SQLINTEGER * */
                     free_parameters();
                     break;
                 }
             break;

         case SQL_Preparation - SQL_Base:

             switch (r[0])
                 {
                 case SQL_Prepare:
                     initialise_parameters(SQL_Preparation,SQL_Prepare);
                     fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT   */
                     fetch_parameter(r[2],ODBC_REFERENCE,r[3]); /* SQLCHAR *  */
                     fetch_parameter(r[3],ODBC_VALUE,0);        /* SQLINTEGER */
                     free_parameters();
                     break;

                 case SQL_BindParameter:

                     block = (int *)r[7];

                     initialise_parameters(SQL_Preparation,SQL_BindParameter);
                     fetch_parameter(r[1],ODBC_VALUE,0);   /* SQLHSTMT     */
                     fetch_parameter(r[2],ODBC_VALUE,0);   /* SQLUSMALLINT */
                     fetch_parameter(r[3],ODBC_VALUE,0);   /* SQLSMALLINT  */
                     fetch_parameter(r[4],ODBC_VALUE,0);   /* SQLSMALLINT  */
                     fetch_parameter(r[5],ODBC_VALUE,0);   /* SQLSMALLINT  */
                     fetch_parameter(r[6],ODBC_VALUE,0);   /* SQLUINTEGER  */
                     fetch_parameter(block[0],
                                     ODBC_VALUE,
                                     0);                   /* SQLSMALLINT  */
                     fetch_parameter(block[1],
                                     ODBC_REFERENCE,
                                     data_size(r[4],
                                               r[6]));     /* SQLPOINTER   */
                     fetch_parameter(block[2],
                                     ODBC_VALUE,
                                     0);                   /* SQLINTEGER   */
                     fetch_parameter(block[3],
                                     ODBC_REFERENCE,
                                     sizeof(SQLINTEGER));  /* SQLINTEGER * */
                     free_parameters();
                     break;

                 case SQL_ParamOptions:
                     initialise_parameters(SQL_Preparation,SQL_ParamOptions);
                     fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT      */
                     fetch_parameter(r[2],ODBC_VALUE,0);        /* SQLUINTEGER   */
                     fetch_parameter(r[3],
                                     ODBC_REFERENCE,
                                     sizeof(SQLUINTEGER)); /* SQLUINTEGER * */
                     free_parameters();
                     break;

                 case SQL_GetCursorName:
                     initialise_parameters(SQL_Preparation,SQL_GetCursorName);
                     fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT      */
                     fetch_parameter(r[2],ODBC_REFERENCE,r[3]); /* SQLCHAR *     */
                     fetch_parameter(r[3],ODBC_VALUE,0);        /* SQLSMALLINT   */
                     fetch_parameter(r[4],
                                     ODBC_REFERENCE,
                                     sizeof(SQLSMALLINT)); /* SQLSMALLINT * */
                     free_parameters();
                     break;

                 case SQL_SetCursorName:
                     initialise_parameters(SQL_Preparation,SQL_SetCursorName);
                     fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT    */
                     fetch_parameter(r[2],ODBC_REFERENCE,r[3]); /* SQLCHAR *   */
                     fetch_parameter(r[3],ODBC_VALUE,0);        /* SQLSMALLINT */
                     free_parameters();
                     break;

                 case SQL_SetScrollOptions:
                     initialise_parameters(SQL_Preparation,SQL_SetScrollOptions);
                     fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                     fetch_parameter(r[2],ODBC_VALUE,0);        /* SQLUSMALLINT */
                     fetch_parameter(r[3],ODBC_VALUE,0);        /* SQLINTEGER   */
                     fetch_parameter(r[4],ODBC_VALUE,0);        /* SQLUSMALLINT */
                     free_parameters();
                     break;

                 case SQL_BindParam:

                     block = (int *)r[7];

                     initialise_parameters(SQL_Preparation,SQL_BindParam);
                     fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                     fetch_parameter(r[2],ODBC_VALUE,0);        /* SQLUSMALLINT */
                     fetch_parameter(r[3],ODBC_VALUE,0);        /* SQLSMALLINT  */
                     fetch_parameter(r[4],ODBC_VALUE,0);        /* SQLSMALLINT  */
                     fetch_parameter(r[5],ODBC_VALUE,0);        /* SQLUINTEGER  */
                     fetch_parameter(r[6],ODBC_VALUE,0);        /* SQLSMALLINT  */
                     fetch_parameter(block[0],
                                     ODBC_REFERENCE,
                                     data_size(r[3],
                                               r[5]));          /* SQLPOINTER   */
                     fetch_parameter(block[1],
                                     ODBC_REFERENCE,
                                     sizeof(SQLINTEGER));       /* SQLINTEGER * */
                     free_parameters();
                     break;
                 }
             break;

         case SQL_Request - SQL_Base:

             switch (r[0])
                 {
                 case SQL_Execute:
                     initialise_parameters(SQL_Request,SQL_Execute);
                     fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                     free_parameters();
                     break;

                 case SQL_ExecDirect:
                     initialise_parameters(SQL_Request,SQL_ExecDirect);
                     fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                     fetch_parameter(r[2],
                                     ODBC_REFERENCE,
                                     r[3]);                /* SQLCHAR *    */
                     fetch_parameter(r[3],ODBC_VALUE,0);        /* SQLINTEGER   */
                     free_parameters();
                     break;

                 case SQL_NativeSql:
                     initialise_parameters(SQL_Request,SQL_NativeSql);
                     fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHDBC     */
                     fetch_parameter(r[2],
                                     ODBC_REFERENCE,
                                     r[3]);                /* SQLCHAR *   */
                     fetch_parameter(r[3],ODBC_VALUE,0);        /* SQLINTEGER  */
                     fetch_parameter(r[4],
                                     ODBC_REFERENCE,
                                     r[5]);                /* SQLCHAR *   */
                     fetch_parameter(r[5],ODBC_VALUE,0);        /* SQLINTEGER  */
                     fetch_parameter(r[6],
                                     ODBC_REFERENCE,
                                     sizeof(SQLINTEGER));  /* SQLINTEGER **/
                     free_parameters();
                     break;

                 case SQL_DescribeParam:
                     initialise_parameters(SQL_Request,SQL_DescribeParam);
                     fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                     fetch_parameter(r[2],ODBC_VALUE,0);        /* SQLUSMALLINT */
                     fetch_parameter(r[3],
                                     ODBC_REFERENCE,
                                     sizeof(SQLSMALLINT)); /* SQLSMALLINT **/
                     fetch_parameter(r[4],
                                     ODBC_REFERENCE,
                                     sizeof(SQLUINTEGER)); /* SQLUINTEGER **/
                     fetch_parameter(r[5],
                                     ODBC_REFERENCE,
                                     sizeof(SQLSMALLINT)); /* SQLSMALLINT **/
                     fetch_parameter(r[6],
                                     ODBC_REFERENCE,
                                     sizeof(SQLSMALLINT)); /* SQLSMALLINT **/
                     free_parameters();
                     break;

                 case SQL_NumParams:
                     initialise_parameters(SQL_Request,SQL_NumParams);
                     fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                     fetch_parameter(r[2],
                                     ODBC_REFERENCE,
                                     sizeof(SQLSMALLINT)); /* SQLSMALLINT **/
                     free_parameters();
                     break;

                 case SQL_ParamData:
                     initialise_parameters(SQL_Request,SQL_ParamData);
                     fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT   */
                     fetch_parameter(r[2],
                                     ODBC_REFERENCE,
                                     sizeof(SQLPOINTER));  /* SQLPOINTER */
                     free_parameters();
                     break;

                 case SQL_PutData:
                     initialise_parameters(SQL_Request,SQL_PutData);
                     fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                     fetch_parameter(r[2],
                                     ODBC_REFERENCE,
                                     r[3]);                /* SQLPOINTER   */
                     fetch_parameter(r[3],ODBC_VALUE,0);        /* SQLINTEGER   */
                     free_parameters();
                     break;
                 }

             break;

         case SQL_Result - SQL_Base:

             switch (r[0])
                 {
                 case SQL_BindCol:
                     initialise_parameters(SQL_Result,SQL_BindCol);
                     fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                     fetch_parameter(r[2],ODBC_VALUE,0);        /* SQLUSMALLINT */
                     fetch_parameter(r[3],ODBC_VALUE,0);        /* SQLSMALLINT  */
                     fetch_parameter(r[4],
                                     ODBC_REFERENCE,
                                     r[5]);                /* SQLPOINTER   */
                     fetch_parameter(r[5],ODBC_VALUE,0);        /* SQLINTEGER   */
                     fetch_parameter(r[6],
                                     ODBC_REFERENCE,
                                     sizeof(SQLINTEGER));  /* SQLINTEGER * */
                     free_parameters();
                      break;

                 case SQL_BulkOperations:
                     initialise_parameters(SQL_Result,SQL_BulkOperations);
                     fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                     fetch_parameter(r[2],ODBC_VALUE,0);        /* SQLSMALLINT  */
                     free_parameters();
                     break;

                 case SQL_Fetch:
                     initialise_parameters(SQL_Result,SQL_Fetch);
                     fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                     copy_bound_parameters(r[1]);
                     free_parameters();
                     break;

                 case SQL_FetchScroll:
                     initialise_parameters(SQL_Result,SQL_FetchScroll);
                     fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                     fetch_parameter(r[2],ODBC_VALUE,0);        /* SQLSMALLINT  */
                     fetch_parameter(r[3],ODBC_VALUE,0);        /* SQLINTEGER   */
                     copy_bound_parameters(r[1]);
                     free_parameters();
                     break;

                 case SQL_ExtendedFetch:
                     initialise_parameters(SQL_Result,SQL_ExtendedFetch);
                     fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT      */
                     fetch_parameter(r[2],ODBC_VALUE,0);        /* SQLUSMALLINT  */
                     fetch_parameter(r[3],ODBC_VALUE,0);        /* SQLINTEGER    */
                     fetch_parameter(r[4],
                                     ODBC_REFERENCE,
                                     sizeof(SQLUINTEGER)); /* SQLUINTEGER **/
                     fetch_parameter(r[5],
                                     ODBC_REFERENCE,
                                     sizeof(SQLUSMALLINT));/* SQLUSMALLINT **/
                     copy_bound_parameters(r[1]);
                     free_parameters();
                     break;

                 case SQL_GetData:
                     initialise_parameters(SQL_Result,SQL_GetData);
                     fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                     fetch_parameter(r[2],ODBC_VALUE,0);        /* SQLUSMALLINT  */
                     fetch_parameter(r[3],ODBC_VALUE,0);        /* SQLSMALLINT  */
                     fetch_parameter(r[4],
                                     ODBC_REFERENCE,
                                     r[5]);                /* SQLPOINTER   */
                     fetch_parameter(r[5],ODBC_VALUE,0);        /* SQLINTEGER   */
                     fetch_parameter(r[6],
                                     ODBC_REFERENCE,
                                     sizeof(SQLINTEGER));  /* SQLINTEGER * */
                     free_parameters();
                     break;

                 case SQL_SetPos:
                     initialise_parameters(SQL_Result,SQL_SetPos);
                     fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                     fetch_parameter(r[2],ODBC_VALUE,0);        /* SQLUSMALLINT */
                     fetch_parameter(r[3],ODBC_VALUE,0);        /* SQLUSMALLINT */
                     fetch_parameter(r[4],ODBC_VALUE,0);        /* SQLUSMALLINT */
                     free_parameters();
                     break;
                 }

             break;

        case SQL_ResultInfo - SQL_Base:

            switch (r[0])
                {
                case SQL_ColAttribute:
                    initialise_parameters(SQL_ResultInfo,SQL_ColAttribute);
                    fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                    fetch_parameter(r[2],ODBC_VALUE,0);        /* SQLUSMALLINT */
                    fetch_parameter(r[3],ODBC_VALUE,0);        /* SQLUSMALLINT */
                    fetch_parameter(r[4],
                                    ODBC_REFERENCE,
                                    r[5]);                /* SQLPOINTER   */
                    fetch_parameter(r[5],ODBC_VALUE,0);        /* SQLSMALLINT  */
                    fetch_parameter(r[6],
                                    ODBC_REFERENCE,
                                    sizeof(SQLSMALLINT)); /* SQLSMALLINT **/
                    fetch_parameter(r[7],
                                    ODBC_REFERENCE,
                                    sizeof(double));      /* SQLPOINTER   */
                     free_parameters();
                    break;

                case SQL_ColAttributes:
                    initialise_parameters(SQL_ResultInfo,SQL_ColAttributes);
                    fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                    fetch_parameter(r[2],ODBC_VALUE,0);        /* SQLUSMALLINT */
                    fetch_parameter(r[3],ODBC_VALUE,0);        /* SQLUSMALLINT */
                    fetch_parameter(r[4],
                                    ODBC_REFERENCE,
                                    r[5]);                /* SQLPOINTER   */
                    fetch_parameter(r[5],ODBC_VALUE,0);        /* SQLSMALLINT  */
                    fetch_parameter(r[6],
                                    ODBC_REFERENCE,
                                    sizeof(SQLSMALLINT)); /* SQLSMALLINT **/
                    fetch_parameter(r[7],
                                    ODBC_REFERENCE,
                                    sizeof(SQLINTEGER));  /* SQLINTEGER * */
                     free_parameters();
                    break;

                case SQL_DescribeCol:

                    block = (int *)r[7];

                    initialise_parameters(SQL_ResultInfo,SQL_DescribeCol);
                    fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                    fetch_parameter(r[2],ODBC_VALUE,0);        /* SQLUSMALLINT */
                    fetch_parameter(r[3],
                                    ODBC_REFERENCE,
                                    r[4]);                /* SQLCHAR *    */
                    fetch_parameter(r[4],ODBC_VALUE,0);        /* SQLSMALLINT  */
                    fetch_parameter(r[5],
                                    ODBC_REFERENCE,
                                    sizeof(SQLSMALLINT)); /* SQLSMALLINT **/
                    fetch_parameter(r[6],
                                    ODBC_REFERENCE,
                                    sizeof(SQLSMALLINT)); /* SQLSMALLINT **/
                    fetch_parameter(block[0],
                                    ODBC_REFERENCE,
                                    sizeof(SQLUINTEGER)); /* SQLUINTEGER **/
                    fetch_parameter(block[1],
                                    ODBC_REFERENCE,
                                    sizeof(SQLSMALLINT)); /* SQLSMALLINT **/
                    fetch_parameter(block[2],
                                    ODBC_REFERENCE,
                                    sizeof(SQLSMALLINT)); /* SQLSMALLINT **/
                     free_parameters();
                    break;

                case SQL_NumResultCols:
                    initialise_parameters(SQL_ResultInfo,SQL_NumResultCols);
                    fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                    fetch_parameter(r[2],
                                    ODBC_REFERENCE,
                                    sizeof(SQLSMALLINT)); /* SQLSMALLINT **/
                     free_parameters();
                    break;

                case SQL_RowCount:
                    initialise_parameters(SQL_ResultInfo,SQL_RowCount);
                    fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                    fetch_parameter(r[2],
                                    ODBC_REFERENCE,
                                    sizeof(SQLINTEGER));  /* SQLINTEGER **/
                     free_parameters();
                    break;

                case SQL_MoreResults:
                    initialise_parameters(SQL_ResultInfo,SQL_MoreResults);
                    fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                     free_parameters();
                    break;

                case SQL_GetDiagField:
                    initialise_parameters(SQL_ResultInfo,SQL_GetDiagField);
                    fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                    fetch_parameter(r[2],ODBC_VALUE,0);        /* SQLHANDLE    */
                    fetch_parameter(r[3],ODBC_VALUE,0);        /* SQLSMALLINT  */
                    fetch_parameter(r[4],ODBC_VALUE,0);        /* SQLSMALLINT  */
                    fetch_parameter(r[5],
                                    ODBC_REFERENCE,
                                    r[6]);                /* SQLPOINTER   */
                    fetch_parameter(r[6],ODBC_VALUE,0);        /* SQLSMALLINT  */
                    fetch_parameter(r[7],
                                    ODBC_REFERENCE,
                                    sizeof(SQLSMALLINT)); /* SQLSMALLINT **/
                     free_parameters();
                    break;

                case SQL_GetDiagRec:

                    block = (int *)r[7];

                    initialise_parameters(SQL_ResultInfo,SQL_GetDiagRec);
                    fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                    fetch_parameter(r[2],ODBC_VALUE,0);        /* SQLHANDLE */
                    fetch_parameter(r[3],ODBC_VALUE,0);        /* SQLSMALLINT  */
                    fetch_parameter(r[4],
                                    ODBC_REFERENCE,
                                    6);                        /* SQLCHAR *    */
                    fetch_parameter(r[5],
                                    ODBC_REFERENCE,
                                    sizeof(SQLINTEGER));  /* SQLINTEGER * */
                    fetch_parameter(r[6],
                                    ODBC_REFERENCE,
                                    block[0]);            /* SQLCHAR *    */
                    fetch_parameter(block[0],ODBC_VALUE,0);    /* SQLSMALLINT  */
                    fetch_parameter(block[1],
                                    ODBC_REFERENCE,
                                    sizeof(SQLSMALLINT)); /* SQLSMALLINT **/
                     free_parameters();
                    break;

                case SQL_Error:

                     block = (int *)r[7];

                    initialise_parameters(SQL_ResultInfo,SQL_Error);
                    fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                    fetch_parameter(r[2],ODBC_VALUE,0);        /* SQLHDBC */
                    fetch_parameter(r[3],ODBC_VALUE,0);        /* SQLHSTMT */
                    fetch_parameter(r[4],
                                    ODBC_REFERENCE,
                                    6);                        /* SQLCHAR *    */
                    fetch_parameter(r[5],
                                    ODBC_REFERENCE,
                                    sizeof(SQLINTEGER));  /* SQLINTEGER * */
                    fetch_parameter(r[6],
                                    ODBC_REFERENCE,
                                    block[0]);            /* SQLCHAR *    */
                    fetch_parameter(block[0],ODBC_VALUE,0);    /* SQLSMALLINT  */
                    fetch_parameter(block[1],
                                    ODBC_REFERENCE,
                                    sizeof(SQLSMALLINT)); /* SQLSMALLINT **/
                     free_parameters();
                    break;

                }

            break;

        case SQL_SystemTables - SQL_Base:

            switch (r[0])
                {
                case SQL_ColumnPrivileges:

                    block = (int *)r[7];

                    initialise_parameters(SQL_SystemTables,SQL_ColumnPrivileges);
                    fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                    fetch_parameter(r[2],
                                    ODBC_REFERENCE,
                                    r[3]);               /* SQLCHAR *    */
                    fetch_parameter(r[3],ODBC_VALUE,0);       /* SQLSMALLINT  */
                    fetch_parameter(r[4],
                                    ODBC_REFERENCE,
                                    r[5]);               /* SQLCHAR *    */
                    fetch_parameter(r[5],ODBC_VALUE,0);       /* SQLSMALLINT  */
                    fetch_parameter(r[6],
                                    ODBC_REFERENCE,
                                    block[0]);           /* SQLCHAR *    */
                    fetch_parameter(block[0],ODBC_VALUE,0);   /* SQLSMALLINT  */
                    fetch_parameter(block[1],
                                    ODBC_REFERENCE,
                                    block[2]);           /* SQLCHAR *    */
                    fetch_parameter(block[2],ODBC_VALUE,0);   /* SQLSMALLINT  */
                     free_parameters();
                    break;

                case SQL_Columns:

                    block = (int *)r[7];

                    initialise_parameters(SQL_SystemTables,SQL_Columns);
                    fetch_parameter(r[1],ODBC_VALUE,0);       /* SQLHSTMT     */
                    fetch_parameter(r[2],
                                    ODBC_REFERENCE,
                                    r[3]);               /* SQLCHAR *    */
                    fetch_parameter(r[3],ODBC_VALUE,0);       /* SQLSMALLINT  */
                    fetch_parameter(r[4],
                                    ODBC_REFERENCE,
                                    r[5]);               /* SQLCHAR *    */
                    fetch_parameter(r[5],ODBC_VALUE,0);       /* SQLSMALLINT  */
                    fetch_parameter(r[6],
                                    ODBC_REFERENCE,
                                    block[0]);           /* SQLCHAR *    */
                    fetch_parameter(block[0],ODBC_VALUE,0);   /* SQLSMALLINT  */
                    fetch_parameter(block[1],
                                    ODBC_REFERENCE,
                                    block[2]);           /* SQLCHAR *    */
                    fetch_parameter(block[2],ODBC_VALUE,0);   /* SQLSMALLINT  */
                     free_parameters();
                    break;

                case SQL_SpecialColumns:

                    block = (int *)r[7];

                    initialise_parameters(SQL_SystemTables,SQL_SpecialColumns);
                    fetch_parameter(r[1],ODBC_VALUE,0);       /* SQLHSTMT     */
                    fetch_parameter(r[2],ODBC_VALUE,0);       /* SQLUSMALLINT */
                    fetch_parameter(r[3],
                                    ODBC_REFERENCE,
                                    r[4]);               /* SQLCHAR *    */
                    fetch_parameter(r[4],ODBC_VALUE,0);       /* SQLUSMALLINT */
                    fetch_parameter(r[5],
                                    ODBC_REFERENCE,
                                    r[6]);               /* SQLCHAR *    */
                    fetch_parameter(r[6],ODBC_VALUE,0);       /* SQLUSMALLINT */
                    fetch_parameter(block[0],
                                    ODBC_REFERENCE,
                                    block[1]);           /* SQLCHAR *    */
                    fetch_parameter(block[1],ODBC_VALUE,0);   /* SQLSMALLINT  */
                    fetch_parameter(block[2],ODBC_VALUE,0);   /* SQLUSMALLINT */
                    fetch_parameter(block[3],ODBC_VALUE,0);   /* SQLUSMALLINT */
                     free_parameters();
                    break;

                case SQL_ForeignKeys:

                    block = (int *)r[7];

                    initialise_parameters(SQL_SystemTables,SQL_ForeignKeys);
                    fetch_parameter(r[1],ODBC_VALUE,0);       /* SQLHSTMT     */
                    fetch_parameter(r[2],
                                    ODBC_REFERENCE,
                                    r[3]);               /* SQLCHAR *    */
                    fetch_parameter(r[3],ODBC_VALUE,0);       /* SQLSMALLINT  */
                    fetch_parameter(r[4],
                                    ODBC_REFERENCE,
                                    r[5]);               /* SQLCHAR *    */
                    fetch_parameter(r[5],ODBC_VALUE,0);       /* SQLSMALLINT  */
                    fetch_parameter(r[6],
                                    ODBC_REFERENCE,
                                    block[0]);           /* SQLCHAR *    */
                    fetch_parameter(block[0],ODBC_VALUE,0);   /* SQLSMALLINT  */
                    fetch_parameter(block[1],
                                    ODBC_REFERENCE,
                                    block[2]);           /* SQLCHAR *    */
                    fetch_parameter(block[2],ODBC_VALUE,0);   /* SQLSMALLINT  */
                    fetch_parameter(block[3],
                                    ODBC_REFERENCE,
                                    block[4]);           /* SQLCHAR *    */
                    fetch_parameter(block[4],ODBC_VALUE,0);   /* SQLSMALLINT  */
                    fetch_parameter(block[5],
                                    ODBC_REFERENCE,
                                    block[6]);           /* SQLCHAR *    */
                    fetch_parameter(block[6],ODBC_VALUE,0);   /* SQLSMALLINT  */
                     free_parameters();
                    break;

                case SQL_PrimaryKeys:
                    initialise_parameters(SQL_SystemTables,SQL_PrimaryKeys);
                    fetch_parameter(r[1],ODBC_VALUE,0);       /* SQLHSTMT     */
                    fetch_parameter(r[2],
                                    ODBC_REFERENCE,
                                    r[3]);               /* SQLCHAR *    */
                    fetch_parameter(r[3],ODBC_VALUE,0);       /* SQLSMALLINT  */
                    fetch_parameter(r[4],
                                    ODBC_REFERENCE,
                                    r[5]);               /* SQLCHAR *    */
                    fetch_parameter(r[5],ODBC_VALUE,0);       /* SQLSMALLINT  */
                    fetch_parameter(r[6],
                                    ODBC_REFERENCE,
                                    r[7]);               /* SQLCHAR *    */
                    fetch_parameter(r[7],ODBC_VALUE,0);       /* SQLSMALLINT  */
                     free_parameters();
                    break;

                case SQL_ProcedureColumns:

                    block = (int *)r[7];

                    initialise_parameters(SQL_SystemTables,SQL_ProcedureColumns);
                    fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                    fetch_parameter(r[2],
                                    ODBC_REFERENCE,
                                    r[3]);               /* SQLCHAR *    */
                    fetch_parameter(r[3],ODBC_VALUE,0);       /* SQLSMALLINT  */
                    fetch_parameter(r[4],
                                    ODBC_REFERENCE,
                                    r[5]);               /* SQLCHAR *    */
                    fetch_parameter(r[5],ODBC_VALUE,0);       /* SQLSMALLINT  */
                    fetch_parameter(r[6],
                                    ODBC_REFERENCE,
                                    block[0]);           /* SQLCHAR *    */
                    fetch_parameter(block[0],ODBC_VALUE,0);   /* SQLSMALLINT  */
                    fetch_parameter(block[1],
                                    ODBC_REFERENCE,
                                    block[2]);           /* SQLCHAR *    */
                    fetch_parameter(block[2],ODBC_VALUE,0);   /* SQLSMALLINT  */
                     free_parameters();
                    break;

                case SQL_Procedures:
                    initialise_parameters(SQL_SystemTables,SQL_Procedures);
                    fetch_parameter(r[1],ODBC_VALUE,0);       /* SQLHSTMT     */
                    fetch_parameter(r[2],
                                    ODBC_REFERENCE,
                                    r[3]);               /* SQLCHAR *    */
                    fetch_parameter(r[3],ODBC_VALUE,0);       /* SQLSMALLINT  */
                    fetch_parameter(r[4],
                                    ODBC_REFERENCE,
                                    r[5]);               /* SQLCHAR *    */
                    fetch_parameter(r[5],ODBC_VALUE,0);       /* SQLSMALLINT  */
                    fetch_parameter(r[6],
                                    ODBC_REFERENCE,
                                    r[7]);               /* SQLCHAR *    */
                    fetch_parameter(r[7],ODBC_VALUE,0);       /* SQLSMALLINT  */
                     free_parameters();
                    break;

                case SQL_Statistics:

                    block = (int *)r[7];

                    initialise_parameters(SQL_SystemTables,SQL_Statistics);
                    fetch_parameter(r[1],ODBC_VALUE,0);        /*      */
                    fetch_parameter(r[2],
                                    ODBC_REFERENCE,
                                    r[3]);               /* SQLCHAR *    */
                    fetch_parameter(r[3],ODBC_VALUE,0);       /* SQLSMALLINT  */
                    fetch_parameter(r[4],
                                    ODBC_REFERENCE,
                                    r[5]);               /* SQLCHAR *    */
                    fetch_parameter(r[5],ODBC_VALUE,0);       /* SQLSMALLINT  */
                    fetch_parameter(r[6],
                                    ODBC_REFERENCE,
                                    block[0]);           /* SQLCHAR *    */
                    fetch_parameter(block[0],ODBC_VALUE,0);   /* SQLSMALLINT  */
                    fetch_parameter(block[1],ODBC_VALUE,0);   /* SQLUSMALLINT  */
                    fetch_parameter(block[2],ODBC_VALUE,0);   /* SQLUSMALLINT  */
                     free_parameters();
                    break;

                case SQL_TablePrivileges:
                    initialise_parameters(SQL_SystemTables,SQL_TablePrivileges);
                    fetch_parameter(r[1],ODBC_VALUE,0);       /* SQLHSTMT     */
                    fetch_parameter(r[2],
                                    ODBC_REFERENCE,
                                    r[3]);               /* SQLCHAR *    */
                    fetch_parameter(r[3],ODBC_VALUE,0);       /* SQLSMALLINT  */
                    fetch_parameter(r[4],
                                    ODBC_REFERENCE,
                                    r[5]);               /* SQLCHAR *    */
                    fetch_parameter(r[5],ODBC_VALUE,0);       /* SQLSMALLINT  */
                    fetch_parameter(r[6],
                                    ODBC_REFERENCE,
                                    r[7]);               /* SQLCHAR *    */
                    fetch_parameter(r[7],ODBC_VALUE,0);       /* SQLSMALLINT  */
                    free_parameters();
                    break;

                case SQL_Tables:

                    block = (int *)r[7];

                    initialise_parameters(SQL_SystemTables,SQL_Tables);
                    fetch_parameter(r[1],ODBC_VALUE,0);       /* SQLHSTMT     */
                    fetch_parameter(r[2],
                                    ODBC_REFERENCE,
                                    r[3]);               /* SQLCHAR *    */
                    fetch_parameter(r[3],ODBC_VALUE,0);       /* SQLSMALLINT  */
                    fetch_parameter(r[4],
                                    ODBC_REFERENCE,
                                    r[5]);               /* SQLCHAR *    */
                    fetch_parameter(r[5],ODBC_VALUE,0);       /* SQLSMALLINT  */
                    fetch_parameter(r[6],
                                    ODBC_REFERENCE,
                                    block[0]);           /* SQLCHAR *    */
                    fetch_parameter(block[0],ODBC_VALUE,0);   /* SQLSMALLINT  */
                    fetch_parameter(block[1],
                                    ODBC_REFERENCE,
                                    block[2]);           /* SQLCHAR *    */
                    fetch_parameter(block[2],ODBC_VALUE,0);   /* SQLSMALLINT  */
                    free_parameters();
                    break;
                }

            break;

        case SQL_Terminate - SQL_Base:

            switch (r[0])
                {
                case SQL_CloseCursor:
                    initialise_parameters(SQL_Terminate,SQL_CloseCursor);
                    fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                     free_parameters();
                    break;

                case SQL_Cancel:
                    initialise_parameters(SQL_Terminate,SQL_Cancel);
                    fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHSTMT     */
                     free_parameters();
                    break;

                case SQL_EndTran:
                    initialise_parameters(SQL_Terminate,SQL_EndTran);
                    fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLSMALLINT  */
                    fetch_parameter(r[2],ODBC_VALUE,0);        /* SQLHANDLE    */
                    fetch_parameter(r[3],ODBC_VALUE,0);        /* SQLSMALLINT  */
                     free_parameters();
                    break;

                case SQL_Transact:
                    initialise_parameters(SQL_Terminate,SQL_Transact);
                    fetch_parameter(r[1],ODBC_VALUE,0);        /* SQLHENV      */
                    fetch_parameter(r[2],ODBC_VALUE,0);        /* SQLHDBC      */
                    fetch_parameter(r[3],ODBC_VALUE,0);        /* SQLUSMALLINT */
                     free_parameters();
                    break;
                }

            break;

        case SQL_QueryStatus - SQL_Base:

            switch (r[0])
                {
                case SQL_QueryStatusSet:
                    odbcquerytype.state = (ODBCLibState)r[1];
                    break;

                case SQL_QueryStatusGet:
                    r[1] = odbcquerytype.state;
                    break;

                case SQL_QueryStatusParameters:
                    r[1] = (int)odbcquerytype.parameters;
                    break;

                case SQL_QueryStatusReplySet:
                    odbcquerytype.reply = r[1];
                    break;

                case SQL_QueryStatusReplyGet:
                    r[1] = odbcquerytype.reply;
                    break;

                case SQL_QueryStatusType:
                    r[1] = odbcquerytype.type;
                    r[2] = odbcquerytype.subtype;
                    break;
                }

            break;

        case SQL_DMTask - SQL_Base:

            switch (r[0])
                {
                case SQL_DMTaskSet:
                    odbcquerytype.task = r[1];
                    odbcquerytype.version = r[2];
                    break;

                case SQL_DMTaskGet:
                    r[1] = odbcquerytype.task;
                    r[2] = odbcquerytype.version;
                    break;
                }

            break;
        }

    r[0] = (int)odbcquerytype.reply;

    return NULL;
    }
