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;
};
成員
操作碼
提供的參數。 識別操作代碼的動詞 SV_CONVERT。
Opext
保留欄位。
後備隊2
保留欄位。
primary_rc
回傳參數。 指定 APPC 在動詞結束時設定的主要回傳代碼。 有效的回傳代碼會依 APPC 所發出的動詞而有所不同。 請參閱返回代碼以了解此動詞的有效錯誤代碼。
secondary_rc
回傳參數。 指定 APPC 在動詞完成時設定的次要回傳碼。 有效的回傳代碼會依 APPC 所發出的動詞而有所不同。 請參閱返回代碼以了解此動詞的有效錯誤代碼。
方向
提供的參數。 指定轉換方向。 若要從 ASCII 轉換成 EBCDIC,請使用 SV_ASCII_TO_EBCDIC。 要從 EBCDIC 轉換成 ASCII,請使用 SV_EBCDIC_TO_ASCII。
char_set
提供的參數。 指定用於轉換原始字串的字元集。 允許的值包括 SV_A(A 型字元集)、SV_AE(AE 型態字元集)和 SV_G(使用者自訂型別 G 字元集)。
len
提供的參數。 指定要轉換的字元數量。
此長度加上從來源或目標緩衝區起始點的偏移量不得超過區段邊界。
源
提供的參數。 指定包含要轉換字元字串的緩衝區位址。
目標
提供的參數。 指定緩衝區的位址以包含轉換後的字串。
此緩衝區可能與 來源 參數指向的緩衝區重疊或重合。 在這種情況下,轉換後的資料字串會覆蓋原始資料字串。
返回碼
SV_OK
主要退稅代碼;動詞成功執行。
SV_PARAMETER_CHECK
主要退稅代碼;該動詞因參數錯誤而未執行。
SV_CONVERSION_ERROR
次要回傳代碼;來源字串中的一個或多個字元未在轉換表中找到。 這些字元被轉換成空值(nulls,0x00)。 動詞仍然執行。
SV_INVALID_CHARACTER_SET
次要回傳代碼; char_set 參數包含無效值。
SV_INVALID_DATA_SEGMENT
次要回傳代碼;包含來源或目標字串的資料緩衝區無法容納在同一區段,或目標區段並非讀寫區段。
SV_INVALID_DIRECTION
次要回傳代碼;該指示包含無效值。
SV_INVALID_FIRST_CHARACTER
次要回傳代碼;A 型原始字串的第一個字元無效。
SV_TABLE_ERROR
次要回傳代碼;以下其中一次發生:
包含使用者撰寫的類型 G 轉換表的檔案並未由環境變數 CSVTBLG 指定。
表格格式不正確。
找不到 CSVTBLG 變數指定的檔案。
SV_COMM_SUBSYSTEM_NOT_LOADED
主要退稅代碼;在處理動詞時,必須的元件無法被載入或終止。 因此,無法進行溝通。 請聯絡系統管理員以採取糾正措施。SV_INVALID_VERB
主要退稅代碼; 操作碼 參數與任何動詞的操作碼不符。 沒有執行動詞。SV_INVALID_VERB_SEGMENT
主要退稅代碼;VCB 的範圍超出資料區段的末端。SV_UNEXPECTED_DOS_ERROR
主要退稅代碼;以下情況之一發生:Microsoft Windows 系統在處理動詞時遇到錯誤。 作業系統的回傳碼則是透過次要回傳碼回傳。 如果問題持續,請聯絡系統管理員以取得糾正處理。
CSV 是從訊息迴圈中發出,該迴圈由另一個應用程式呼叫 Windows SendMessage 函式所觸發,而非較常見的 Windows PostMessage 函式呼叫。 動詞處理無法進行。
當 SendMessage 啟動你的應用程式時,已經發出了一份 CSV 文件。 你可以透過 Windows API 函式呼叫來判斷你的應用程式是否被 SendMessage 呼叫。
備註
A 型字元集包含:
大寫字母。
數字 0 到 9。
特殊字元$、#、@和空格。
此字元集由系統提供的 A 型轉換表支援。
來源字串的第一個字元必須是大寫字母或特殊字元 $、# 或 @。 僅允許在後方位置使用空格。 當指令是 ASCII 轉為 EBCDIC 時,小寫 ASCII 字母會被轉換成大寫的 EBCDIC 字母。
AE 字元集類型包含:
大寫字母。
小寫字母。
數字 0 到 9。
特殊字元 $、#、@、句點和空格。
此字元集由系統提供的 AE 轉換表支援。
來源字串的第一個字元可以是字元集中的任何字元,唯獨空格除外。 僅允許在後方位置使用空格。
在轉換過程中,嵌入的空白包(包括第一位置的空白包)會被轉換成0x00。 雖然此類轉換會完成,但CONVERSION_ERROR會作為次要回傳代碼,表示 CSV 函式庫已完成對所提供資料的不可逆轉換。
對於 Windows 來說,COMTBLG 的描述應該指向 Windows 登錄檔的 \SnaBase\Parameters\Client 下。
G 型轉換表的資料必須是長達 32 行的 ASCII 檔案。 每行必須由32位十六進位數字組成,代表16個字元,並以回車和換行作為結尾。 前 16 行(256 個字元)指定 EBCDIC 字元,ASCII 字元被轉換成哪些字元;剩餘 16 行則指定 EBCDIC 字元轉換成的 ASCII 字元。
十六進位數字 A 到 F 可以是大寫或小寫。 不過,你可能想將這些數字改為大寫,以確保與 IBM ES for OS/2 版本 1.0 的相容性。
備註
你可以用 GET_CP_CONVERT_TABLE 在記憶體中建立一個 Type G 的使用者撰寫轉換表,然後將該表存入檔案中。