Example of using suffix-W APIs

You can use suffix-W APIs to handle application encoding schemes.

The following example shows an example ODBC application that uses three suffix-W APIs to handle a Unicode UCS-2 application encoding scheme.
Figure 1. An application that uses suffix-W APIs
/******************************************************************/
/*  Main program                                                  */
/*  - CREATE MYTABLE                                              */
/*  - INSERT INTO MYTABLE using literals                          */
/*  - INSERT INTO MYTABLE using parameter markers                 */
/*  - SELECT FROM MYTABLE with WHERE clause                       */
/*                                                                */
/*  suffix-W APIS used:                                           */
/*  - SQLConnectW                                                 */
/*  - SQLPrepareW                                                 */
/*  - SQLExecDirectW                                              */
/******************************************************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <wstr.h>
#include "sqlcli1.h"
#include <stlca.h>
#include <errno.h>
#include <sys/_messag.h>
#pragma convlit(suspend)
    SQLHENV         henv  = SQL_NULL_HENV;
    SQLHDBC         hdbc  = SQL_NULL_HDBC;
    SQLHSTMT        hstmt = SQL_NULL_HSTMT;
    SQLRETURN       rc    = SQL_SUCCESS;
    SQLINTEGER      id;
    SQLSMALLINT     scale;
    SQLCHAR         server[18]
    SQLCHAR         uid[30]
    SQLCHAR         pwd[30]
    SQLSMALLINT     pcpar=0;
    SQLSMALLINT     pccol=0;
    SQLCHAR         sqlstmt[200]
    SQLINTEGER      sqlstmtlen;
    SQLWCHAR        H1INT4      [50]
    SQLWCHAR        H1SMINT     [50]
    SQLWCHAR        H1CHR10     [50]
    SQLWCHAR        H1CHR10MIX  [50]
    SQLWCHAR        H1VCHR20    [50]
    SQLWCHAR        H1VCHR20MIX [50]
    SQLWCHAR        H1GRA10     [50]
    SQLWCHAR        H1VGRA20    [50]
    SQLWCHAR        H1TTIME     [50]
    SQLWCHAR        H1DDATE     [50]
    SQLWCHAR        H1TSTMP     [50]
    SQLWCHAR        H2INT4      [50]
    SQLWCHAR        H2SMINT     [50]
    SQLWCHAR        H2CHR10     [50]
    SQLWCHAR        H2CHR10MIX  [50]
    SQLWCHAR        H2VCHR20    [50]
    SQLWCHAR        H2VCHR20MIX [50]
    SQLWCHAR        H2GRA10     [50]
    SQLWCHAR        H2VGRA20    [50]
    SQLWCHAR        H2TTIME     [50]
    SQLWCHAR        H2DDATE     [50]
    SQLWCHAR        H2TSTMP     [50]
    SQLINTEGER      LEN_H1INT4;
    SQLINTEGER      LEN_H1SMINT;
    SQLINTEGER      LEN_H1CHR10;
    SQLINTEGER      LEN_H1CHR10MIX;
    SQLINTEGER      LEN_H1VCHR20;
    SQLINTEGER      LEN_H1VCHR20MIX;
    SQLINTEGER      LEN_H1GRA10;
    SQLINTEGER      LEN_H1VGRA20;
    SQLINTEGER      LEN_H1TTIME;
    SQLINTEGER      LEN_H1DDATE; 
    SQLINTEGER      LEN_H1TSTMP;
    SQLINTEGER      LEN_H2INT4;
    SQLINTEGER      LEN_H2SMINT;
    SQLINTEGER      LEN_H2CHR10; 
    SQLINTEGER      LEN_H2CHR10MIX;
    SQLINTEGER      LEN_H2VCHR20;
    SQLINTEGER      LEN_H2VCHR20MIX;
    SQLINTEGER      LEN_H2GRA10;
    SQLINTEGER      LEN_H2VGRA20;
    SQLINTEGER      LEN_H2TTIME;
    SQLINTEGER      LEN_H2DDATE;
    SQLINTEGER      LEN_H2TSTMP;
    SQLWCHAR        DROPW1  [100]
    SQLWCHAR        DELETEW1[100]
    SQLWCHAR        SELECTW1[100]
    SQLWCHAR        CREATEW1[500]
    SQLWCHAR        INSERTW1[500]
    SQLWCHAR        DROPW2  [100]
    SQLWCHAR        DELETEW2[100]
    SQLWCHAR        SELECTW2[100]
    SQLWCHAR        CREATEW2[500]
    SQLWCHAR        INSERTW2[500]
    SQLINTEGER      LEN_H1INT4;
    SQLINTEGER      LEN_DROPW1;
    SQLINTEGER      LEN_DELETEW1;
    SQLINTEGER      LEN_INSERTW1;
    SQLINTEGER      LEN_CREATEW1;
    SQLINTEGER      LEN_SELECTW1;
    SQLINTEGER      LEN_DROPW2;
    SQLINTEGER      LEN_DELETEW2;
    SQLINTEGER      LEN_INSERTW2;
    SQLINTEGER      LEN_CREATEW2;
    SQLINTEGER      LEN_SELECTW2;
    struct {
      short LEN;
      char  DATA&lbracket;200&rbracket;; }  STMTSQL;
    long               SPCODE;
    int                result;
    int                ix, locix;
/******************************************************************/
int main()
{
  henv=0;
  rc=SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
  if( rc != SQL_SUCCESS ) goto dberror;
  hdbc=0;
  rc=SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
  if( rc != SQL_SUCCESS ) goto dberror;
  /*****************************************************************/
  /*  Setup application host variables (UCS-2 character strings)   */
  /*****************************************************************/
#pragma convlit(resume)
  wcscpy(uid, (wchar_t *)"jgold");
  wcscpy(pwd, (wchar_t *)"general");
  wcscpy(server, (wchar_t *)"STLEC1");
  wcscpy(DROPW1, (wchar_t *)
    "DROP TABLE MYTABLE");
  LEN_DROPW1=wcslen((wchar_t *)DROPW1);
  wcscpy(SELECTW1, (wchar_t *)
    "SELECT * FROM MYTABLE WHERE INT4=200");
  LEN_SELECTW1=wcslen((wchar_t *)SELECTW1);
  wcscpy(CREATEW1, (wchar_t *)
    "CREATE TABLE MYTABLE ( ");
  wcscat(CREATEW1, (wchar_t *)
    "INT4 INTEGER, SMINT SMALLINT, ");
  wcscat(CREATEW1, (wchar_t *)
    "CHR10 CHAR(10), CHR10MIX CHAR(10) FOR MIXED DATA, ");
  wcscat(CREATEW1, (wchar_t *)
    "VCHR20 VARCHAR(20), VCHR20MIX VARCHAR(20) FOR MIXED DATA, ");
  wcscat(CREATEW1, (wchar_t *)
    "GRA10 GRAPHIC(10), VGRA20 VARGRAPHIC(20), ");
  wcscat(CREATEW1, (wchar_t *)
    "TTIME TIME, DDATE DATE, TSTMP TIMESTAMP )" );
  LEN_CREATEW1=wcslen((wchar_t *)CREATEW1);
  wcscpy(DELETEW1, (wchar_t *)
    "DELETE FROM MYTABLE WHERE INT4 IS NULL OR INT4 IS NOT NULL");
  LEN_DELETEW1=wcslen((wchar_t *)DELETEW1);
  wcscpy(INSERTW1, (wchar_t *)
    "INSERT INTO MYTABLE VALUES ( ");
  wcscat(INSERTW1, (wchar_t *)
    "( 100,1,'CHAR10','CHAR10MIX','VARCHAR20','VARCHAR20MIX', ");
  wcscat(INSERTW1, (wchar_t *)
    "G' A B C', VARGRAPHIC('ABC'), ");
  wcscat(INSERTW1, (wchar_t *)
    "'3:45 PM', '06/12/1999', ");
  wcscat(INSERTW1, (wchar_t *)
    "'1999-09-09-09.09.09.090909' )" );
  LEN_INSERTW1=wcslen((wchar_t *)INSERTW1);
  wcscpy(INSERTW2, (wchar_t *)
    "INSERT INTO MYTABLE VALUES (?,?,?,?,?,?,?,?,?,?,?)");
  LEN_INSERTW2=wcslen((wchar_t *)INSERTW2);
  wcscpy(H1INT4     , (wchar_t *)"200");
  wcscpy(H1SMINT    , (wchar_t *)"5");
  wcscpy(H1CHR10    , (wchar_t *)"CHAR10");
  wcscpy(H1CHR10MIX , (wchar_t *)"CHAR10MIX");
  wcscpy(H1VCHR20   , (wchar_t *)"VARCHAR20");
  wcscpy(H1VCHR20MIX, (wchar_t *)"VARCHAR20MIX");
  wcscpy(H1TTIME    , (wchar_t *)"3:45 PM");
  wcscpy(H1DDATE    , (wchar_t *)"06/12/1999");
  wcscpy(H1TSTMP    , (wchar_t *)"1999-09-09-09.09.09.090909");
#pragma convlit(suspend)
  /* 0xFF21,0xFF22,0xFF23,0x0000 */
  wcscpy(H1GRA10    , (wchar_t *)"    ");
  /* 0x0041,0xFF21,0x0000 */
  wcscpy(H1VGRA20   , (wchar_t *)"    ");
  LEN_H1INT4      = SQL_NTS;  
  LEN_H1SMINT = SQL_NTS;
  LEN_H1CHR10     = SQL_NTS;
  LEN_H1CHR10MIX  = SQL_NTS;
  LEN_H1VCHR20    = SQL_NTS;
  LEN_H1VCHR20MIX = SQL_NTS;
  LEN_H1GRA10     = SQL_NTS;
  LEN_H1VGRA20    = SQL_NTS;
  LEN_H1TTIME     = SQL_NTS;
  LEN_H1DDATE     = SQL_NTS;
  LEN_H1TSTMP     = SQL_NTS;  
  /*****************************************************************/
  /*  SQLConnectW                                                  */
  /*****************************************************************/
  rc=SQLConnectW(hdbc, NULL, 0, NULL, 0, NULL, 0);
  if( rc != SQL_SUCCESS ) goto dberror;
  /*****************************************************************/
  /*  DROP TABLE - SQLExecuteDirectW                               */
  /*****************************************************************/
  hstmt=0;
  rc=SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
  if( rc != SQL_SUCCESS ) goto dberror;
  rc=SQLExecDirectW(hstmt,DROPW1,SQL_NTS);
  if( rc != SQL_SUCCESS ) goto dberror;
  rc=SQLEndTran(SQL_HANDLE_DBC, hdbc, SQL_COMMIT);
  if( rc != SQL_SUCCESS ) goto dberror;
  rc=SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
  if( rc != SQL_SUCCESS ) goto dberror;
  /*****************************************************************/
  /*  CREATE TABLE MYTABLE - SQLPrepareW                           */
  /*****************************************************************/
  hstmt=0;
  rc=SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
  if( rc != SQL_SUCCESS ) goto dberror;
  rc=SQLPrepareW(hstmt,CREATEW1,SQL_NTS);
  if( rc != SQL_SUCCESS) goto dberror;
  rc=SQLExecute(hstmt);
  if( rc != SQL_SUCCESS ) goto dberror;
  rc=SQLEndTran(SQL_HANDLE_DBC, hdbc, SQL_COMMIT);
  if( rc != SQL_SUCCESS ) goto dberror;
  rc=SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
  if( rc != SQL_SUCCESS ) goto dberror;
  /*****************************************************************/
  /*  INSERT INTO MYTABLE with literals - SQLExecDirectW           */
  /*****************************************************************/
  hstmt=0;
  rc=SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
  if( rc != SQL_SUCCESS ) goto dberror;
  rc=SQLExecDirectW(hstmt,DROPW1,SQL_NTS);
  if( rc != SQL_SUCCESS) goto dberror;
  rc=SQLEndTran(SQL_HANDLE_DBC, hdbc, SQL_COMMIT);
  if( rc != SQL_SUCCESS) goto dberror;
  rc=SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
  if( rc != SQL_SUCCESS) goto dberror;
  /*****************************************************************/
  /*  INSERT INTO MYTABLE with parameter markers                   */
  /*  - SQLPrepareW                                                */
  /*  - SQLBindParameter with SQL_C_WCHAR symbolic C data type     */
  /*****************************************************************/
  hstmt=0;
      rc=SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);                                                                                                           
  if( rc != SQL_SUCCESS ) goto dberror;
  /*  INSERT INTO MYTABLE VALUES (?,?,?,?,?,?,?,?,?,?,?)  */
  rc=SQLPrepareW(hstmt,INSERTW2,SQL_NTS);
  if( rc != SQL_SUCCESS ) goto dberror;
  rc=SQLNumParams(hstmt, &pcpar);
  if( rc != SQL_SUCCESS) goto dberror;
  printf("\nAPDV1                                 number= 19");
  if( pcpar != 11 ) goto dberror;
  /* Bind INTEGER parameter */
  rc= SQLBindParameter(hstmt,
                       1,
                       SQL_PARAM_INPUT,
                       SQL_C_WCHAR,
                       SQL_INTEGER,
                       10,
                       0,
                       (SQLPOINTER)H1INT4,
                       sizeof(H1INT4
),                     (SQLINTEGER *)&LEN_H1INT4 );
  if( rc != SQL_SUCCESS) goto dberror;
  /* Bind SMALLINT parameter */
  rc = SQLBindParameter(hstmt,
                      2,
                      SQL_PARAM_INPUT,
                      SQL_C_WCHAR,
                      SQL_SMALLINT,
                      5,
                      0,
                      (SQLPOINTER)H1SMINT,
                      sizeof(H1SMINT),
                      (SQLINTEGER*)&LEN_H1SMINT);
 if( rc != SQL_SUCCESS ) goto dberror;
  /* Bind CHAR(10) parameter */
  rc = SQLBindParameter(hstmt,
                        3,
                        SQL_PARAM_INPUT,
                        SQL_C_WCHAR,
                        SQL_CHAR,
                        10, 
                        0,
                        (SQLPOINTER)H1CHR10,
                        sizeof(H1CHR10),
                        (SQLINTEGER *)&LEN_H1CHR10);
  if( rc != SQL_SUCCESS ) goto dberror;
  /* Bind CHAR(10) parameter */
  rc = SQLBindParameter(hstmt,
                        3,
                        SQL_PARAM_INPUT,
                        SQL_C_WCHAR,
                        SQL_CHAR,
                        10,
                        0,
                        (SQLPOINTER)H1CHR10,
                        sizeof(H1CHR10),
                        (SQLINTEGER *)&LEN_H1CHR10);
  if( rc != SQL_SUCCESS ) goto dberror;
  /* Bind CHAR(10) FOR MIXED parameter */
  rc = SQLBindParameter(hstmt,
                         4,
                        SQL_PARAM_INPUT,
                        SQL_C_WCHAR,
                        SQL_CHAR,
                        10,
                        0,
                        (SQLPOINTER)H1CHR10MIX,
                        sizeof(H1CHR10MIX),
                        (SQLINTEGER *)&LEN_H1CHR10MIX);
  if( rc != SQL_SUCCESS ) goto dberror;
 /* Bind VARCHAR(20) parameter */
 rc = SQLBindParameter(hstmt,
                         5,
                         SQL_PARAM_INPUT,
                         SQL_C_WCHAR,
                         SQL_VARCHAR,
                         20,
                         0,
                         (SQLPOINTER)H1VCHR20,
                         sizeof(H1VCHR20),
                         (SQLINTEGER *)&LEN_H1VCHR20);
  if( rc != SQL_SUCCESS ) goto dberror;
  /* Bind VARCHAR(20) FOR MIXED parameter */
  rc = SQLBindParameter(hstmt,
                        6,
                        SQL_PARAM_INPUT,
                        SQL_C_WCHAR,
                        SQL_VARCHAR,
                        20,
                        0,
                        (SQLPOINTER)H1VCHR20MIX,
                        sizeof(H1VCHR20MIX),
                        (SQLINTEGER *)&LEN_H1VCHR20MIX);
  if( rc != SQL_SUCCESS ) goto dberror;
  /* Bind GRAPHIC(10) parameter */
  rc = SQLBindParameter(hstmt,
                        7,
                        SQL_PARAM_INPUT,
                        SQL_C_WCHAR,
                        SQL_GRAPHIC,
                        10,
                        0,
                        (SQLPOINTER)H1GRA10,
                        sizeof(H1GRA10),
                        (SQLINTEGER *)&LEN_H1GRA10);
  if( rc != SQL_SUCCESS ) goto dberror;
  /* Bind VARGRAPHIC(20) parameter*/
  rc = SQLBindParameter(hstmt,
                        8,
                        SQL_PARAM_INPUT,
                        SQL_C_WCHAR,
                        SQL_VARGRAPHIC,
                        20,
                        0,
                        (SQLPOINTER)H1VGRA20,
                        sizeof(H1VGRA20),
                        (SQLINTEGER *)&LEN_H1VGRA20);
  if( rc != SQL_SUCCESS ) goto dberror;
  /* Bind TIME parameter */
  rc= SQLBindParameter(hstmt,
                       9,
                       SQL_PARAM_INPUT,
                       SQL_C_WCHAR,
                       SQL_TIME,
                       8,
                       0,
                       (SQLPOINTER)H1TTIME,
                       sizeof(H1TTIME),
                       (SQLINTEGER *)&LEN_H1TTIME);
  if( rc != SQL_SUCCESS) goto dberror;
  /* Bind DATE parameter */
  rc = SQLBindParameter(hstmt,
                        10,
                        SQL_PARAM_INPUT,
                        SQL_C_WCHAR,
                        SQL_DATE,
                        10,
                        0,
                        (SQLPOINTER)H1DDATE,
                        sizeof(H1DDATE),
                        (SQLINTEGER *)&LEN_H1DDATE);
  if( rc != SQL_SUCCESS ) goto dberror;
  /* Bind TIMESTAMP parameter */
  rc = SQLBindParameter(hstmt,
                        11
                        SQL_PARAM_INPUT,
                        SQL_C_WCHAR,
                        SQL_DATE,
                        26,
                        0,
                        (SQLPOINTER)H1TSTMP,
                        sizeof(H1TSTMP),
                        (SQLINTEGER *)&LEN_H1TSTMP);
  if( rc != SQL_SUCCESS ) goto dberror;
  printf("\nAPDV1 SQLExecute                     number= 25");
  rc=SQLExecute(hstmt);
  if( rc != SQL_SUCCESS) goto dberror;
  printf("\nAPDV1 SQLEndTran                     number=26");
  rc=SQLEndTran(SQL_HANDLE_DBC, hdbc, SQL_COMMIT);
  if( rc != SQL_SUCCESS ) goto dberror;
  printf("\nAPDV1 SQLFreeHandle(SQL_HANDLE_STMT, ...) number= 27");
  rc=SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
  if( rc != SQL_SUCCESS ) goto dberror;
  /*****************************************************************/
  /*  SELECT FROM MYTABLE WHERE INT4=200                           */
  /*  - SQLBindCol with SQL_C_WCHAR symbolic C data type           */
  /*  - SQLExecDirectW                                             */
  /*****************************************************************/
  hstmt=0;
  rc=SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
  if( rc != SQL_SUCCESS ) goto dberror;
  /* Bind INTEGER column */
  rc = SQLBindCol(hstmt,
                  1,
                  SQL_C_WCHAR,
                  (SQLPOINTER)H2INT4,
                  sizeof(H2INT4 ),
                  (SQLINTEGER *)&LEN_H2INT4 );
  if( rc != SQL_SUCCESS ) goto dberror;
 /* Bind SMALLINT column */
  rc = SQLBindCol(hstmt,
                  2,
                  SQL_C_WCHAR,
                  (SQLPOINTER)H2SMINT,
                  sizeof(H2SMINT),
                  (SQLINTEGER *)&LEN_H2SMINT);
  if( rc != SQL_SUCCESS ) goto dberror;
  /* Bind CHAR(10) column */
  rc = SQLBindCol(hstmt,
                  3,
                  SQL_C_WCHAR,
                  (SQLPOINTER)H2CHR10,
                  sizeof(H2CHR10),
                  (SQLINTEGER *)&LEN_H2CHR10);
  if( rc != SQL_SUCCESS ) goto dberror;
  /* Bind CHAR(10) FOR MIXED column */
  rc = SQLBindCol(hstmt,
                  4,
                  SQL_C_WCHAR,
                  (SQLPOINTER)H2CHR10MIX,
                  sizeof(H2CHR10MIX),
                  (SQLINTEGER *)&LEN_H2CHR10MIX);
  if( rc != SQL_SUCCESS ) goto dberror;
  /* Bind VARCHAR(20) column */
  rc = SQLBindCol(hstmt,
                  5,
                  SQL_C_WCHAR,
                  (SQLPOINTER)H2VCHR20,
                  sizeof(H2VCHR20,
                  (SQLINTEGER *)&LEN_H2VCHR20);
  if( rc != SQL_SUCCESS ) goto dberror;
  /* Bind VARCHAR(20) FOR MIXED column */
  rc = SQLBindCol(hstmt,
                  6,
                  SQL_C_WCHAR,
                  (SQLPOINTER)H2VCHR20MIX,
                  sizeof(H2VCHR20MIX),
                  (SQLINTEGER *)&LEN_H2VCHR20MIX);
  if( rc != SQL_SUCCESS ) goto dberror;
  /* Bind GRAPHIC(10) column */
  rc = SQLBindCol(hstmt,
                  7,
                  SQL_C_WCHAR,
                  (SQLPOINTER)H2GRA10,
                  sizeof(H2GRA10),
                  (SQLINTEGER *)&LEN_H2GRA10);
  if( rc != SQL_SUCCESS ) goto dberror;
  /* Bind VARGRAPHIC(20) column */
  rc = SQLBindCol(hstmt,
                  8,
                  SQL_C_WCHAR,
                  (SQLPOINTER)H2VGRA20,
                  sizeof(H2VGRA20),
                  (SQLINTEGER *)&LEN_H2VGRA20);
  if( rc != SQL_SUCCESS ) goto dberror;
  /* Bind TIME column */
  rc = SQLBindCol(hstmt,
                  9,
                  SQL_C_WCHAR,
                  (SQLPOINTER)H2TTIME,
                  sizeof(H2TTIME),
                  (SQLINTEGER *)&LEN_H2TTIME);
  if( rc != SQL_SUCCESS ) goto dberror;
  /* Bind DATE column */
  rc = SQLBindCol(hstmt,
                  10,
                  SQL_C_WCHAR,
                  (SQLPOINTER)H2DDATE,
                  sizeof(H2DDATE),
                  (SQLINTEGER *)&LEN_H2DDATE);
  if( rc != SQL_SUCCESS ) goto dberror;
  /* Bind TIMESTAMP column */
  rc = SQLBindCol(hstmt,
                  11,
                  SQL_C_WCHAR,
                  (SQLPOINTER)H2TSTMP,
                  sizeof(H2TSTMP),
                  (SQLINTEGER *)&LEN_H2TSTMP);
  if( rc != SQL_SUCCESS ) goto dberror;
  /*
   *   SELECT * FROM MYTABLE WHERE INT4=200
   */
  rc=SQLExecDirectW(hstmt,SELECTW1,SQL_NTS);
  if( rc != SQL_SUCCESS ) goto dberror;
  rc=SQLFetch(hstmt);
  if( rc != SQL_SUCCESS ) goto dberror;
  rc=SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
  if( rc != SQL_SUCCESS ) goto dberror;
/*****************************************************************/
  rc=SQLDisconnect(hdbc);
  if( rc != SQL_SUCCESS ) goto dberror;
  rc=SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
  if( rc != SQL_SUCCESS ) goto dberror;
  rc=SQLFreeHandle(SQL_HANDLE_ENV, henv);
  if( rc != SQL_SUCCESS ) goto dberror;
  dberror:
  rc = SQL_ERROR;
  return(rc);
}  /*END MAIN*/