本手冊描述中文 OpenVMS 軟體的概念、特色,以及命令。
專利電腦軟體。擁有、使用或複製均需取得 HP 的有效授權。根據 FAR 12.211 和 12.212,商用電腦軟體、電腦軟體文件,和商用項目的技術資料均依照廠商的標準商業授權而授權給美國政府。
保證. 包含在本文件中的資訊如有變更,恕不另行通知。HP 產品和服務的唯一保證發佈於此類產品和服務隨附的明確保證聲明中。此處的聲明不應視為額外的保證,對此處包含的技術或編輯錯誤或遺漏,HP 恕不負責。HP 產品所適用的特定保證條款以及替換零件,可從 HP 當地的銷售及服務處獲得。
商標注意事項. Intel 和 Itanium 為 Intel Corporation 或其子公司在美國和其他國家(地區)的註冊商標。
3.3.4.2 使用 HANYUGEN 設定終端機的埠 3-4
4.2.3 APPEND,BACKUP,CONVERT,COPY,CREATE 和 TYPE 中使用中文 4-2
4.2.4 ASSIGN,DEASSIGN 和 DEFINE 中使用中文 4-2
7.7 能處理中文之 SORT 和 MERGE 常式 7-5
14.1.2 DECwindows Motif 使用者界面 14-1
A.1 範例 ---- 中文應用於 MACRO-32 A-1
A.2 範例 ---- 中文應用於 DEC FORTRAN A-3
B.3.3 使用可呼叫SORT/MERGE常式的範例 B-7
B.3.3.1 使用注音碼對併順序呼叫SORT常式的程式 B-7
B.3.3.2 使用多種對併順序呼叫SORT常式的程式 B-8
2-4 二位元組代碼空間的 DEC SICGCC 字元集 2-5
除了現有的 OpenVMS 軟體特色,OpenVMS/Hanyu 具有處理中文的能力。在各種 OpenVMS/Hanyu 的功能之下,使用者可以使 ASCII 碼和 DEC中文碼並存。
OpenVMS/Hanyu 提供的 DEC 中文資料(中文字)為二位元組 (byte)、八位元 (bit) 的格式,採用中華民國於 1986 年在台灣訂定的通用中文標準交換碼(Standard Interchange Code for Generally-used Chinese Character, 簡稱SICGCC 1986)。此外,並提供包含 8,836 個字元位置,以八位元的四位元組表示的擴充區。請參照第二章有關 DEC 中文字元字集的詳細介紹。
OpenVMS/Hanyu 之下,大部分的 OpenVMS/Hanyu DCL 命令都可以使用中文。第 3、4、6、7、8、9、10、11、12、13 和 14 章將會詳細描述這些命令。同時您還可以再透過各種程式語言,把中文寫在程式中。請參閱附錄 A 的範例。
OpenVMS/Hanyu 提供許多非常有用的公用程式,它們都可以處理中文,如:
DEC 中文字元集包含四個字面;由 CNS 11643-1986 ,亦即通用中文交換碼 (SICGCC) 和迪吉多台灣補充字元集 (DTSCS) 組成。每一字面皆含8,836 個字位,分別安排於 94 列和 94 行。
表 2-1 和 2-2 定義 DEC 中文字元集的各個區域。
此字元集是由中文和非中文組成的基本字元集, 並且完全依照 CNS 11643-1986 (SICGCC) 的標準。它涵蓋了 CNS 11643-1986 (SICGCC) 中文字集的第一和第二字面;其所界定的 13,735 個字元。 |
|
第一字面提供 8,836 個字位。有 6,319 個字位指定為 EDPC 推薦字元集之區域,另外有 2,517 個字位為保留區域。 |
DEC 中文碼在 DEC 中文字元集中的圖形字元,是用二位元組和四位元組來表示:
DEC SICGCC 字元集的每個字元皆遵循 SICGCC (l986) 的標準,以二位元組代碼表示。第一位元組的最有效位元永遠設定為 1,而第二位元組的最有效字元可能是 1 (即 SICGCC (l986) 第一字面) 或 0 (即 SICGCC (l986) 第二字面)。
圖 2-2 為 DEC SICGCC 字元集中某個字元的表示法。
就 DEC SICGCC 字元集中每個字元表示法而言,DEC 二位元組中文碼及SICGCC (l98G) 的轉換方法如下:
以下兩個範例說明,如何將 DEC SICGCC 第一字面和 DEC SICGCC 第二字面中字元的 DEC 二位元組中文碼轉換成內碼。
Internal-code-for-1st-plane = 2121 (in hex) + 8080 (in hex)
DTSCS 字元集中每個字元,係採用 EDPC 推薦字元集規定的四位元組代碼。前兩個位元組為固定的引碼,即 C2CBhex,可作為 DTSCS 字面指引之用。第三位元組的最有效位元為 1。而第四位元組的最有效位元可能是 1 或 0,結構與 DEC 二位元組中文碼相同。
DEC 四位元組中文碼和 DTSCS 之間的轉換方法,類似於 DEC 二位元組中文碼。位移被加入最後兩個位元組,方法如下:
以下兩個範例說明,如何將 DTSCS 第一字面和 DTSCS 第二字面中字元的 DEC 四位元組中文碼轉換成內碼。
Internal-code-for-1st-plane= 2121(in hex) + C2CB8080(in hex)
Reserved character : 2121 (in hex)
Internal-code-for-2nd-plane= 2121(in hex) + C2CB8000 in hex)
OpenVMS/Hanyu 支援下列中文字輸入和輸出的終端機特色:
OpenVMS/Hanyu 支援所有由 OpenVMS 支援的編輯功能,如游標移動、刪 除、插入、重打和列尾的轉列。參閱 OpenVMS 文件說明以獲得所支援特徵的完整列表。
中文字顯示在終端機螢幕上時佔據一欄以上。因此,在 OpenVMS/Hanyu 編輯特色中,提供兩種作業型態:
在此模態中,刪除鍵一次刪除終端機上的一欄。游標移動鍵一次移動一欄。
在此模態中,刪除鍵一次刪除一個字元。游標移動鍵一次移動一個中文字。刪除字鍵 (CTRL/J) 刪除一個英文字或一串中文字。
如果輸入列並未完全填滿,且輸入字元太寬而無法顯示 (例如,在該列尾僅有單一的空白顯示儲存格,但是所輸入的是中文字元),所輸入的中文字元將被緩衝到下一個讀取請求。
HANYUGEN 公用程式被用來在此兩個編輯模態間作切換。關於切換模態的命令,請參閱第五章 《Hanyugen 公用程式》。
應用程式可以利用記號指定輸入欄;這些記號可將輸入欄分為多個以上的輸入區。如果 DEC SICGCC 字元集中的中文字元,落在記號定義的界線上 (也就是說,它必須分割成兩個部份,以便插入不同的區域),則會被視為無效字元。
OpenVMS/Hanyu 可提供 CMGR 公用程式 (請參閱第六章 《字元管理者 (CMGR) 公用程式》) 給使用者建立使用者自定字元 (User Defined Characters, UDC)。 這些自定字元可作為 OpenVMS/Hanyu 所支援的標準字元之補充字元。
若要在終端機或印表機上顯示這些字元,OpenVMS/Hanyu 提供終端機輸出/入的需求載入 (ODL) 協定。具備 ODL 協定的終端機和印表機便可以自動地載入 UDC (使用者自定字元) 字型資料,以顯示 UDC。
在 LAT 環境中 需要 LAT/Master 軟體支援 ODL 。它包括在 OpenVMS/Hanyu 和終端機伺服器上執行的軟體。
若要使 ODL 在 LAT 網路上操作,下列 DECserver 軟體的版本必須下載到相對的伺服器單元:
若要從 LAT 功能上獲利,必需確定所有載入的主機已安裝或升級到正確的 DECserver 軟體,並且系統正在執行 OpenVMS。
ODL 驅動需要系統設定一虛擬裝置 FHA0: 和 FONT_HANDLER。
SYSGEN> CONNECT FHA0: /NOADAPTER /MAXUNIT=l
/PROCESS_NAME="FONT_HANDLER" -
SYSMAN> IO CONNECT FHAO: /NOADAPTER /DRIVER=SYS$FHDRIVER
/PROCESS_NAME="FONT_HANDLER" -
OpenVMS/Hanyu VAX 的 SYSGEN 命令或 OpenVMS/Hanyu AXP 的 SYSMAN 命令載入一虛擬裝置驅動程式,並且建立一虛擬裝置 FHA0: 以供字型資料的載入。RUN 命令建立一系統處理 FONT HANDLER,以服務來自終端機和印表機之請求。
注意:這些命令已經存在於 OpenVMS/Hanyu 系統啟動命令程序 SYS$STARTUP:HSY$STARTUP.COM,因此 OpenVMS/Hanyu 系統通常可正確地配置 ODL。
如果裝置與終端機伺服器連接,終端機伺服器的埠必須適當地配置。
對於連接到直接線路或終端機伺服器的裝置,系統中每個終端機的埠必須個別地配置 ODL。通常,終端機埠的既定值是停用 ODL。HANYUGEN 公用程式可用於個人終端機上啟用 ODL (請參閱 《使用 HANYUGEN 設定終端機的埠》)。終端機或印表機也需要做實體的設定,才能啟用終端機或印表機的 ODL 功能。
在 DECserver 軟體中,埠的特色,即 ON-DEMAND [LOADING],已在 ODL 支援中介紹了。這將允許使用者來啟用或停用每個伺服器埠上的 ODL 功能,伺服器埠為連接到中文終端機或中文印表機。啟用或停用特定埠的 ODL 功能,可在局部態下發出以下的命令:
Local>{SET|DEFINE}PORT [n] ON-DEMAND [LOADING] {ENABLED|DISABLED}
例如,永久啟用埠 3 的 ODL 功能 (也就是說,將設定儲存在永久的資料庫中),請發出以下的命令:
Local> DEFINE PORT 3 ON-DEMAND LOADING ENABLED
若要檢驗 ON-DEMAND [LOADING] 特色已被啟用,可發出局部態的 LIST PORT CHARACTFRISTlCS:
Local> LIST PORT CHARACTERISTICS
Character Size: 8 Input Speed: 9600
Flow Control: XON Output Speed: 9600
Parity: None Modem Control: Disabled
Access: Local Local Switch: None
Forwards Switch: None Type: Soft
Autobaud, Autoprompt, Broadcast, Input Flow Control, LossNotification,
Message Codes, Output Flow Control, On-Demand Loading, Verification
在 OpenVMS/Hanyu 中,使用 HANYUGEN 在終端機的埠上啟用 ODL。請參閱第五章 《Hanyugen 公用程式》,以便獲取 HANYUGEN 指令上有關啟用和停用 ODL 的細節。"/FONT" 和 "/NOFONT" 限定詞用來在 HANYUGEN 中啟用或停用需求載入。需求載入因既定值而停用。下列的命令將啟用現用終端機對話期的需求載入:
按 F3 鍵,以便輸入 "設定名錄"。然後選取 "終端機" 設定,並且在"終端機設定" 功能表中啟用 ODL。
在先前對話期中列出的中文印表機上,啟用 ODL 必需遵循下列步驟:
本章列出中文終端機和印表機所需要的特性,並且說明中文字元在 DCL 命令和公用程式中的用法。
如同 OpenVMS 的 "說明" 訊息,除了 SHOW LOGICAL 和 SHOW TRANSLATION 之外,您可以使用 HANYUGEN 公用程式,來選取英文或中文訊息。
檔案 (file) 可以包含中文資料。中文字也可以用在 APPEND,BACKUP,CONVERT,COPY,CREATE 和 TYPE 等命令。例如:
中文字可用在邏輯名稱 (logical name) 和同等的字元串。亦可用於 ASSIGN,DEASSIGN 和 DEFINE 等命令之中。
您可以使用 SHOW LOGICAL 和 SHOW TRANSLATION 命令,來顯示使用 ASSIGN 及 DEFINE 所定義之中文邏輯名稱,而且詞彙功能 F$LOGICAL 可以轉換中文。例如:
您可以使用 HELP 命令,來引動 OpenVMS "說明設施",並經由 HANYUGEN 公用程式選取中文或英文,來顯示關於 OpenVMS 命令或主題之資訊。
請注意,即使輸出裝置設定為 HANYU_MSG,您仍可以使用以下所述的命令來直接顯示英文說明。
$ REPLY/TERMINAL=TT "REPLY 中混合中文使用"
Reply received on HANDVF from user JOHN at _HANDVF$LTA5236: 15:19:48
通用 PostScript 列印子系統 (WWPPS) 提供對平台上平常文字檔案的高質量列印。它能夠列印同時包含單位元組和多位元組亞洲字元的平常文字檔案。
$ WWPPS := = $SYS$SYSTEM:WWPPS
$ RUN SYS$SYSTEM:WWPPS $WWPPS>
PRINT/QUEUE=hp$printer/LOCALE=zh_cn_dechanzi hanzi-text_file.txt
$ WWPPS PRINT/QUEUE=hp$printer/LOCALE=zh_cn_dechanzi hanzi-text_file.txt
HANYUGEN 可以設定和顯示中文終端機的型式,並且可以啟用或停用中文終端機和中文印表機的 "需求載入" (On-Demand Loading) 。它並且讓使用者選擇其所喜好的語言以顯示公用程式說明文字或系統訊息。
SET 命令能設定中文終端機型式,並且啟用 "需求載入"。中文終端機的型式可以為 VT382。如果想設定中文終端機為 ASCII 特性,則指定為 VT100 或 VT300 系列為其裝置型式。如果一個公用程式同時提供中文和英文的說明/示錯訊息,您可以使用 SET 命令的 /OUTPUT 選項來選擇輸出的語言。
SET [device-name[:]] [/DEVICE_TYPE=device-type]
Device Name Type On Demand Input Output
_RTA2: HANYU_VDU DISABLE ASCII HANYU_MSG
Device Name Type On Demand Input Output
_OPA0: LA36 DISABLE ASCII Unknown
_RTAl: VT300_Series DISABLE HANYU Unknown
_RTA2: HANYU_VDU DISABLE ASCII HANYU_MSG
_LTA5006: VT200_Series DISABLE HANYU Unknown
_LTA5007: HANYU_VDU DISABLE ASCII Unknown
_LTA5008: HANYU_VDU DISABLE ASCII Unknown
Device name Type On Demand Input Output
_TTA0: VT200_series DISABLE ASCII ASCII_MSG
HANYUGEN> SET /DEVICE_TYPE=VT382
Device name Type On Demand Input Output
_TTA0: HANYU_VDU DISABLE HANYU HANYU_MSG
HANYUGEN> SET TXA1: /DEVICE TYPE=CP382 /PERMANENT /FONT
Device name Type On Demand Input Output
_TXAl: HANYU_PRT ENABLE HANYU Unknown
Device name Type On Demand Input Output
_TTA2: HANYU_VDU DISABLE HANYU ASCII_MSG
HANYUGEN> SET TXA2: /DEVICE_TYPE=VT100 /PERMANENT
本章描述 OpenVMS/Hanyu SORT 和 MERGE 公用程式中所提供之中文處理功能。
$ SORT[qualifiers] input-file-specification[qualifier] -
_$ output-file-specification[qualifiers]
$ MERGE[qualifiers] input-file-specifications[qualifier] -
_$ output-file-specification[qualifers]
MERGE 命令所用的輸入檔 (input file) 在合併前,先確定檔案內容的順序須與排序時所用的對併順序相同 (即是以部首、筆畫、注音碼或內碼的升序或降序為準)。在 MERGE 命令中指定的對併順序須與輸入檔的內容順序相符。
/KEY 限定詞用來界定 SORT 鍵,在一命令列中,至多可出現 255 次。/KEY 的子限定詞須用括弧括住。
除了在 OpenVMS SORT 和 MERGE 中提供的那些限定詞之外,OpenVMS/Hanyu 的 SORT 和 MERGE 並支援以下的子限定詞。
SORT/MERGE 的 CSIZE 子限定詞,只能和區域對併順序搭配使用。此處的 n 是指 SORT 或 MERGE 鍵的長度,以字元數計算。請注意: CSIZE 和 SIZE 子限定詞,不能同時以同一鍵規格被指定。 |
|
/KEY=(POSITION:1, CSIZE:5, RADICAL, STROKE)
上面的範例中,RADICAL 是主要的對併順序,而 STROKE 是次要的對併順序。請注意:可以同時指定多重中文對併順序。
OpenVMS/Hanyu 的 SORT 和 MERGE,提供命令限定詞,透過該命令限定詞,可通過輸入規格檔案。規格檔案的既定檔型是 .SRT,而指定檔案的命令格式如下:
$ SORT/SPECIFICATION=input-specification-file ...
規格檔案的格式和功能,在 《VMS User's Manual》中有詳細的描述。規格檔案中的 /FIELD 限定詞,是用來定義 SORT 或 MERGE 鍵欄位, 和/KEY 命令限定詞非常類似。除了 OpenVMS SORT 和 MERGE 公用程式中 FIELD 限定詞的所有有效子限定詞外,OpenVMS/Hanyu 的 SORT 和 MERGE 也接受以下有效的子限定詞:
這些代表其相對應之對併順序的子限定詞,相當於 /KEY 命令限定詞的相同子限定詞。規格檔案中 FIELD 限定詞的範例如下:
/FIELD=(NAME:Asian-field, POSITION:1, SIZE:4, PHONETIC)
請注意:多重對併順序,在一 /FIELD 限定詞中是不能被指定的。若要指定同一鍵的數個對併順序,則具有不同對併順序子限定詞之相同鍵的多重 /FIELD 限定詞,在規格檔案中應加以指定。
李商隱 ! "李" 字之部首碼 75 , 筆劃 07 , 注音 ㄌㄧˇ, 內碼 CAD7
白居易 ! "白" 字之部首碼 106, 筆劃 05 , 注音 ㄅㄞˊ, 內碼 C6F5
王維 ! "王" 字之部首碼 96 , 筆劃 04 , 注音 ㄨㄤˊ, 內碼 C5DE
李白 ! "李" 字之部首碼 75 , 筆劃 07 , 注音 ㄌㄧˊ, 內碼 CAD7
孟浩然 ! "孟" 字之部首碼 39 , 筆劃 08 , 注音 ㄇㄥˋ, 內碼 CCF5
$ SORT/KEY=(POSITION:1,CSIZE:1,RADICAL) POET.DAT RADICAL.DAT
孟浩然 ! "孟" 字之部首碼 39 , 筆劃 08 , 注音 ㄇㄥˋ, 內碼 CCF5
李白 ! "李" 字之部首碼 75 , 筆劃 07 , 注音 ㄌㄧˊ, 內碼 CAD7
李商隱 ! "李" 字之部首碼 75 , 筆劃 07 , 注音 ㄌㄧˇ, 內碼 CAD7
王維 ! "王" 字之部首碼 96 , 筆劃 04 , 注音 ㄨㄤˊ, 內碼 C5DE
白居易 ! "白" 字之部首碼 106, 筆劃 05 , 注音 ㄅㄞˊ, 內碼 C6F5
$ SORT/KEY=(POSITION:1,CSIZE:2,STROKE) POET.DAT STROKE.DAT
王維 ! "王" 字之部首碼 96 , 筆劃 04 , 注音 ㄨㄤˊ, 內碼 C5DE
白居易 ! "白" 字之部首碼 106, 筆劃 05 , 注音 ㄅㄞˊ, 內碼 C6F5
李白 ! "李" 字之部首碼 75 , 筆劃 07 , 注音 ㄌㄧˊ, 內碼 CAD7
李商隱 ! "李" 字之部首碼 75 , 筆劃 07 , 注音 ㄌㄧˇ, 內碼 CAD7
孟浩然 ! "孟" 字之部首碼 39 , 筆劃 08 , 注音 ㄇㄥˋ, 內碼 CCF5
李商隱 ! "李" 字之部首碼 75 , 筆劃 07 , 注音 ㄌㄧˇ, 內碼 CAD7
白居易 ! "白" 字之部首碼 106, 筆劃 05 , 注音 ㄅㄞˊ, 內碼 C6F5
王維 ! "王" 字之部首碼 96 , 筆劃 04 , 注音 ㄨㄤˊ, 內碼 C5DE
李白 ! "李" 字之部首碼 75 , 筆劃 07 , 注音 ㄌㄧˊ, 內碼 CAD7
孟浩然 ! "孟" 字之部首碼 39 , 筆劃 08 , 注音 ㄇㄥˋ, 內碼 CCF5
杜甫 ! "杜" 字之部首碼 75 , 筆劃 07 , 注音 ㄉㄨˋ, 內碼 CADB
$ SORT/KEY=(POSITION:1,CSIZE:1,STROKE,INTERNAL_CODE)POET1-
王維 ! "王" 字之部首碼 96 , 筆劃 04 , 注音 ㄨㄤˊ, 內碼 C5DE
白居易 ! "白" 字之部首碼 106, 筆劃 05 , 注音 ㄅㄞˊ, 內碼 C6F5
李白 ! "李" 字之部首碼 75 , 筆劃 07 , 注音 ㄌㄧˊ, 內碼 CAD7
李商隱 ! "李" 字之部首碼 75 , 筆劃 07 , 注音 ㄌㄧˇ, 內碼 CAD7
杜甫 ! "杜" 字之部首碼 75 , 筆劃 07 , 注音 ㄉㄨˋ, 內碼 CADB
$ SORT/KEY=(POSITION:1,CSIZE:1,STROKE,DESCENDING)POET2.DAT-
孟浩然 ! "孟" 字之部首碼 39 , 筆劃 08 , 注音 ㄇㄥˋ, 內碼 CCF5
李白 ! "李" 字之部首碼 75 , 筆劃 07 , 注音 ㄌㄧˊ, 內碼 CAD7
白居易 ! "白" 字之部首碼 106, 筆劃 05 , 注音 ㄅㄞˊ, 內碼 C6F5
$ SORT/KEY=(POSITION:1,CSIZE:1,STROKE,DESCENDING)POET3.DAT-
溫庭筠 ! "溫" 字之部首碼 85 , 筆劃 13 , 注音 ㄨㄣㄧ, 內碼 E4EB
李商隱 ! "李" 字之部首碼 75 , 筆劃 07 , 注音 ㄌㄧˇ, 內碼 CAD7
王維 ! "王" 字之部首碼 96 , 筆劃 04 , 注音 ㄨㄤˊ, 內碼 C5DE
$ MERGE/KEY=(POSITION:1,CSIZE:1,STROKE,DESCENDING)-
_$ POET2.SOR POET3.SOR POET.MER
溫庭筠 ! "溫" 字之部首碼 85 , 筆劃 13 , 注音 ㄨㄣㄧ, 內碼 E4EB
孟浩然 ! "孟" 字之部首碼 39 , 筆劃 08 , 注音 ㄇㄥˋ, 內碼 CCF5
李白 ! "李" 字之部首碼 75 , 筆劃 07 , 注音 ㄌㄧˊ, 內碼 CAD7
李商隱 ! "李" 字之部首碼 75 , 筆劃 07 , 注音 ㄌㄧˇ, 內碼 CAD7
白居易 ! "白" 字之部首碼 106, 筆劃 05 , 注音 ㄅㄞˊ, 內碼 C6F5
以下的範例顯示 /SPECIFICATION 限定詞的用法。
李商隱 ! "李" 字之部首碼 75 , 筆劃 07 , 注音 ㄌㄧˇ, 內碼 CAD7
白居易 ! "白" 字之部首碼 106, 筆劃 05 , 注音 ㄅㄞˊ, 內碼 C6F5
王維 ! "王" 字之部首碼 96 , 筆劃 04 , 注音 ㄨㄤˊ, 內碼 C5DE
李白 ! "李" 字之部首碼 75 , 筆劃 07 , 注音 ㄌㄧˊ, 內碼 CAD7
孟浩然 ! "孟" 字之部首碼 39 , 筆劃 08 , 注音 ㄇㄥˋ, 內碼 CCF5
/FIELD=(NAME=POET_NAME,POSITION:1,SIZE:2,RADICAL)
$ SORT/SPECIFICATION=SPECIFICATION.DAT POET.DAT RADICAL.DAT
孟浩然 ! "孟" 字之部首碼 39 , 筆劃 08 , 注音 ㄇㄥˋ, 內碼 CCF5
李白 ! "李" 字之部首碼 75 , 筆劃 07 , 注音 ㄌㄧˊ, 內碼 CAD7
李商隱 ! "李" 字之部首碼 75 , 筆劃 07 , 注音 ㄌㄧˇ, 內碼 CAD7
王維 ! "王" 字之部首碼 96 , 筆劃 04 , 注音 ㄨㄤˊ, 內碼 C5DE
OpenVMS MAIL 公用程式上 HMAIL 的附加特色,將在下一節中一一討論。 有關 OpenVMS MAIL 的特色,請參閱 《VMS User's Manual》。
使用 HMAIL,可於個人名稱使用中文字。例如,若使用者TENG希望以中文名字發送 FILE.TXT 檔案給使用者 HANYU::LI,則可輸入下列命令:
HMAIL> set personal_name "鄧立人, 電腦工程部"
$ HMAIL/SUBJECT="Meeting agenda" FILE.TXT HANYU::LI
或者TENG要設定只適用於現用訊息的個人名稱,則可輸入下列命令:
在 HMAIL 中,可於命令中用中文搜尋字串。如 SEARCH 命令及SELECT,SET FOLDER,DIRECTORY 和 READ 命令中的 /SUBJECT_SUBSTRING 限定詞。例如:
1 HANYU::LI 8-JUL-1992 中文資料庫研討會
HMAIL> directory/subject_substring=資料庫
標準 MAIL 中,卷名只能以 ASCII 順序顯示。而使用 HMAIL,則可依據指定的中文對併順序顯示卷名。新的限定詞 /COLLATING_SEQUENCE以下列語法加入 DIRECTORY/FOLDER 命令中:
下列為適用於 /COLLATION_SEQUENCE 限定詞的規則:
DISK$USER:[USER]MAIL.MAI;1 中的卷宗清單
HMAIL 公用程式 HMAIL> directory/folder/collating=(stroke,radical)
DISK$USER:[USER]MAIL.MAI;1 中的卷宗清單
HMAIL> directory/folder/collating=radical
DISK$USER:[USER]MAIL.MAI;1 中的卷宗清單
HMAIL> directory/folder/collating=ascii
DISK$USER:[USER]MAIL.MAI;1 中的卷宗清單
除了卷名顯示的順序,提供給 /START 限定詞的內容,將與根據顯示對併順序選定的卷名做比較。因此若指定了/COLLAING=PHONETIC_CODE,則比較卷名的注音碼對併數值以決定那些該顯示。下面的範例說明如何執行。
HMAIL> directory/folder/collating=stroke/start=私
DISK$USER:[USER]MAIL.MAI;1 中的卷宗清單
HMAIL> directory/folder/collating=radical/start=私
DISK$USER:[USER]MAIL.MAI;1 中的卷宗清單
HMAIL> directory/folder/collating=ascii/start=私
在 HMAIL 中,將引動 HTPU 為既定的編輯程式。不過,您可以使用 SET EDITOR 命令來設定所選擇的編輯程式,以便置換既定值。例如,您可以使用以下的命令,將既定的編輯程式設定為另一個編輯程式。
HHAIL> set editor [other editor]1
HTPU/HEVE 是 DECTPU/EVE 的提升,以便支援中文文字編輯和 HEDT 功能。可支援字元儲存格終端機 (CCT) 和 DECwindows Motif/Hanyu 使用者介面。
根據 DECTPU/EVE,HTPU/HEVE 是由兩個配備,即 HTPU (Hnayu Text Processing Utility) 和 HEVE (Hanyu Extensible Versatile Editor) 所組成。HEVE 透過 HTPU 所提供的內建程序,來執行中文編輯功能。
若要使用 CCT 介面引動包含 HEVE 的 HTPU 作為既定的編輯程式,可使
若要使用 DECwindows Motif/Hanyu 介面引動包含 HEVE 的 HTPU 作為既定的編輯程式,可使用下列的命令:
$ SET DISPLAY/CREATE/NODE=<您的工作站的節點名稱>
一旦啟動 HEVE,您可使用鍵盤鍵鍵入文字。您也可以使用 HEVE 命令和其預定的功能鍵,來執行文字編輯。表 9-1 列出預定的功能鍵。
若需更多有關 HEVE 和其命令的相關資訊,請參閱《HEVE 使用者手冊》或鍵入 <Do> 鍵然後在 HEVE 中輸入 "HELP" 命令。
HTPU 提供一組內建程序和可呼叫的介面,以便發展中文編輯程式。您可以全用 HTPU 語言和其內建程序來編輯程式,就像 HTPU 既定的編輯程式 HEVE;或者您可於應用程式中經由可呼叫的介面,呼叫 HTPU。
關於新的和修訂過的內建程序之完整資料,請參閱 《HTPU 和 HEVE 參考手冊》。 若需要有關 DECTPU 內建程序,請參閱《DEC Text Processing Utility Reference Manual》 有關的細節。《Guide to the DEC Text Processing Utility》 描述 HTPU 語言。
有關 HTPU 可呼叫介面的特殊資訊,請參閱這本手冊的附錄 B.4。若需要關於 DECTPU 的可呼叫介面,請參閱 《VMS Utility Routines Manual》 第十四章。
由於 HEVE 是利用 HTPU 語言和內建程序編輯而成的,它可以編輯中文字和 ASCII 字 元。它支援所有 EVE2 功能,並且具有下列擴充的功能:
有關 HEVE 的特定命令,可參閱 《HTPU 和 HEVE 參考手冊》和《HEVE 使用者手冊》。關於 EVE 命令,請參閱 《Extensible Versatile Editor Reference Manual》。
HDUMP 為 DUMP 的中文版本。它加強 DUMP 公用程式的功能,包括可顯示和列印一個帶有中文之檔案內容。
二者主要的差別在於 HDUMP 能適時顯示二位元組和四位元組中文字,DUMP 則否。例如:列尾只剩一位元組空間時,對於即將來臨的二位元組中文字,DUMP 不會保留該字之第一位元組至次列與第二位元組一併顯示; 因此,導至錯誤的結果。而在 HDUMP 內,不論上述情形是否重複發生, 中文字的第一位元組一定會和第二位元組一併顯示於次傾印列。並且顯示 和列印顯示欄左界上的一 ASCII 位置。
當這些字元跨越傾印欄轉列界時,相同的情況也適用於四位元組的中文字。
Hdump of file WRKD$:[HANYU.SRC]HANYU.DAT;1 on 02-DEC-1992 12:12:30.24
File ID (17993,21,0) End of file block 1 / Allocated 3
Record number 1 (00000001), 39 (0027) bytes
A2F1ABEA D3D3C3A4 C5A4C4A4 CFD9A1D3 美國DEC計算機 000000
2D33A8A1 E3E6D9E7 B3C6FCC4 EED3B4C8 有限公司電話:3- 000010
313132 35313337 7315211......... 000020
Record number 2 (00000002), 36 (0024) bytes
D3B4C8A2 F1ABEAD3 D3434544 CFD9A1D3 美國DEC計算機有 000000
3133372D 33A8A1E3 E6D9E7B3 C6FCC4EE 限公司電話:3-731 000010
片語輸入公用程式是 OpenVMS/Hanyu 中的一公用程式,可支援 VT382-D 中文終端機的片語輸入方式,同時也讓使用者修改和運用片語。它將允許使用者建立個人片語資料庫的片語,並可將其歸類。此公用程式可幫助使用者將片語類別載入終端機。載入類別之後,使用者可使用終端機的片語輸入法使用該片語。
所有片語和類別的資訊儲存在兩個檔案中,即 HSY$PHRASE.DAT 和 HSY$PHRASE_CLASS.DAT。系統可擁有整個系統的資料庫;而此資料庫可 藉由系統管理者或有權限的使用者加以修訂;非權限的使用者,允許讀取整個系統的資料庫,但不能作修訂。每個使用者可有其個人的資料
片語輸入公用程式是一功能表驅動的全螢幕公用程式。引動之後,將有訊息透過功能表來指導使用者。
$ PHRASE :== $HSY$SYSTEM:PHRASE
因此,使用者可鍵入下列的命令,將系統或使用者資料庫的某類片語個別載入終端機中:
輸入與輸出格式上可使用中文的日期與時間。在 OpenVMS/Hanyu 內有中文 語言表以及預定的日期和時間輸出格式。於系統與使用者處理共同設定時, 中文日期與時間輸出格式可用於 DCL 命令 DIR,以及 DCL 公用程式 MAIL 與 HAMIL。此外,使用者可利用中文語言表,界定自己的使用者自定日期 與時間輸入/輸出格式。這個日期與時間輸入/輸出格式可供 OpenVMS RTL 中的日期/時間處理常式使用。有關日期/時間處理常式的詳細敘述和用法, 請參照 《VMS RTL Library (LIB$) Manual》。
使用中文日期與時間之前,系統管理員 (或任何擁有 CMEXEC、SYSNAM 與 SYSPRV 特權的使用者) 必須執行命令程序 SYS$MANGER:LIB$DT_STARTUP.COM, 界定數個日期與時間輸出格式 (包含預先界定的中文輸出格式)。此外也要 界定中文日期與時間元件。命令如下:
$ ! Choose Chinese as language
$ ! Define Chinese output formats and date and time elements
中文語言表界定數個邏輯。這些邏輯可使用於使用者自定輸出格式, 如 12.6 節所述。表列於後以供參考:
"一月", "二月", "三月","四月", "五月", " 六月","七月", "八月", "九月","十月","十一月", "十二月" |
||
如果為日期、時間,或兩者選取特殊的中文格式,使用者必須使用在 12.3 節界定的邏輯以界定 LIB$DT_FORMAT 邏輯名稱。例如:
$ DEFINE LIB$DT_FORMAT LIB$DATE_FORMAT_044, LIB$TIME_FORMAT_022
使用者可以界定自已的執行模式邏輯,以界定自己的中文日期及時間輸出格式。例如:
$ DEFINE/EXEC/TABLE=LNM$DT_FORMAT_TABLE LIB$DATE_FORMAT_601-
_$ "系統時間: !Y4年!MNB月!DB日 "
$ DEFINE/EXEC/TABLE=LNM$DT_FORMAT_TABLE LIB$TIME_FORMAT_601-
_$ "!MIU!HB2時!MB分!SB秒 !WU "
$ DEFINE LIB$DT_FORMAT LIB$DATE_FORMAT_601, LIB$TIME_FORMAT_601
如要為應用程式的日期與時間輸入選取特殊中文格式,使用者必須界定 LIB$DT_INPUT_FORMAT 邏輯名稱。LIB$DT_INPUT_FORMAT 的對等名稱可包括取自 12.4 節所述之預先界定的中文語言表的助憶符號。
$ DEFINE LIB$DT_FORMAT LIB$DATE_FORMAT_045,LIB$TIME_FORMAT_022
1 NODEA::SYSTEM 1992年11月16日 星期三 工作報告
$ DEFINE LIB$DT_FORMAT LIB$DATE_FORMAT_045,LIB$TIME_FORMAT_022
建立日期: 1992年11月17日 星期日 下午 6時35分25秒
修改日期: 1992年11月17日 星期日 下午 6時35分28秒 (1)
檔案屬性: 配置: 3, 擴充: 0 , 總體緩衝區計數: 0 , 無版本限制
紀錄屬性: Carriage return carriage control
檔案保用: System:RWED, Owner:RWED, Group:RE, World:
TEST.DAT;1 1992年11月17日 星期日 下午 6時35分25秒
TEST1.DAT;1 1992年11月17日 星期日 下午 6時36分19秒
TEST2.DAT;1 1992年11月17日 星期日 下午 6時36分22秒
TEST3.DAT;1 1992年11月17日 星期日 下午 6時36分26秒
int lib$convert_date_string();
unsigned int quadtime[2]; /* quadword to store time */
unsigned char instr[40]; /* input date time buffer */
unsigned char outstr[40]; /* output date time buffer*/
struct dsc$descriptor_s indate = /* input descriptor */
{ 40, DSC$K_DTYPE_T, DSC$K_CLASS_S, instr };
struct dsc$descriptor_s outdate = /* output descriptor */
{ 40, DSC$K_DTYPE_T, DSC$K_CLASS_S, outstr };
outdate.dsc$a_pointer = outstr;
/* convert date time from input format to quadword storage */
lib$convert_date_string(&indate,quadtime);
/* convert date time from quadword to output format */
lib$format_date_time(&outdate,quadtime);
printf("Output date time: %40.40s \n",outstr);
$ DEFINE LIB$DT_FORMAT LIB$DATE_FORMAT_045,LIB$TIME_FORMAT_022
$ DEFINE LIB$DT_INPUT_FORMAT "!Y4年!MNB月!DB日!MIU!HB2時!MB分!SB.!C2秒"
Input date time:1992年10月11日 下午2時16分26.02秒
Output date time: 1992年10月11日 星期二 下午 2時16分26秒
$ DEFINE LIB$DT_INPUT_FORMAT "!Y4年!MAU月!DB日!HB4時!MB分!SB.!C2秒"
Input date time:1992年十月11日 17時12分22.02秒
本章描述如何使用終端機歸化設施公用程式 (Terminal Fallback FacilityUtility) 來設定系統,使其能使用 TFF 二位元組字元轉換表。
OpenVMS/Hanyu 的終端機歸化設施 (簡稱 TFF),已經擴展為可以支援 MITAC TELEX CODE 和 BIG5 的終端機和印表機的二位元組字元轉換。本程式允許 MITAC TELEX CODE 和 BIG5 的終端機和印表機輸入和輸出 DEC SICGCC 字元集的中文字,其方法是先行轉換出入終端機和印表機的字元。這種字元轉換是透過字元表轉換到應用軟體執行。因此,MITAC TELEX CODE 和 BIG5 的終端機和印表機的使用者可以使用 DEC SICGCC 字元集發展出來的 OpenVMS/Hanyu 應用軟體。
有關 TFF 的細節,請參閱 《VMS Terminal Fallback Utility Manual》。
您在使用 OpenVMS/Hanyu 的 TFF 之前,必須執行下列步驟。關於如何設定和維護 TFF 環境,請參閱 《VMS Terminal Fallback Utility Manual》。
在系統上安裝 OpenVMS/Hanyu 之後,您必須啟用 TFF。請在系統磁碟 SYS$MANAGER 的檔目內引動 VAX 的命令程序 TFF$STARTUP.COM,或是 AXP 的命令程序 TFF$SYSTARTUP.COM。當重新啟動系統之後,若要啟動 TFF,請修改 OpenVMS/Hanyu 特定位置的啟動命令程序SYS$STARTUP:SYSTARTUP_VMS.COM,使其包含以下的命令:
為了使 MITAC TELEX CODE 終端機能支援 DEC SICGCC 字元集, OpenVMS/Hanyu VAX 和 OpenVMS/Hanyu AXP 提供 TFF 歸化表 HANYU_TELEX。
在 OpenVMS/Hanyu 中提供 HANYU_BIG5 和 BIG5_HANYU 的 TFF 歸化表,分別為 DOS 4.1 版支援 PATHWORKS/Hanyu 及為 BIG5 終端機和印表機支援 DEC SICGCC 字元集。
在系統上啟用 TFF 之後,所需的歸化表必須載入非分頁動態記憶體的系統實際記憶體中,使用者才能加以存取。要完成這項工作,您必須把包含該表的程式庫導入 "終端機歸化設施 (TFU)";並且把該表載入系統的實際記憶體中。載入 HANYU_TELEX 的命令如下:
VAX/VMS Terminal Fallback Facility (TFF)
TFU> SET LIBRARY SYS$SYSTEM:TFF$MASTER.DAT
將 HANYU_BIG5 和 BIG5_HANYU 載入/顯示到非分頁動態記憶體儲存區的命令如下:
VAX/VMS Terminal Fallback Facility (TFF)
TFU> SET LIBRARY SYS$SYSTEM:TFF$MASTER.DAT
The following TFF tables are currently loaded
BIG5_HANYU Fbk BIG53 0 0
OpenVMS 偵錯程式是一個符號偵錯程式。它是除錯使用者模式代碼的偏好偵錯程式。它支援字元型使用者界面和圖形 (DECwindows Motif) 使用者界面的所有 OpenVMS 程式語言的符號除錯。這兩種使用者界面現在都支援 DEC 中文字元集的輸入和顯示。在程式變數、源碼注解或 OpenVMS 偵錯程式錯誤訊息中的中文字元都能夠正確顯示。
OpenVMS 偵錯程式使用 XPG4 國際化模型實現對 DEC 中文字元集的支援。它要求一個 DEC 中文字元集的 XPG4 現場資料庫。您可以在隨同 OpenVMS 一起發行的 OpenVMS 118n 儲存集中找到這個現場資料庫。 |
本段描述如何設定 OpenVMS 偵錯程式的字元型使用者界面和 DECwindows Motif 使用者界面來使用中文字元。
OpenVMS 偵錯程式的字元型使用者界面一起使用中文 SMG 和 DEC C 的 XPG4 本地化公用程式來支援 DEC 中文字元集。要支援它,必須定義以下邏輯名:
這個邏輯名定義 OpenVMS 偵錯程式用於支援畫面模態的 SMG 共享映像的名稱。要允許支援 DEC 中文字元集,定義這個邏輯名如下:
$ DEFINE/JOB DBG$SMGSHR HSMGSHR
這個邏輯名定義中文 SMG 支援的既定字元集。要允許支援 DEC 中文字元集,定義這個邏輯名如下:
$ DEFINE/JOB SMG$DEFAULT_CHARACTER_SET HANYU
這個邏輯名為 DEC C 的 XPG4 本地化公用程式和運轉時用程式庫的所有現場定義既定的現場設定。要允許在 OpenVMS 偵錯程式中支援 DEC 中文字元集,定義這個邏輯名如下:
OpenVMS 偵錯程式的 DECwindows Motif 使用者界面可以顯示 DEC 中文字元集中的字元。在檔目 DECW$SYSTEM_DEFAULT 或 DECW$USER_DEFAULTS 中的偵錯程式資源檔案 VMSDEBUG.DAT 可以為每個偵錯程式視窗明確指定字體。
在 VMSDEBUG.DAT 中, DebugDefault.font 資源為所有偵錯程式視窗指定一種既定字體。每個視窗也可以使用與既定字元的不同字體。要知詳情,請參閱 VMSDEBUG.DAT 檔案。
要允許在 OpenVMS 偵錯程式視窗中支援 DEC 中文字元集,該視窗必須使用 DEC 中文字元集字體。可通過以下方法之一指定該字體:
OpenVMS/Hanyu 容許使用者在註解、字元及文字字串使用中文,並於任何程式語言中處理包含中文的輸入與輸出資料,但有下列限制:
一般程式語言使用中文的範例程式列示於後。這些範例也放在OpenVMS/Hanyu 系統,HSY$EXAMPLE 檔目之下。
VAX_MACRO = 1 ; If you want to compile this example
; with MACRO-32, then the VAX_MARCO symbol
; must be set to 0. Otherwise, you may
; encounter a problem during compilation.
DATA1: .ASCID /VAX MACRO 與中文共用/
DATA2: STRING <VAX MACRO 中 MACRO 使用中文>
.ENTRY SAMPLE, ^m<> ; 在注釋中使用中文.
.CALL_ENTRY PRESERVE=<R2,R3,R4,R5,R6,R7,R8,R9,R10,-
HSYSHR 為在 OpenVMS/Hanyu 系統的中文運轉作業庫。提供基本中文處理功能常式的一般用途程式庫。
系統中有此程式庫的線上說明。要獲得有關常式功能,呼叫格式,傳達引數的方法,與送回值的資訊,請輸入:
程式庫包含於可共用影像庫 HSYIMGLIB.OLB 內。可以在任何 OpenVMS/Hanyu 支援的程式語言呼叫程式庫功能。如要將程式與執行時程式庫連結,請輸 入:
$LINK PROGRAM,SYS$LIBRARY:HSYIMGLIB/LIB
詳細說明,請參閱《OpenVMS/Hanyu RTL Chinese Processing (HSY$) Manual》。
$ TYPE HSY$EXAMPLE:SAMPLE_HSYSHR.C
This is a C language example to demostrate the ability of the HSY$ facility of the OpenVMS
Run Time Library, HSYSHR. The program accepts an input file from the command line and
ormats the text within it in the following ways:
- Left margin = 0, Right margin = 40
- Convert all half form ASCII characters to their full forms.
- Remove leading and trailing blanks of each input line.
- Remove all embedded controls or space characters.
typedef unsigned char mstr; /* Local language string type */
typedef unsigned char *mstr_p; /* Pointer type to local */
typedef unsigned long mchar; /* Multi-byte character type */
#define INPUT_STR_LEN 128 /* Max length of input line */
#define OUTPUT_STR_LEN 128*2 /* Max length of output line */
#define MARGIN 40 /* Width of output text */
#define SUCCESS 1 /* Successful call */
#define FAILURE 0 /* Unsuccessful call */
#define SPACE 0x00000020 /* Space character in HSYSHR */
extern HSY$IS_VALID(), /* External HSY$ routines to */
HSY$CH_RNEXT(),HSY$CH_WNEXT(), /* used */
HSY$CH_SIZE(), HSY$CH_NCHAR(), HSY$CH_NBYTE(),
HSY$CH_TRIM(), HSY$SKPC(), HSY$TRA_ROM_FULL();
FILE *fdin, /* Input file descriptor */
*fdout; /* Output file descriptor */
int line_length; /* Remaining number of bytes */
/* of the current output line */
This routine will accept an input buffer and its length in number of characters,
and write the string to the output file at 40 bytes per line. A blank line is
printed if the input buffer is null.
int write_text(buffer, buf_len)
mstr_p buffer; /* Output buffer */
int buf_len; /* Buffer length in number */
int char_size, /* Character size in bytes */
offset, /* Offset of input buffer */
mchar curr_char; /* Current multi-byte char */
mstr_p buf_ptr; /* Pointer to buffer */
if (buffer == NULL){ /* Empty line, next paragraph */
if (line_length != EMPTY) fprintf(fdout, "\n");
offset=EMPTY;buf_ptr = buffer; /* Initialize for the loop */
for (i= EMPTY; i < buf_len; i++) {
curr_char = HSY$CH_RNEXT(&buf_ptr);
char_size = HSY$CH_SIZE(curr_char);
/* Calculate the size of the */
if (line_length < char_size) {
for (j=0; j < char_size; j++){
/* Put a multi-byte character */
fputc(buffer[offset++], fdout);
This routine accepts an input string, removes its trailing and
leading blanks, converts all half form ASCII to their full
forms and places the converted string into a buffer which
will be written to the output file.
mstr in_str[]; /* Zero terminated input */
mstr_p str_ptr, /* Pointer to source string */
dst_ptr; /* Pointer to dest. string */
mchar curr_char; /* Current multi-byte char */
int status, /* Return status */
pos, /* Position of trimmed string */
charsofar, /* Character processed so far */
noofchar, /* No. of characters and */
noofbytes; /* bytes in a string. */
if (!(str_ptr = HSY$SKPC(SPACE, in_str, strlen(in_str)-1)))
return write_text(NULL,EMPTY);
pos = HSY$TRIM(str_ptr, strlen(str_ptr)-1);
if (!(HSY$TRA_ROM_FULL(str_ptr, pos, buffer, OUTPUT_STR_LEN,
return FAILURE; /* Convert to full form */
noofchar = HSY$CH_NCHAR(buffer,noofbytes);
str_ptr = dst_ptr = buffer; /* Initialize for the loop */
curr_char = HSY$CH_RNEXT(&str_ptr);
if (HSY$IS_VALID (curr_char)) {
/* Test for valid multi-byte */
HSY$CH_WNEXT(curr_char, &dst_ptr);
/* character and write to the */
charsofar ++ ; /* destination. */
write_text(buffer, charsofar); /* Write the text out to file */
This main program checks for a valid command line, open all
necessary files and calls the appropriate routine to process
mstr in_str[INPUT_STR_LEN]; /* Input line */
printf("Usage: $ FORMAT <input_file> <output_file>\n");
if ((fdin = fopen(argv[1], "r")) == NULL) {
printf("Error: Cannot open input file %s.\n", argv[1]);
if ((fdout = fopen(argv[2],"w")) == NULL) {
printf("Error: Cannot open output file %s.\n", argv[2]);
while (fgets(in_str, INPUT_STR_LEN, fdin) != NULL)
printf("Information: Processing error.\n");
HSMGSHR,中文螢幕管理作業庫,包含在 OpenVMS/Hanyu 系統中。它是一 組協助設計、組合和在影像螢幕上追蹤映像的常式。
螢幕管理設施提供兩項重要的服務:終端機的獨立性和組合的便利。
可由 OpenVMS/Hanyu 支援的任何程式語言呼叫作業庫功能。若要將作業庫與程式連結,請輸入:
$ LINK PROGRAM, SYS$INPUT/OPTION
若需要詳細的說明,請參閱《VMS RTL Chinese Screen Management (SMG$) Manual》。
這些常式能讓使用者將排序 (sort) 或合併 (merge) 的運作,整合入應用 程式;使之能處理包含中文資料的記錄,對它們作排序或合併,然後再處理之。
下列為使用排序合併可用之可呼叫常式。若需有關細節,請參閱 《VMS Utility Routine Manual》。
SOR$BEGIN_MERGE 設定關鍵引數並且執行合併。這是 MERGE 所特有的唯一常式。
SOR$BEGIN_SORT 藉著傳遞關鍵資訊和排序選項來起始設定排序運作。這個是 SORT 所特有的唯一常式。
這些常式可以從支援 VMS 程序呼叫和 "條件處置標準" 的任何一個語言來呼叫。若要使用 OpenVMS/Hanyu 的 SORT 和 MERGE 可呼叫常式,則應輸入 以下的命令,來連結應用程式與作業庫:
所有屬於字串型的參數,以 descriptor 方式傳輸。所有屬於純量的參數以 references 方式傳輸。這些參數有次序性,您可以將選擇性的參數以 value 方式傳輸零值。主程式也可以省略最後面選擇性的參數,直接以較短的參數列帶入,有關細節,請參閱 《OpenVMS Utility Routine Reference Manual》。
您可以利用下列假設的資料類型,指定中文的對併順序;對使用者而言,可將它們視為一般性的符號。
上述的常式於處理中文資料所回復的狀態碼 (status code) 與處理 ASCII 資料所回復的狀態碼,是相同的。若需詳細說明,請參閱 《VMS Utility Routines Manual》。
您可將資料以一完整的檔案或單一的紀錄,送給上述的常式作處理。當您的程式送出一個或若干檔案以產生一個排序或合併後的輸出檔案時,您就已經使用檔案的介面了。當您的程式在同時間送出多筆記錄,並且於同一時間接收這些經過排序的記錄時,您就已經使用記錄的介面了。
您可將檔案介面與記錄介面組合應用,亦即將資料以檔案方式傳入,再陸續接收這些經過排序後的記錄;或將資料以記錄方式一一傳入,再將這些經過排序後的記錄,寫到一檔案中。此二種介面的組合,提供了更多的彈性。
$ TYPE HSY$EXAMPLE:SAMPLE_SORT1.FOR
C The following FORTRAN program sorts the records in the file
C POET.DAT and creates an output file named EXAM1OUT.DAT
C All the records in the input file are sorted in Phonetic code
C collating sequence based on the first 12 bytes, that is,
C the first 6 Chinese characters in each record.
EXTERNAL SOR$K_SEQ_PHONETIC_CODE
DATA IN_FILE, OUT_FILE /'POET.DAT','EXAM1OUT.DAT'/
KEYBUFF(2)=%LOC(SOR$K.SEQ_PHONETIC_CODE) !Phonetic code
STATUS=SOR$PASS_FILES(IN_FILE, OUT_FILE)
STATUS=SOR$BEGIN_SORT(KEYBUFF)
$ TYPE HSY$EXAMPLE:SAMPLE_SORT2.FOR
C This is a FORTRAN language example calling srot routines using
C multiple collating sequences.
C This program sorts data with file interface on input and record
C interface on output.Two collating sequences are specified here,
C the first being the number of storke count with ascending sort
C order and the second being the radical sequence with descending
C Define external functions and data and initialize
CHARACTER*9 INPUTNAME !Input file name
INTEGER*2 KEYBUF(9) !key definition buffer
EXTERNAL SOR$K_SEQ_RADICAL !Radical collating sequence
EXTERNAL SOR$K_SEQ_STROKE !Stroke collating sequence
KEYBUFF(2)=%LOC(SOR$K_SEQ_STROKE) !Primary key STROKE
KEYBUFF(6)=%LOC(SOR$K_SEQ_RADICAL) !Secondary key RADICAL
ISTATUS=SOR$PASS_FILES(INPUTNAME)
C Initialize the work areas and keys
ISTATUS=SOR$BEGIN_SORT(KEYBUF,,,,,SRTTYPE,%REF(3))
C Now retrieve the individual records and display them.
5 ISTATUS=SOR$RETURN_REC(RECBUF)
ISTATUS=LIB$PUT_OUTPUT(RECBUF)
6 IF (ISTATUS.EQ. %LOC(SS$_ENDOFFILE) GOTO 7
C Clean up the work areas and files.
$ TYPE HSY$EXAMPLE.SAMPLE_MERGE.C
/* This is a C language example.
This program merges two input files into one output file. The
key is starting from the first byte of the record
(offset zero byte) of size two bytes(i.e. 1 Hanyu character).
It also checks if the input files sequence are in the right
struct DESCRIPTOR { int leng ;
globalvalue SOR$K_SEQ_PHONETIC.CODE,
char infile1[ ]="EXAM31.DAT" ,
inptr1={strlen(infile1) ,infile1},
inptr2={strlen(infile2) ,infile2},
outptr={strlen(outfile) ,outfile};
key[1]=SOR$K_SEQ_PHONETIC_CODE /*phonetic code */
option=SOR$M_SEQ_CHECK; /* check input sequence */
if(!((status=sor$pass_files(&inptr1,$outptr))
& STS$M_SUCCESS))
if(!((status=sor$pass_files(&inptr2))
& STS$M_SUCCESS))
if(!((status=sor$begin_merge(key,&lrl,&option))
& STS$M_SUCCESS))
可呼叫的 HTPU 常式可使 HTPU 在任何的程式語言和應用程式中皆可存取。 HTPU 可以從任何一種程式語言寫成的程式呼叫出來;而此程式使用OpenVMS 程序呼叫和條件處置標準來產生呼叫。亦可以從 OpenVMS 公用程式呼叫 HTPU,例如 HMAIL。可呼叫的 HTPU 可在程式之中執行中
HTPU 與 DECTPU 支援相同的可呼叫介面,如 "簡化的可呼叫介面" 和"完整的可呼叫介面"。若需有關 DECTPU 可呼叫介面的細節,請參閱《VMS Utility Routines Manual》 第十四章。
簡言之,HTPU 可呼叫介面和 DECTPU 可呼叫介面之間的差異如下:
以下是使用完整的可呼叫介面,並以 BLISS 寫入來引動 HTPU 的程式範例。
! Example program of using HTPU full callable interface.
! 2. $ LINK EXAMPLE, SYS$INPUT/OPTION
! 3. $ DEFINE HTPU$TESTING <your directory>
ADDRESSING_MODE (EXTERNAL = GENERAL)) =
! To test the callable interface of HTPUSHR
TEST_USER_ARG = %X'FO'; ! an arbitrary pattern
test_callback, ! Callback for tpu$initialize
test_call user, ! Call user routine
tpu$fileio, ! HTPU file routine
tpu$message, ! Displays HTPU message
tpu$cliparse, ! HTPU CLI parser
tpu$initialize, ! Initialize HTPU
tpu$execute_inifile, ! Execute initial commands
tpu$execute-command, ! Execute HTPU statements
tpu$control, ! HTPU main control loop
$test_bpv = bpv : VECTOR [12];
callback_bpv : BLOCK [8, BYTE],
! Setup the callback procedure
$test_set_bpv (callback_bpv, test_callback);
! Set the user argument for test_callback, but ignored there
! Initialize HTPU. Initialization options are specified in
status = tpu$initialize (callback_bpv, .user_arg);
! Set up the default section file
status = tpu$execute inifile();
! Finally, we clean up the HTPU and then return
cleanup_flag = tpu$m delete context;
RETURN tpu$cleanup (cleanup_flag);
ROUTINE test_callback (user_arg) =
! Sets up the item list for tpus$initialize
call_user_bpv : BLOCK [8, BYTE],
$test_set_bpv (fileio_bpv, tpu$fileio);
$test_set_bpv (call_user_bpv, test_call_user);
! Calls tpu$cliparse to construct item list for tpu$intialize
! passing it tpu$fileio as the fileio routine and
! test_call_user as the call_user_routine
$DESCRIPTOR ('HTPU htpu$testing:test.txt'),
ROUTINE test_call_user (int_param,
str_param : REF BLOCK [,BYTE],
str_out : REF BLOCK [,BYTE]) =
! It simply prints out the integer parameter int_param
! and the string parameter str-param by means of tpusmessage
buffer_desc : BLOCK [8, BYTE],
! Form a fixed-length string descriptor
buffer_desc [DSC$W_LENGTH] = 80;
buffer_desc [DSC$B_DTYPE] = DSC$K_DTYPE_T;
buffer_desc [DSC$B_CLASS] = DSC$K_CLASS_S;
buffer_desc [DSC$A_POINTER] = buffer;
! Construct the ini_param message and print it out
status = $FAO ($DESCRIPTOR(' Integer: !UL'), buffer_len,
buffer_desc [DSC$W_LENGTH) = .buffer_len;
status = tpu$message (buffer_desc);
buffer_desc [DSC$W_ LENGTH) = 80;
!Construct the str_param message and print it out
status = $FAO ($DESCRIPTOR('String: !AF'), buffer_len;
buffer_desc, .str_param [DSC$W_LENGTH],
buffer_desc [DSC$W_LENGTH) = .buffer_len;
status = tpu$message (buffer_desc);
buffer_desc [DSC$W_LENGTH) = 80;
! We need to use lib$sgetl_dd to allocate the memory
! for the return string since TPU uses lib$sfreel_dd
! to free our string when it needs to.
str_out_len = %CHARCOUNT(%STRING('Success'));
status = lib$sgetl_dd (str_out_len, str_out [0,0,0,0]);
! Perform editing to the buffer
status = tpu$execute command ($DESCRIPTOR (command));
! It first copies two lines to the MAIN buffer
$test_execute ('COPY_TEXT ("This is the first statement" );
$test_execute ('COPY_TEXT ("This is the second statement");
中文注音符號包括三個部份,即聲母、韻母和聲調。注音符號又分為二十一個聲母、三十八個韻母和五個聲調。以下三張表分別對每個聲母、韻母,以及聲調指定對併值;對遞增順序的排序或合併,首先以聲母值的遞增順序對併。若聲母值相同時,再按遞增順序對併相同韻母值的字元。同理,若聲母、韻母相同時,再按遞增順序對併相同聲調值的字元。遞減順序的排序或合併,則以較大數值的字元首先對併。