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。
- 特殊字元 $、#、@、句號和空格。
系統提供的 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) 字串不同。