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 用户编写的转换表,然后将该表存储在文件中。