CONVERT

CONVERT 谓词将 ASCII 字符串转换为 EBCDIC 或将 EBCDIC 字符串转换为 ASCII。 要转换的字符串称为源字符串。 转换后的字符串称为目标字符串。

以下结构描述了 CONVERT 谓词使用的谓词控制块 (VCB) 。

语法

  
struct convert {  
    unsigned short       opcode;  
    unsigned char        opext;  
    unsigned char        reserv2;  
    unsigned short       primary_rc;  
    unsigned long        secondary_rc;  
    unsigned char        direction;  
    unsigned char        char_set;  
    unsigned short       len;  
    unsigned char FAR *  source;  
    unsigned char FAR *  target;  
};  

成员

opcode
提供的参数。 标识操作代码的谓词,SV_CONVERT。

opext
一个保留字段。

reserv2
一个保留字段。

primary_rc
返回的参数。 指定在谓词完成时由 APPC 设置的主要返回代码。 有效的返回代码因发出的 APPC 谓词而异。 有关此谓词的有效错误代码,请参阅“返回代码”。

secondary_rc
返回的参数。 指定在谓词完成时由 APPC 设置的次要返回代码。 有效的返回代码因发出的 APPC 谓词而异。 有关此谓词的有效错误代码,请参阅“返回代码”。

direction
提供的参数。 指定转换的方向。 若要从 ASCII 转换为 EBCDIC,请使用 SV_ASCII_TO_EBCDIC。 若要从 EBCDIC 转换为 ASCII,请使用 SV_EBCDIC_TO_ASCII。

char_set
提供的参数。 指定要在转换源字符串时使用的字符集。 允许的值包括SV_A (类型 A 字符集) 、SV_AE (类型 AE 字符集) 和SV_G (用户定义类型 G 字符集) 。

len
提供的参数。 指定要转换的字符数。

此长度加上源或目标缓冲区开头的偏移量不得超过段边界。

source
提供的参数。 指定包含要转换的字符串的缓冲区的地址。

目标
提供的参数。 指定要包含转换后的字符串的缓冲区的地址。

此缓冲区可以与 参数指向的缓冲区重叠或重合。 在这种情况下,转换后的数据字符串将覆盖源数据字符串。

返回代码

SV_OK
主要返回代码;谓词已成功执行。

SV_PARAMETER_CHECK
主要返回代码;由于参数错误,谓词未执行。

SV_CONVERSION_ERROR

辅助返回代码;在转换表中找不到源字符串中的一个或多个字符。 这些字符已转换为 null (0x00) 。 谓词仍在执行。

SV_INVALID_CHARACTER_SET

辅助返回代码; char_set 参数包含无效值。

SV_INVALID_DATA_SEGMENT

辅助返回代码;包含源或目标字符串的数据缓冲区不适合一个段,或者目标段不是读/写段。

SV_INVALID_DIRECTION

辅助返回代码;方向包含无效值。

SV_INVALID_FIRST_CHARACTER

辅助返回代码;类型 A 源字符串的第一个字符无效。

SV_TABLE_ERROR

辅助返回代码;发生了以下情况之一:

  • 环境变量 CSVTBLG 未指定包含用户编写的 G 类型转换表的文件。

  • 表的格式不正确。

  • 找不到 CSVTBLG 变量指定的文件。

    SV_COMM_SUBSYSTEM_NOT_LOADED
    主要返回代码;处理谓词时无法加载或终止某个必需的组件。 因此无法通信。 请联系系统管理员以执行纠正措施。

    SV_INVALID_VERB
    主要返回代码;opcode 参数与任何谓词的操作代码都不匹配。 未执行任何谓词。

    SV_INVALID_VERB_SEGMENT
    主要返回代码;VCB 超出了数据段的末尾。

    SV_UNEXPECTED_DOS_ERROR
    主要返回代码;发生了以下状况之一:

  • Microsoft Windows 系统在处理谓词时遇到错误。 已通过次要返回代码返回了操作系统返回代码。 如果该问题持续出现,请联系系统管理员执行纠正措施。

  • 从另一个应用程序(其中发出的是 Windows SendMessage 函数调用,而不是更常见的 Windows PostMessage 函数调用)调用的消息循环发出了 CSV 。 无法处理谓词。

  • 当 SendMessage 调用你的应用程序时发出了 CSV。 可以使用 InSendMessage Windows API 函数调用来确定应用程序是否是通过 SendMessage 调用的 。

备注

类型 A 字符集包括:

  • 大写字母。

  • 0 到 9 的数字。

  • 特殊字符 $、#、@ 和空格。

    系统提供的类型 A 转换表支持此字符集。

    源字符串的第一个字符必须是大写字母或特殊字符 $、#或 @。 空格只允许出现在尾部位置。 当方向为 ASCII 到 EBCDIC 时,小写 ASCII 字母将转换为大写 EBCDIC 字母。

    类型 AE 字符集包括:

  • 大写字母。

  • 小写字母。

  • 0 到 9 的数字。

  • 特殊字符 $、#、@、句点和空格。

    系统提供的类型 AE 转换表支持此字符集。

    源字符串的第一个字符可以是字符集中的任何字符,空格除外。 空格只允许出现在尾部位置。

    在转换过程中,嵌入的空白字符(包括第一个位置的空白字符)将转换为 0x00。 尽管这种转换会完成,但将以次要返回代码的形式返回 CONVERSION_ERROR,表示 CSV 库已对提供的数据完成了不可逆的转换。

    对于 Windows,COMTBLG 的说明应指向 \SnaBase\Parameters\Client 下的 Windows 注册表。

    类型 G 转换表的数据必须是长度为 32 行的 ASCII 文件。 每行必须由 32 个十六进制数字组成,表示 16 个字符,并由回车符和换行符终止。 前 16 行 (256 个字符) 指定 ASCII 字符转换为的 EBCDIC 字符;其余 16 行指定将 EBCDIC 字符转换为的 ASCII 字符。

    十六进制数字 A 到 F 可以是大写或小写。 但是,你可能希望将这些数字设置为大写,以确保与 IBM ES for OS/2 版本 1.0 兼容。

注意

可以使用 GET_CP_CONVERT_TABLE 在内存中生成类型 G 用户编写的转换表,然后将该表存储在文件中。