IBM Books

Net.Data 语言环境参考


附录 A. 语言环境模板

使用这个模板来创建您自己的语言环境。

图 2. 语言环境模板

/**********************************************************************/
/*                                                                    */
/* 文件名                                                             */
/*                                                                    */
/* 说明                                                               */
/*                                                                    */
/* 功能                                                               */
/*                                                                    */
/* 入口点                                                             */
/*                                                                    */
/* 更改活动性                                                         */
/*                                                                    */
/* 标志    原因        日期      开发者        说明                   */
/* ------  ----------  --------  ------------  ---------------------- */
/*                                                                    */
/**********************************************************************/
 
/*--------------------------------------------------------------------*/
/* 包含文件                                                           */
/*--------------------------------------------------------------------*/
#include "dtwle.h"
 

 
#ifdef __MVS__
#pragma export(dtw_initialize)
#pragma export(dtw_execute)
#pragma export(dtw_getNextRow)
#pragma export(dtw_cleanup)
#endif
 
#ifdef _AIX_
//*--------------------------------------------------------------------*/
/* 函数                                                               */
/*    dtw_getFp                                                       */
/*                                                                    */
/* 目的                                                               */
/*    设置函数的指针,使之指向此语言环境所提供的所有语言环境接口      */
/*    例程。如果结构中的某个例程没有提供,则将该字段设置为 NULL。     */
/*                                                                    */
/* 格式                                                               */
/*    int dtw_getFp(dtw_fp_t *func_pointer)                           */
/*                                                                    */
/* 参数                                                               */
/*    func_pointer     一个指向结构的指针,该结构中包含此语言环境     */
/*                     为所有函数提供的函数指针。                     */
/*                                                                    */
/* 返回                                                               */
/*    成功 ....... 0                                                  */
/*    失败 ....... -1                                                 */
/*--------------------------------------------------------------------*/
int dtw_getFp(dtw_fp_t *func_pointer)
{
    func_pointer->dtw_initialize_fp = dtw_initialize;
    func_pointer->dtw_execute_fp = dtw_execute;
    func_pointer->dtw_getNextRow_fp = dtw_getNextRow;
    func_pointer->dtw_cleanup_fp = dtw_cleanup;
    return 0;
}
#endif
 

/*--------------------------------------------------------------------*/
/*                                                                    */
/* 函数                                                               */
/*    dtw_initialize                                                  */
/*                                                                    */
/* 目的                                                               */
/*                                                                    */
/* 格式                                                               */
/*    int dtw_initialize(dtw_lei_t *le_interface)                     */
/*                                                                    */
/* 参数                                                               */
/*    le_interface     一个指向结构的指针,该结构中包含以下字段:     */
/*                                                                    */
/*      function_name                                                 */
/*      flags                                                         */
/*      exec_statement                                                */
/*      parm_data_array                                               */
/*      default_error_message                                         */
/*      le_opaque_data                                                */
/*      row                                                           */
/*                                                                    */
/* 返回                                                               */
/*    成功 ....... 0                                                  */
/*    失败 ....... 0                                                  */
/*--------------------------------------------------------------------*/
int dtw_initialize(dtw_lei_t *le_interface)
{
    return rc;
}
 

/*--------------------------------------------------------------------*/
/*                                                                    */
/* 函数                                                               */
/*    dtw_execute                                                     */
/*                                                                    */
/* 目的                                                               */
/*                                                                    */
/* 格式                                                               */
/*    int dtw_execute(dtw_lei_t *le_interface)                        */
/*                                                                    */
/* 参数                                                               */
/*    le_interface     一个指向结构的指针,该结构中包含以下字段:     */
/*                                                                    */
/*      function_name                                                 */
/*      flags                                                         */
/*      exec_statement                                                */
/*      parm_data_array                                               */
/*      default_error_message                                         */
/*      le_opaque_data                                                */
/*      row                                                           */
/*                                                                    */
/* 返回                                                               */
/*    成功 ....... 0                                                  */
/*    失败 ....... 0                                                  */
/*--------------------------------------------------------------------*/
int dtw_execute(dtw_lei_t *le_interface)
{
    /*----------------------------------------------------------------*/
    /* 确定是否指定了 %exec 语句。                                    */
    /*----------------------------------------------------------------*/
    if (le_interface->flags & DTW_STMT_EXEC) {
        /*------------------------------------------------------------*/
        /* 分析 %exec 语句                                            */
        /*------------------------------------------------------------*/
        rc = processExecStmt(le_interface->exec_statement);
    if (rc)
          {
          }
      }
    else {
        /*------------------------------------------------------------*/
        /* 分析在线数据                                               */
        /*------------------------------------------------------------*/
        rc = processInlineData(le_interface->exec_statement);
    if (rc)
          {
          }
      }
 

    /*----------------------------------------------------------------*/
    /* 分析输入参数                                                   */
    /*----------------------------------------------------------------*/
    rc = processInputParms(le_interface->parm_data_array);
    if (rc)
      {
      }
    /*----------------------------------------------------------------*/
    /* 处理请求                                                       */
    /*----------------------------------------------------------------*/
    rc = processRequest();
    if (rc)
      {
      }
    /*----------------------------------------------------------------*/
    /* 处理输出数据                                                   */
    /*----------------------------------------------------------------*/
    rc = processOutputParms(le_interface->parm_data_array);
    if (rc)
      {
      }
    /*----------------------------------------------------------------*/
    /* 处理返回码与缺省的错误消息                                     */
    /*----------------------------------------------------------------*/
    if (rc)
      {
        setErrorMessage(rc, &(le_interface->default_error_message));
      }
    /*----------------------------------------------------------------*/
    /* 清理并退出程序。                                               */
    /*----------------------------------------------------------------*/
    return rc;
}
 

/*--------------------------------------------------------------------*/
/*                                                                    */
/* 函数                                                               */
/*    dtw_getNextRow                                                  */
/*                                                                    */
/* 目的                                                               */
/*                                                                    */
/* 格式                                                               */
/*    int dtw_getNextRow(dtw_lei_t *le_interface)                     */
/*                                                                    */
/* 参数                                                               */
/*    le_interface     一个指向结构的指针,该结构中包含以下字段:     */
/*                                                                    */
/*      function_name                                                 */
/*      flags                                                         */
/*      exec_statement                                                */
/*      parm_data_array                                               */
/*      default_error_message                                         */
/*      le_opaque_data                                                */
/*      row                                                           */
/*                                                                    */
/* 返回                                                               */
/*    成功 ....... 0                                                  */
/*    失败 ....... 0                                                  */
/*--------------------------------------------------------------------*/
int dtw_getNextRow(dtw_lei_t *le_interface)
{
    return rc;
}
 

/*--------------------------------------------------------------------*/
/*                                                                    */
/* 函数                                                               */
/*    dtw_cleanup                                                     */
/*                                                                    */
/* 目的                                                               */
/*                                                                    */
/* 格式                                                               */
/*    int dtw_cleanup(dtw_lei_t *le_interface)                        */
/*                                                                    */
/* 参数                                                               */
/*    le_interface     一个指向结构的指针,该结构中包含以下字段:     */
/*                                                                    */
/*      function_name                                                 */
/*      flags                                                         */
/*      exec_statement                                                */
/*      parm_data_array                                               */
/*      default_error_message                                         */
/*      le_opaque_data                                                */
/*      row                                                           */
/*                                                                    */
/* 返回                                                               */
/*    成功 ....... 0                                                  */
/*    失败 ....... 0                                                  */
/*--------------------------------------------------------------------*/
int dtw_cleanup(dtw_lei_t *le_interface)
{
    /*----------------------------------------------------------------*/
    /* 确定这是正常终止还是异常终止。                                 */
    /*----------------------------------------------------------------*/
    if (le_interface->flags & DTW_END_ABNORMAL) {
        /*------------------------------------------------------------*/
        /* 执行异常终止清理。                                         */
        /*------------------------------------------------------------*/
      }
    else {
        /*------------------------------------------------------------*/
        /* 执行正常终止清理。                                         */
        /*------------------------------------------------------------*/
      }
 
    return rc;
}
 

/*--------------------------------------------------------------------*/
/*                                                                    */
/* 函数                                                               */
/*    processInputParms                                               */
/*                                                                    */
/* 目的                                                               */
/*                                                                    */
/* 格式                                                               */
/*    unsigned long processInputParms(dtw_parm_data_t *parm__data)    */
/*                                                                    */
/* 参数                                                               */
/*    dtw_parm_data_t *parm_data                                      */
/*                                                                    */
/* 返回                                                               */
/*    成功 ..... 0                                                    */
/*    失败 .....                                                      */
/*                                                                    */
/*--------------------------------------------------------------------*/
unsigned long processInputParms(dtw_parm_data_t *parm_data)
{
    /*----------------------------------------------------------------*/
    /* 在参数数据数组中的所有变量之间循环。                           */
    /* 数组以一个空条目终止,意为 parm_name 字段设置为 NULL,         */
    /* parm_value 字段设置为 NULL,parm_descriptor 字段设置为 0。     */
    /* 但是,对于参数数据数组结尾唯一的有效检查是检查是否             */
    /* parm_descriptor == 0,这是因为在将文字串传送进来的时侯         */
    /* parm_name 字段为 NULL,而在将未声明的变量传送进来时            */
    /* parm_value 字段被设置为 NULL。                                 */
    /*----------------------------------------------------------------*/
    for (; parm_data->parm_descriptor != 0; ++parm_data) {
 

        /*------------------------------------------------------------*/
        /* 确定每个输入参数的用法。                                   */
        /*------------------------------------------------------------*/
        switch(parm_data->parm_descriptor & DTW_USAGE) {
 
            case(DTW_IN):
                /*----------------------------------------------------*/
                /* 确定每个输入参数的类型。                           */
                /*----------------------------------------------------*/
                switch (parm_data->parm_descriptor & DTW_TYPE) {
                case DTW_STRING:
            break;
                case DTW_TABLE:
            break;
                default:
                        /*--------------------------------------------*/
                    /* 内部错误 - 未知的数据类型                      */
                        /*--------------------------------------------*/
            break;
                  }
            break;
 
            case(DTW_OUT):
            break;
 
            case(DTW_INOUT):
            break;
 
                default:
                /*----------------------------------------------------*/
                /* 内部错误 - 未知的用法                              */
                /*----------------------------------------------------*/
            break;
          }
      }
    return rc;
}
 

/*--------------------------------------------------------------------*/
/*                                                                    */
/* 函数                                                               */
/*    processOutputParms()                                            */
/*                                                                    */
/* 目的                                                               */
/*                                                                    */
/* 格式                                                               */
/*    unsigned long processOutputParms(dtw_parm_data_t *parm_data)    */
/*                                                                    */
/* 参数                                                               */
/*    dtw_parm_data_t *parm_data                                      */
/*                                                                    */
/* 返回                                                               */
/*    成功 ........ 0                                                 */
/*    失败 ........ -1                                                */
/*                                                                    */
/*--------------------------------------------------------------------*/
unsigned long processOutputParms(dtw_parm_data_t *parm_data) {
    /*----------------------------------------------------------------*/
    /* 以某种特定于语言环境的方式获取输出数据。                       */
    /* 这完全取决于和哪个语言环境进行连接以及 LE 选择如何与之连接。   */
    /*----------------------------------------------------------------*/
 
 

/    /*----------------------------------------------------------------*/
    /* 在参数数据数组中的所有变量之间循环,查找输出参数。             */
    /*----------------------------------------------------------------*/
    for (; parm_data->parm_descriptor != 0; ++parm_data) {
 
        /*------------------------------------------------------------*/
        /* 确定每个参数的用法。                                       */
        /*------------------------------------------------------------*/
        if (pd_i->parm_descriptor & DTW_OUT) {
            /*--------------------------------------------------------*/
                /* 确定每个输入参数的类型。                           */
            /*--------------------------------------------------------*/
            switch (pd_i->parm_descriptor & DTW_TYPE) {
                case DTW_STRING:
                    /*------------------------------------------------*/
                    /* 给字符串参数一个新的值。如果目前参数值不为     */
                    /* NULL,则必须使用 LE 接口应用函数来释放存储     */
                    /* 器(如果它是由 Net.Data 分配的)。               */
                    /*------------------------------------------------*/
                    if (parm_data->parm_value != NULL)
                        dtw_free(parm_data->parm_value);
                    parm_data->parm_value = dtw_strdup(newValue);
            break;
                case DTW_TABLE:
                    /*------------------------------------------------*/
                    /* 更改表格参数的大小。使用 LE 接口应用函数来     */
                    /* 修改表格对象。                                 */
                    /*------------------------------------------------*/
                    /*------------------------------------------------*/
                    /* 首先获取指向表格对象的指针。                   */
                    /*------------------------------------------------*/
                    void *myTable = (void *) parm_data->parm_value;
 

                    /*------------------------------------------------*/
                    /* 接下去获取表格当前的大小。                     */
                    /*------------------------------------------------*/
                    cols = dtw_table_Cols(myTable);
                    rows = dtw_table_Rows(myTable);
                    /*------------------------------------------------*/
                    /* 现在来设置新的大小(假定新的大小值有效)。       */
                    /*------------------------------------------------*/
 
                    /*------------------------------------------------*/
                    /* 先设置列。                                     */
                    /*------------------------------------------------*/
                    if (cols > newColValue)
                      {
                        dtw_table_DeleteCol(myTable,
                                            newColValue + 1,
                                            cols - newColValue);
                      }
                    else if (cols < new_col_value)
                      {
                        dtw_table_InsertCol(myTable,
                                            cols,
                                            newColValue - cols);
                      }
 
                    /*------------------------------------------------*/
                    /* 现在设置行。                                   */
                    /*------------------------------------------------*/
                    if (newColValue > 0) {
                        if (rows > newRowValue)
                          {
                            dtw_table_DeleteRow(myTable,
                                                newRowValue + 1,
                                                rows - newRowValue);
                          }
                        else if (rows < new_row_value)
                          {
                            dtw_table_InsertRow(myTable,
                                                rows,
                                                newRowValue - rows);
                          }
                      }
 

                    /*------------------------------------------------*/
                    /* 现在获取最后一行/列的值。                      */
                    /*------------------------------------------------*/
                    dtw_table_GetV(myTable,
                                   &myValue;,
                                   newRowValue,
                                   newColValue);
 
                    /*------------------------------------------------*/
                    /* 删除最后一行/列的值。                          */
                    /*------------------------------------------------*/
                    dtw_table_SetV(myTable,
                                   NULL,
                                   newRowValue,
                                   newColValue);
 
                    /*------------------------------------------------*/
                    /* 设置最后一行/列的值。                          */
                    /*------------------------------------------------*/
                    dtw_table_SetV(myTable,
                                   dtw_strdup(myNewValue),
                                   newRowValue,
                                   newColValue);
 
            break;
                default:
                    /*------------------------------------------------*/
                    /* 内部错误 - 未知的数据类型                      */
                    /*------------------------------------------------*/
            break;
              }
          }
      }
 
    return 0;
}
 

/*--------------------------------------------------------------------*/
/*                                                                    */
/* 函数                                                               */
/*    setErrorMessage()                                               */
/*                                                                    */
/* 目的                                                               */
/*                                                                    */
/* 格式                                                               */
/*    unsigned long setErrorMessage(int returnCode,                   */
/*                                  char **defaultErrorMessage)       */
/*                                                                    */
/* 参数                                                               */
/*    int    returnCode                                               */
/*    char **defaultErrorMessage                                      */
/*                                                                    */
/* 返回                                                               */
/*    成功 ........ 0                                                 */
/*    失败 ........ -1                                                */
/*                                                                    */
/*--------------------------------------------------------------------*/
unsigned long setErrorMessage(int returnCode,
                             char **defaultErrorMessage)
{
 
    /*----------------------------------------------------------------*/
    /* 根据返回码设置缺省的错误消息。                                 */
    /*----------------------------------------------------------------*/
    switch(returnCode) {
        case LE_SUCCESS:
            break;
        case LE_RC1:
            *defaultErrorMessage = dtw_strdup(LE_RC1_MESSAGE_TEXT);
            break;
        case LE_RC2:
            *defaultErrorMessage = dtw_strdup(LE_RC2_MESSAGE_TEXT);
            break;
        case LE_RC3:
            *defaultErrorMessage = dtw_strdup(LE_RC3_MESSAGE_TEXT);
            break;
        case LE_RC4:
            *defaultErrorMessage = dtw_strdup(LE_RC4_MESSAGE_TEXT);
            rc = LE_RC1INTERNAL;
            break;
      }
    return 0;
}


[ 页的顶部 | 上一页 | 下一页 | 目录 | 索引 ]