GET_CP_CONVERT_TABLE谓词创建并返回一个 256 字节转换表,用于将字符串从源代码页转换为目标代码页。
以下结构描述了 GET_CP_CONVERT_TABLE 谓词使用的谓词控制块(VCB)。
语法
struct get_cp_convert_table {
unsigned short opcode;
unsigned char opext;
unsigned char reserv2;
unsigned short primary_rc;
unsigned long secondary_rc;
unsigned char reserv3[8];
unsigned short source_cp;
unsigned short target_cp;
unsigned char FAR * conv_tbl_addr;
unsigned char char_not_fnd;
unsigned char substitute_char;
};
成员
opcode
提供的参数。 标识作代码的谓词,SV_GET_CP_CONVERT_TABLE。
opext
保留字段。
reserv2
保留字段。
primary_rc
返回的参数。 指定 APPC 在谓词完成时设置的主要返回代码。 有效的返回代码因发布的 APPC 谓词而异。 有关此谓词的有效错误代码,请参阅返回代码。
secondary_rc
返回的参数。 指定 APPC 在谓词完成时设置的辅助返回代码。 有效的返回代码因发布的 APPC 谓词而异。 有关此谓词的有效错误代码,请参阅返回代码。
reserv3
保留字段。
source_cp
提供的参数。 指定从中转换字符的源代码页。 允许的代码页(小数值)如下所示:
ASCII 437, 850, 860, 863, 865
EBCDIC 037、273、277、278、280、284、285、297、500
还允许从 65280 到 65535 范围内的用户定义的代码页。
ASCII 代码页有时称为电脑代码页;EBCDIC 代码页有时称为主机代码页。
target_cp
提供的参数。 指定将字符转换为的目标代码页。 有关允许的代码页,请参阅上述 source_cp定义。
conv_tbl_addr
提供的参数。 指定要包含 256 字节转换表的缓冲区的地址。 缓冲区必须位于可写段中,并且足够长才能包含表。
char_not_fnd
提供的参数。 指定在目标代码页中不存在字符时要执行的作:
使用SV_ROUND_TRIP在每个源代码页字符的转换表中存储唯一值。
使用 SV_SUBSTITUTE 在转换表中存储替换字符(由 substitute_char 指定)。
substitute_char
提供的参数。 指定当源代码页中的字符在目标代码页中没有等效项时,要存储在转换表中的字符。
返回代码
SV_OK
主要返回代码;已成功执行谓词。
SV_PARAMETER_CHECK
主要返回代码;由于参数错误,谓词未执行。
SV_INVALID_CHAR_NOT_FOUND
辅助返回代码; char_not_fnd 参数包含无效值。
SV_INVALID_DATA_SEGMENT
辅助返回代码;为超出段边界的转换表指定的 256 字节区域,或者该段不可写。
SV_INVALID_SOURCE_CODE_PAGE
辅助返回代码;不支持 由source_cp 指定的代码页。
SV_INVALID_TARGET_CODE_PAGE
辅助返回代码;不支持 由target_cp 指定的代码页。
SV_COMM_SUBSYSTEM_NOT_LOADED
主要返回代码;处理谓词时,无法加载或终止所需的组件。 因此,无法进行通信。 请联系系统管理员以采取纠正措施。
SV_INVALID_VERB
主要返回代码; opcode 参数与任何谓词的作代码不匹配。 未执行谓词。
SV_INVALID_VERB_SEGMENT
主要返回代码;VCB 超出了数据段的末尾。
SV_UNEXPECTED_DOS_ERROR
主要返回代码;出现以下情况之一:
Microsoft® Windows® 系统处理谓词时遇到错误。 作系统返回代码是通过辅助返回代码返回的。 如果问题仍然存在,请联系系统管理员以采取纠正措施。
CSV 是从发出 Windows SendMessage 函数调用的另一个应用程序调用的消息循环发出的,而不是较常见的 Windows PostMessage 函数调用。 无法进行谓词处理。
SendMessage 调用应用程序时发出了 CSV。 可以使用 InSendMessage Windows API 函数调用来确定应用程序是否已使用 SendMessage 调用。
注解
类型 A 字符集包括:
- 大写字母。
- 数字 0 到 9。
- 特殊字符 $、#、@和空格。
系统提供的 A 转换表支持此字符集。
源字符串的第一个字符必须是大写字母或特殊字符 $、#或 @。 仅允许在尾随位置使用空格。 当方向为 ASCII 到 EBCDIC 时,小写 ASCII 字母将转换为大写 EBCDIC 字母。
AE 字符集的类型包括:
- 大写字母。
- 小写字母。
- 数字 0 到 9。
- 特殊字符 $、#、@、period 和空格。
系统提供的 AE 转换表支持此字符集。
源字符串的第一个字符可以是字符集中除空格以外的任何字符。
在转换期间,嵌入的空白(包括第一个位置中的空白)将转换为0x00。 尽管此类转换将完成,但CONVERSION_ERROR作为辅助返回代码返回,指示 CSV 库已完成对所提供的数据的不可逆转换。
对于 Windows,COMTBLG 的说明应指向 \SnaBase\Parameters\Client 下的 Windows 注册表。 对于 OS/2作系统,包含表的目录和文件必须由环境变量 COMTBLG 指定。 (如果未找到该文件,系统将返回SV_TABLE_ERROR参数检查。
仅当生成第二个转换表以在反向方向的同一两个代码页之间转换时, char_not_fnd的SV_ROUND_TRIP 值才有用。 如果在生成这两个转换表中指定SV_ROUND_TRIP值,则从一个代码页转换为另一个代码页的任何字符都将保持不变。
使用 char_not_fnd SV_SUBSTITUTE值时,将转换后的字符串转换回原始代码页不一定重新创建原始字符串。
仅当char_not_fnd设置为SV_SUBSTITUTE时,才使用substitute_char。
转换表中存储的值是与字符关联的 ASCII 值。 如果表用于从 ASCII 转换为 EBCDIC,则转换后的字符串中显示的字符是与数字 EBCDIC 值(而不是 ASCII)关联的字符。
例如,如果在创建 ASCII 到 EBCDIC 转换表时提供下划线(ASCII 值 F6),则转换后的字符串中显示的字符将为 6,与 EBCDIC 中的值 F6 关联的字符。若要将 \ 字符用作 ASCII 到 EBCDIC 转换表中的替换字符,应提供值 E1(与 EBCDIC 中的 _ 字符关联的值),而不是实际字符。
代码页是一个表,用于将特定 ASCII 或 EBCDIC 值与特定字符相关联。 如果目标代码页中不存在源代码页中的字符,则翻译后的 (target) 字符串与原始 (source) 字符串不同。