顯示具有 中文作品 標籤的文章。 顯示所有文章
顯示具有 中文作品 標籤的文章。 顯示所有文章

2018年2月10日 星期六

台語語音筆記本 Taiwanese Speech Notepad


Taiwanese Speech Notepad

台語語音筆記本

An Application software of Vikon Multilingual Text to Speech System Compiler


「台語語音筆記本」為已註冊著作權之電腦翻譯及台語語音輸出 (Taiwanese Text-to-speech) 軟體,所錄語音具有特定聲紋,不需外掛錄音程式即可製作有聲讀本,或做為聲障及腦性麻痺患者的輔助代言工具。系統使用之台語聲調群剖析器 (Taiwanese tone group parser)、語音引擎 (Speech engine) 及語音合成器 (Speech synthesizer) 均為作者設計之原創程式 (Original program),直接安裝於個人電腦獨立運作,不需連結 MS Speech SDK或 IBM TTS Engine 。




張東瀛  張佑竹

2000-2018

本文自2009-10-20同步刊於 Internet Archive

Identifier-access: http://www.archive.org/details/TaiwaneseSpeechNotepadenglishVersion






       1. 前言 

       2. 系統特色與功能 

       3. 程式架構說明

       4. 開發過程摘要

       5. 安裝

       6. 使用方法簡介

       7. 圖形操作介面說明

       8. 結語

       9. 誌謝

      10. 備註

 






前言 
 
十多年前,台灣坊間幾乎看不到口語化的台文作品,一般人也認為台語就是中國的閩南方言,根本無法書寫。台語真的無法書寫嗎?其實,台語一直有文白兩套語音系統。讀書人用的文音可直接以漢文寫出,例如文言文、漢詩或唐宋詩詞等。至於日常庶民所用的白話音則與現代中文有相當差異,當然無法完全以中文白話書寫。從台灣文獻可知,早在一百多年前 (1875) 台灣的基督徒就用羅馬字來寫台灣話 (通稱白話字或教會羅馬字)。甚至更早的三百多年前 (1661) 荷蘭人也用羅馬字為台灣平埔族原住民建立新港語的聖經書。白話文由於不能用打字機繕打,戒嚴時期又被統治者查禁,所以只在基督教會間通行。解嚴以後,各種台語系統紛紛出土,個人電腦也可以處理白話文或音漢併用的「漢羅文体」。不過白話文和漢羅文体在文書處理和電腦應用方面仍然不若純英文字母的拼音系統方便,主要還是聲調記號和文字編碼的問題。

自然語言電腦化,必須處理「聽、說、讀、寫」四種功能。聽和說的應用尚未普及;原因是除了語音辨識和分析技術以外更需仰賴人工智慧的邏輯推理和機器學習能力,目前仍在實驗階段。至於讀和寫,在實用上則比較成熟。「語音輸出引擎」 (Text-to-speech engine) 加上一部雙語辭典和簡單的文書處理器便可組合成雙語讀寫系統。台語電腦化,主要的關鍵有三;第一、文字碼最好能和 ASCII 碼相容,電腦處理時才不會有字碼衝突的問題。第二、建立人工的聲調群剖析器,才能正確地標出台灣話的八個聲調 (註 1)。第三、語詞和構詞法必需標準化,各種拼字法間可以規則互換,才有大量現成的辭典、語詞、語料和文字作品可供引用。至於台語和漢語間的互譯,則有賴於語法規則的建立,這方面的研究,仍有待努力。

本文除了敘述系統功能、程式架構和操作程序外,並就開發過程及心得作扼要說明。


系統特色與功能 

 
除了自己的母語以外,學習任何一種外國語都必須歷經一段艱辛而漫長的過程。開發這套軟体的目的是為了推動台語文字化,讓使用者藉著這個輔助學習工具在比較短的時間內學會讀寫流利的台語,完成「我手寫我口」的心願。作為自然語言的研究工具,MLTTS (MultiLingual text-to-speech) 系統也試圖提供一個結合人工智慧 (Artificial intelligence) 和計算語言學 (Computational linguistics) 的實驗平台。台語的聲調,是語法和語意的關鍵所在。從語言認知的觀點看來,台語語言學的研究或可為 AI 領域注入新的動力。

系統特色有五:


 一﹑與 Windows 作業系統相容。
 二﹑使用圖形介面,國小學童即可操作,不需特別訓練。
 三﹑自然語音輸出。
 四﹑低階個人電腦 (Intel Pentium-133) 即可運作。
 五﹑採用開放式設計,擴充性高,並可適用多種語音字 (辭) 典。
主要功能包括:
 一﹑台語及漢語語詞雙向翻譯。
 二﹑台語及漢語文句雙向翻譯。
 三﹑相對台語之英語/日語/漢語即時同步顯示。
 四﹑相對漢語之台語/日語/英語即時同步顯示。
 五﹑台語語詞及語音同步輸出 (台語有聲詞典)。
 六﹑台語文句拼字檢查及語音輸出 (聲障及腦性麻痺患者代言)。
 七﹑台/日/漢/英多語辭典及台語釋例即時查詢。
 八﹑文字匯入、匯出及語音存檔 (台語有聲讀本製作) 功能。 
 九﹑台語網頁及外部程式台語語音輸出。
 十﹑英語/漢語字彙搜尋及索引檔製作。

程式架構說明 

 
台語語音筆記本,如圖 (一),定位為個人學習工具。程式採取使用者圖形介面 (Graphic user interface) 和功能導向設計。規劃操作介面時,先將主要功能和相關功能臚列,並釐清相互關係。直接由使用者操控之功能,即賦予適當的控制按鈕。由控制按鈕激發子功能或動作 (Operation) 則以物件 (Object) 方式處理。主程式除了控制按鈕以外,還有四個主要的顯示介面,分別為台文框、同步顯示框、漢文框和台漢雙語辭典。連結這些介面所需的資料 (Data) 和控制機構 (Mechanism) 則由一組資料管理程式擔綱。

資料管理程式可說是台語語音筆記本的心臟;除了透過副程式呼叫,將控制訊息和語詞資料在框架間傳遞以外,又以索引循序法 (Indexed sequential access method) 利用關鍵值來進行多語辭典的語詞讀取、增刪、修改和回存索引等工作。為了連結資料和索引,程式使用指標 (Pointer) 和鍵值 (Key) 兩個向量來決定鍵值和位址。索引檔貯存指示資料錄位址的指標、資料錄總數、被消除資料數及後進先出的推疊指標。搜尋方式則採用減半搜尋 (Binary searching) 演算法。

圖 (一) 教育部台語羅馬字版操作介面

台文框和漢文框則是簡單的文書處理器。這兩個物件可進行文字輸入與輸出, 提供使用者揮灑的空間。系統對台文框文句提供拼字檢查功能及連寫、分寫容錯設計,適合初學者練習拼音。台文框同步顯示框經由文字感知器 (Text sensor) 可測知滑鼠所在位置的台語詞而將相對台羅Unicode字型、漢語、日語和英語作同步顯示。文字感知器也可藉著滑鼠按鍵動作將語詞轉化為語音輸出。

台/日/漢/英多語辭典可以預藏十萬個台語詞,相對漢語、日語及英語,分頁存放。滑鼠在台文框點按左鍵,或在漢文框指定 (反白) 某個語詞時,辭典即顯示滑鼠所在位置的台語詞。使用者也可以操作控制按鈕捲動翻頁,或指定某頁進行瀏覽。

這種功能導向設計其實是框架理論的應用和人類控制系統的模擬。這裡提到的框架,並非 Visual BASIC 的 Frame 控制項,而是一個觀念。框架理論的基本概念是將物件分割成幾個具有相關特性的小單位,每個小單位又可視需要分割成更小單位,形成一種階層樹狀結構 (Hierarchical tree) 。這種組織技巧可將複雜問題簡化,適合表達物理結構、抽象觀念、處理程序或描繪事件。具有階層關係的框架,可以傳承上階框架的內部參數,無階層關係的框架,則利用映射 (Mapping) 技巧,例如呼叫函數或程序,建立橫向關係。Visual BASIC 的表單 (Form) 就是具有框架結構的物件。在程式設計的過程中,應用框架映射技巧,把凌亂的程式碼組織起來,分別置於適當的模組,對於程式維護和執行速度的提昇,常有立竿見影的效果。

程式架構如下 (括弧內為相關功能或有階層關係之功能) :

1. 線上操作說明: 顯示操作說明
2. 檔案開啟及儲存: 分別處理台文、漢文及語音檔之開啟及存檔作業 (9,11,14,16)
3. 音色選取器: 選取男聲、女聲或童聲作語音輸出 (17,18)
4. 語音播放器: 自語音資料庫截取語音資料並進行播放 (13,15,16,17)
5. 台語翻譯器: 將漢語文句斷詞、搜尋、比對後譯成台語 (19,16)
6. 語詞同步顯示開關: 打開或關閉同步顯示語詞功能 (13,16)
7. 音效開關: 將語音輸出功能打開或關閉 (4)
8. 漢語翻譯器: 將台語文句剖析、搜尋、比對後譯成漢語 (15,16)
9. 台文文書處理器: 台文文書處理 (8,12,13,15,16,17)
10. 語詞同步顯示器: 經由文字感知器將滑鼠所在位置台語詞的相對漢語、英語和日語作同步顯示 (13,16)
11. 漢文文書處理器: 漢文文書處理 (5,12,16,19)
12. 多語辭典語料庫: 貯存台語、日語、漢語、英語語料及索引 (4,5,8,13,14,16)
13. 文字感知器: 偵測及辨識滑鼠所在位置的文字內函 (10,16)
14. 錄音器: 將指定之台語語詞同步錄音存檔 (2,16)
15. 文句剖析器: 將台語文句分解成單語,經過篩檢後存入字串陣列 (4,9,17)
16. 資料管理器: 執行語詞資料庫之管理作業 (4,5,8,9,10,11,12,13,14,17,18,19,20)
17. 語音合成器: 自語音資料庫截取所需相關語詞之語音資料再合成為語音檔 (4,9,15,16,18)
18. 二進位資料處理器: 製作語音資料庫 (16)
19. 漢語質詞庫: 貯存漢語斷詞用的質詞 (5,11,16)
20. 辭典轉換器: 將文字檔格式之辭典轉換成多語辭典資料庫 (16)
21. 外部應用程式語音輸出介面: 網頁及外部應用程式台語語音輸出 (4)
22.  聲調群剖析器: 推論引擎,知識庫,變調規則庫(語詞變調調處理器) (12,16,17,19)
23. 索引編輯器: 辨識及搜尋使用者輸入之語詞並建立台/漢/英相關語詞索引 (12,16)
24. 拼字檢查器: 將羅馬字語詞與詞典比對,並將錯誤或詞典未收錄語詞以不同顏色顯示 (12,16,19)
25. 同步語音產生器: 將輸入之漢字台語或羅馬字語詞轉換為同步語音輸出 (4,6,13,16,17,20)
26. 字元編碼轉換器: ASCII 與 UTF8 字元編碼互轉 (2,21)

開發過程摘要 

 
規劃好程式架構,便開始寫碼,將構想程式化。除了應用已開發的程式碼以外,新增三千多列程式碼費了大約六十個工作天。為了測試程式功能及效率,必須建立台/日/漢/英多語辭典、漢語斷詞用的質詞庫、包含一萬五千個基本語詞的台語語音資料庫及十多個小型工具程式,又費了壹百多個工作天 (註8)。一般而言,寫碼過程還算順利。個人的感覺是使用視覺化程式語言如 Visual BASIC 來設計 Windows 應用程式,確實比開發 DOS 應用程式方便,只是程式設計者的自由度大受限制,例如侷限於物件導向 (Object-oriented) 的單一思維,或過於依賴 ActiveX類型控制項,將會鈍化寫作能力,甚至抹殺創意。程式開發中,無可避免地,也曾遭遇困難,所幸各個瓶頸逐能一一克服。某些功能雖不盡理想,卻有改善的空間。部分心得摘記如次:

語音檔的處理

自然語音輸出是主要功能之一。理論上,每個語詞至少必須對應一個語音檔,只是在 Windows 環境裡單一目錄內的檔案若超過 2000 個,搜尋速度明顯降低。數萬個基本語詞如果不以 Binary database方式建立語音資料庫,勢必無法滿足使用者對瞬間回應 (Immediately response) 的要求。由於語詞語音長短不一,同一語詞又需對應變調、不同音色等多項語音資料,必須設計三維的動態資料結構來貯存語音合成器所需的語料,並就單一語詞提供隨機存取機制。當使用者按下滑鼠,經由文字感知器,系統才可針對指定語詞做語音輸出。

語音錄製

台語可說是音樂的語言 (A language of music)。第三聲 (陰去) -第七聲 (陽去) -第一聲 (陰平) 正好是五聲音階的 Do-Me-So。所以「白鷺鷥」、「安童哥買菜」等唸謠讀起來就像唱歌一般。這種聲調語言 (Tone language) ,每一音節的音高 (Pitch) 、音量 (Volume) 、長短 (Length) 和強度 (Strength) 都對語意有決定性的影響。人工合成的語音,很難掌控台語的八聲音調特性,因此本系統採用自然語音輸出方式。然而傳統的線性錄音,必須經過移訊 (DC offset) 、雜音去除 (Noise reduction) 、順音 (Normalization) 、切割 (Trim) 等手續,才能完成一個語詞語音,是既單調、耗時又容易出差錯的作業。設計系統專屬數位錄音器勢在必行。一來可做非線性錄音,隨時將新增語詞錄製存檔,繁複的音效處理工作改由電腦代勞,甚至連存檔檔名也由文字感知器傳遞,減少鍵盤輸入造成的錯誤。原先估計完成 13200 個語音檔約需200個工時,以數位錄音器錄製只需120個工時,效率提高不少。

台漢互譯功能設計

自然語言翻譯對人類的智能是一大挑戰。不同語系間語言互譯,極為困難。嚴格說來「台漢互譯」仍在實驗階段,目前只做語詞轉換。由於台語和漢語間有高度的語法共通性,使得兩種語言經過語詞轉換後的可讀性相對提高。即令如此,台語和漢語語詞間仍有大約20%的差異 (註2)。漢台翻譯的難題之一是中文斷詞 (Word segmentation) 。拉丁語系字彙間以空格分開,不會有斷詞的困擾,中文若不經斷詞,無法進行翻譯。斷詞的關鍵技巧在於找出用來斷句的基本語詞,例如「的」「們」等出現頻率較高,語意清楚,特別是沒有上下詞連結的「質詞」 (Prime word) 。

進行翻譯時先將質詞依序讀入字串陣列,再以「比對」和「取代」方式把對應之台語語詞植入中文文句,並將中文切割成數個片斷,斷詞和語詞互換同步完成。切割後的片斷漢語如無法再行切割時,便可存入質詞庫當作質詞。這種遞迴機制 (Recursive mechanic) 可以提高斷詞效率,但是影響斷詞正確率的因素卻是質詞的優先排序 (Priority) 。質詞如何排序,在實務上頗為困難。統計常用語料的詞頻,可作為循序建立的基礎,但是兩者間並非唯一相關。

漢文本是一字一義,後來逐漸演化成一字多義。近代口語文中複字詞使用率大增,文句中某個漢字到底是單語詞還是與前後字結合成多字詞,常會造成困擾。如果斷錯文句便會弄錯語意。除了字義清楚的單字詞以外,質詞應以二字詞或三字詞為主。原則上中文質詞常以字數多寡排序,不過仍須考慮其他相關因素,否則極有可能出現類似 {台灣大學/生活/在/快樂/的/環境/裡} 的情況。

台語拼音化以後,當然不需斷詞。漢語裡的同音異義字只取一個最常用的單音詞,其餘則以複字詞代替。例如「爭」改為「爭執」,「征」改為「征討」,如此台/漢/英多語辭典中同音異義字 (詞) 的機率就降低了。換句話說,拉丁化的台語文是以「語詞」做基本單位,這種做法乃是源自於台語特有「整体語詞」的語法觀念,與北京話、客語、廣東話等羅列漢字的語法大不相同。至於質詞庫,因為用來處理中文斷詞,必需將同音異義字或詞全部納入。

台語的變調 (Tone sandhi )與聲調群 (Tone group)

構成台語的音樂性因素,除了豐富的八聲音調以外還有一個特殊的「變調」現象,規則如下:

第一聲轉第七聲,第七聲轉第三聲,第三聲轉第二聲,第二聲轉第一聲,第五聲轉第七聲以及第四聲和第八聲互轉 (註3)。通常語詞尾字保持正音,而前字必需變調。文句內的讀音也適用這個原則。「變調」意味著說話者尚未講完,從語言學的觀點看來,這種現象正是「整体語詞」概念的延伸,同時也有語意蘊函的作用。然而台語的變調現象不僅讓語音分析變得複雜,語音輸出的難度也相對提高。特別是文句裡語詞變調的情況頗多,和辭典中複字詞的變調常有差異,同一語詞,必須分別錄音,才能改善語音的輸出品質。

變調並非台語所特有,其他語言如梵語、中文或多或少都有變調的情況。然而台語變調的獨特性在於變調和本調所形成的聲調群。聲調群只有最後一個音節讀本調。換句話說,每個台語語詞都有兩種調性。複音節語詞和聲調群的前音節或中間的音節讀變調,最後音節則讀本調。因此我們可以歸納出「若且唯若語詞的集合裡最後一個語詞讀本調時,此一語詞的集合即為聲調群。」(if and only if a lexical tone was given in the end of a set of words, then the set of words was a tone group.)

台語的變調,雖然複雜卻有規則可循。更重要的是台語聲調和語意、句法結構密切相關。例如 "麻仔大 e5 燒餅 (有大麻粒的燒餅) " 和 "麻仔大 e5 燒餅 (像麻粒一般大的燒餅) " 就用聲調區別語義。而 "這間有栽花" 和 "這間有栽花 e5 厝是 guan2-tau (這間有種花的房子是我家) " 則是用上下文語意來決定前面數量詞 "這間" 的調性。

除此之外,台語語句也應用插入語詞或聲調群來修飾語氣或變更語義。例如 [A-bi2] [beh khi3 Tai5-pak.] 是由兩個聲調群組成的句子。經由插入不同調性語詞或聲調群,創造出獨特的聲調群衍生結構。
1. 插入變調語詞 siunn7: [A-bi2] [siunn7 beh khi3 Tai5-pak.] 聲調群數目不變。
2. 插入本調語詞 pai3-it: [A-bi2] [pai3-it] [beh khi3 Tai5-pak.] 聲調群數目增加為三個。
3. 插入聲調群 tse7 gu5-tshia: [A-bi2] [beh tse7 gu5-tshia] [khi3 Tai5-pak.] 聲調群數目增加為三個。
不論插入的單元是變調語詞、本調語詞或聲調群,語句的最終形式一定是以聲調群 (Tone group) 的結構呈現。

依照台語聲調群的定義及其衍生架構可以發現,台語的生成系統 (Production system) 十分明確,因而這個既科學又合邏輯的語言,可以不需經由文字系統相傳數千年之久。聲調群必是台語語言習得 (Taiwanese language acquisition) 的重要因子之一。在台語語音筆記本開發過程中,我們發現台語的變調在語詞層次不僅規則簡單,而且具有普遍性。在語句層次也能用規則處理變調程序,明確定義聲調群。聲調群不僅是組成台語語句的基本語法單元 (Syntax unit)和韻律分界 (prosodic boundary),同時也是獨特的語義單位 (Unique semantic unit) 。從現代中文 (Modern Mandarin)裡卻找不到這些現象。台語很可能是極少數以句內語詞變調方式建立聲調群結構的自然語言。

語言知識的轉換與聲調群剖析器

一般而言,語音引擎及語音合成器的設計比較偏重程式技巧。聲調群剖析器則仰賴語言知識的轉換,也就是人工智能的展現方法。語言學家Elisabeth Selkirk 認為韻律結構(prosodic structure)被用來做為語音和語法的媒介。這種現象在台語尤其明顯。台灣人的小孩在學習母語的過程中,經由變調所形成的聲調群來習得語法結構方面的知識,並且在腦海裡逐步建立一個高效率的語詞變調處理機制,也就是聲調群剖析器。因此在過去的十多年裡,我們一直試圖建立一個符號系統做為將語言專業知識 (Language expertise) 和經驗( heuristic knowledge) 轉換為知識庫的重要工具。同時應用知識表徵方法 (Knowledge representation method) 來建構人工的聲調群剖析器。

符號系統的設計概念,是在早期制定或修改變調規則的過程中所衍生的創意。原則上符號系統必須能夠讓語言學家方便且有效地進行語詞標記,所以必須精確定義每一組符號,並建立準則(criteria)和標記程序。然而在建構聲調群剖析器的過程中往往必須經由不斷地測試->修正->回饋->測試(Testing->modify->feedback->testing)循環,才能提高語詞變調正確率。因此,在修正階段會新增標記符號(token)或修改標記符號的定義來配合現有的規則,也可能新增或修改規則來配合標記符號。

目前我們所建立的符號系統是以預設聲調標記(default tone mark)、預設詞類(default POS mark)和模式(mode mark)三種標記組成。知識庫內的每個語詞或詞組都賦予一組包含這三種語詞標記屬性(attribute)的符號。處理台語變調時,藉著這組符號並協同以規則為基礎的變調處理器 (Rule based sandhi processor),便能將句內語詞賦予正確的調值。即使像下述例句的 ti7 和 be2,系統也能 針對相同語音,不同語義的語詞或多詞類(multiple-POS) 語詞推論出正確的詞類,予以定調。
Ti7 (筷子,名詞,讀本調) khng3 ti7 (在,介系詞,讀變調) uann2-na5-a2 lai7.
Tsit-tsiah be2 (馬,名詞,讀本調) be2 (買,動詞,讀變調) beh kah goo7-ban7.
這種應用語言學理論建構台語聲調群剖析器的方法,在實務上是以知識工程技術來模擬語言習得的實驗環境。不僅驗證人工智慧發展工具可以協助我們了解語言習得的過程,也顯示人類的語言不但是溝通的工具,也是一種思考模式。語言學和人工智能的研究必有相輔相成的密切關係。台語聲調群剖析器包含知識庫和可在Windows XP/Win7 作業系統操作的程式(ZIP檔案), 可提供學術研究者評估測試使用。 台語聲調群剖析器檔案下載

外部程式語音輸出介面

近幾年來,網頁已經成為普遍而重要的大眾傳播媒體。如何讓使用者經由 Internet 傳授及學習台語時可以同步聽到正確的台語語音輸出,是程式設計的重要構想。為了讓漢文、漢羅、全羅等台語文都可在網頁或其他應用程式做語詞文句的語音輸出,我們設計一個外部應用程式介面,加上語音輸出和聲控開關。台語教材若以網頁格式或一般文字模式編輯,使用者便可經由網路或其他應用程式學習台語。此一功能設計,不需下載任何語音檔,也擴充了軟体的應用領域。

程式測試

規劃程式架構時,難免有思慮不周之處。部分功能在主體完成後添加,往往「牽一髮動全身」,除錯工作總是隨時進行。主程式經過編譯後檔案約600K Bytes,語音檔卻將近600 M Bytes。幸好資料檔可以存放光碟備用,不至佔用大量硬碟空間。製作龐大的資料檔案,確實需要不少人力。大部分資料來源格式必須進行轉換才能讓主程式使用,因此少不了要寫一些工具程式。現成的應用軟體如 WordPad、UltraEdit (文書編輯)、PaintShop Pro (繪圖)、Microangelo (Icon 繪製)、GoldWave、CoolEdit (音效處理)等,對程式開發和資料的建立,都提供不少助益。開發和測試平台用 Pentium-133 PC 和 Windows 作業系統,因此即使是入門機種,程式也可以得到滿意的執行效率。算一算,第一階段開發時程將近六個月,終於告一段落 (註6)。

系統建置所需核心技術

本系統建基於歷年來研發的軟体和相關技術,包含1998年以前在 DOS 作業系統開發的程式碼也能順利移植到 Windows。只要是ASCII編碼的語言,基本上都能經由「Vikon Multilingual Text to Speech System Compiler」建構語音輸出和對譯系統,差別只在特定詞庫和媒介語言(Medium language 註7) 的語意網路及框架必須相互對映。應用的核心技術有:

1. 自然語言處理與機器翻譯 (1984-1986)
意義表徵、概念解析、媒語檢索、二元決策樹應用
2. 三維動態資料庫 (1984-1988)
文書及資料處理、三維動態資料結構設計、資料索引及搜尋演算法、資料庫實作
3. 專家系統及規則推論 (1987-1991)
知識表徵技術、規則與邏輯推論引擎設計、多媒體整合、知識庫及專家系統實作
4. 語意網路與框架結構設計 (1987-
語意分析、常識推論、知識表徵、框架結構設計、物件導向與功能驅動設計實作
5. 使用者圖形介面 (1992-1993)
滑鼠驅動及座標偵測、圖形解碼及顯示、音效播放、外部程式介面設計實作
6. 語音、影像處理及多媒體編輯管理 (1992-1998)
音效、影像處理與合成、英漢字形映射、動畫設計、影像擷取、圖形辨識、多媒體編輯與教學系統實作
7. 語音引擎及語音合成器設計(1998-2001)
巨量語料處理、語料尋取、音節切割與合成、剖析器設計、辭彙檢索、拼字撿查、字元偵測、台語及中文語音輸出系統實作
8. 詞庫建構 (1998-
多語辭典及語料庫設計、語料蒐集與轉換、語言知識及專家經驗解析與整合、搜尋演算法及構詞分寫、連寫容錯設計
9. 語音輸出編譯器 (2001-2005)
語音輸出系統功能測試與整合、語料萃取、外部應用程式語音輸出介面設計、字元碼轉換、語音輸出編譯器實作
10. 語音模型訓練及辨識 (2005-
隱藏馬克夫模型之應用與改良、音高偵測、聲調比對、音節辨識、台語語音辨識系統實作
11. 自動回饋與學習 (2006-
訊息回饋、語言知識與邏輯判斷整合應用
12. 語言模型及認知模擬 (2008-
半自動機器學習實驗、語言模型實作

安裝 

 
請執行光碟 (或下載檔案) 根目錄內的setup.exe程式進行安裝作業。Windows98使用者請用Win98setup目錄內的setup.exe程式進行安裝。版本更新時需自控制台將舊版先行移除。

為了避免佔用太多硬碟空間,程式執行時必須從光碟讀取語音資料。硬碟有足夠空間時,將光碟 (或下載檔案) Mlttsb 目錄內的檔案複製到工作目錄 (c:\Program Files\mlttsb) 內,可加快語音讀取速度。

使用方法簡介 

 
會說台語或漢語的使用者,可試著在電腦台文框輸入台語羅馬字數字調符之語詞或文句 (註4)。當輸入一個語詞,按空白鍵或Enter鍵時便可聽到合成的語音來判斷輸入語詞是否正確 (此功能可 On/Off)。滑鼠移動時,會將台語及漢語同步顯示 (此功能可 On/Off)。對於沒有把握或不會拼寫的文字,可在漢文框內輸入漢語,反白後即可查出相對的台語詞,並聆聽台語語音。不熟悉的語詞也可以用英文或漢語做字彙搜尋。

用滑鼠在台語詞上點按左鍵,即可聽到該字詞的語音 (此功能可 On/Off) 並顯示字詞在辭典內的位置 (註5),使用者可在辭典內上下翻頁搜尋。句子或文章輸入後,語音合成器會將反白部分連續讀出 (此功能可 On/Off) ,翻譯器則將反白部分漢譯。無法漢譯的語詞或外來語則保留原文成為漢羅文体。

輸入好的臺語、漢譯和語音都可分別存檔備用。已存檔的台文可再打開繼續編輯或修改。其他文書處理器如 Word、WordPad 內的文字也能在反白複製後用 Ctrl-v 貼到台文框。台文框數字調符之文句內容也可反白後按 Ctrl-c 複製貼到其他文書處理器。Ctrl-x (剪下)、Ctrl-z (復原)、Ctrl-a (全選) 都可協助使用者進行文書處理工作。上述功能亦可按滑鼠右鍵列出選單,CopyAsUnicode (G影片) 並能將反白的ASCII台文即時轉換為台語 Unicode 格式貼到 Notepad、Word 等可以處理 Unicode 的外部程式。SpellCheck 可做拼字檢查。詞典已有收錄的語詞以黑色字體顯示,詞典尚未收錄但可合成的語詞以藍色字體顯示,無法合成或與構詞法不合的語詞則以紅色字體顯示。

圖形操作介面說明

 
外部應用程式語音輸出介面及台語文格式轉換 以滑鼠左鍵點按此圖,可開啟外部程式語音輸出介面  。用滑鼠將網頁或文件內容反白後,
 點按語音合成器   可以聆聽 以 Unicode (調符) 或 ASCII (數字) 編碼的漢文、漢羅、全羅等台語文句語音輸出並將外部程式的台語文轉為ASCII
             數字格式,匯入台文框。 若只做台語文格式轉換,則以滑鼠右鍵點按   再用左鍵點按        
             在台文框按右鍵再選「貼上」可將外部程式的 ASCII 台語文匯入台文框。


字彙搜尋 點按此圖可以進行以英文或漢文來搜尋台語字彙並製作索引檔 EINDEX.TXT 及 CINDEX.TXT。搜尋後找到的台語語詞,反白後也能做語音輸出。

操作說明 顯示圖形操作介面及說明。
開啟檔案 (台文) 先用滑鼠點選台文框 (開啟台文檔) 或漢文框 (開啟漢文檔),再點按此圖可以打開已經建好的台文 或漢文檔案。
另存新檔 (台文) 要建立新的台文檔案可直接在台文框輸入文句。不論是新建檔案或 修改舊檔都可點按此圖,將台文框內容以ASCII文字檔格式及 Unicode 調符檔儲存。
存語音檔 (有聲讀本製作) 將目前正在朗讀的台文語音以 wave 檔格式儲存。此功能可直接製作台語有聲讀本,不需外掛錄音程式。
存漢文檔
將漢文框內容以文字檔格式儲存。
變換聲音 選擇以男聲、女聲或童聲播出 (本版以男聲播出)。
語音合成及輸出 語音合成器會將台文框指定 (反白) 的語詞或文句逐字讀出。按右鍵可選擇讀速。
漢文台譯
翻譯器會將漢文框中指定 (反白) 的語詞或文句內容斷詞後譯成台文。
無法台譯的語詞或外語則保留原文成為漢羅文体。篇幅較長的文章請
           分段翻譯。
 
 同步顯示及「隨打隨聽」開關 (on/off)
 點按此圖可以打開或關閉同步顯示語詞功能。

打開同步顯示: 當滑鼠在台文框內移動時會將滑鼠所在位置台語詞的相對漢語、英語 和日語作同步顯示。 關閉同步顯示: 尚未熟習台語的使用者在寫作台文時,往往無法拚出正確的語詞, 這時要將同步顯示開關關閉,然後把滑鼠移到漢文框內,輸入漢字時 便可同步聽到台語語音。將漢語詞反白後也可顯示相對的台文語詞並 聽到台語語音。同樣的,在台文框輸入台語語詞後按空白鍵或 Enter 鍵也能立即聽到台語語音以判定輸入語詞是否正確。
音效開關
點按此圖可以打開或關閉語音輸出功能。


 台文漢譯 
 翻譯器會將台文框中指定 (反白) 的語詞或文句內容譯成漢文。
   無法漢譯的語詞或外來語則保留原文成為漢羅文体。篇幅較長的文章請
   分段翻譯。


 關閉程式
 結束程式,返回 Windows 作業系統。



結語
受到中國傳統士大夫文化的影響,古早台灣文人常以文言或詩詞詠物寄懷。即使「文以載道」,「詩可言志」,然而能表達台灣人內心真正情感的口語卻無法訴諸文字。近百年來,少數讀書人還能將心裡的話,譯成日文或漢文留存下來。至於販夫走卒,只有在擔蔥賣菜之餘,從歌仔戲、布袋戲、「七字仔」、民間歌謠等求取心靈的共鳴。這種不能將母語以文字記載,只能依賴口耳相傳的「心事」,其中的辛酸與無奈,當不只是「誰人知?」而已。

二次戰後的長期戒嚴使得台灣人的尊嚴與母語教育幾乎喪失殆盡。曾幾何時,台語就像猶太人胸前的黃牌 (參見被遺忘的年代),成了低俗不雅的象徵。 年輕一輩的台灣人不僅不能寫,不願學,甚至也不能說出流利的母語。台語是否會在這股潛藏的危機裡逐漸消失,實在值得大家深思。語言學家王育德博士,畢生致力研究台語。他不僅揭櫫台語聲調群的研究,也是第一位將台灣話的辭典編纂出版的台灣人。日人遠山景久曾在王博士的追悼辭表示「民族的原點既非人種亦非國籍,而是語言和文字。」王育德博士的一生,正是認同台灣的最佳寫照。

台語是極為優雅的語言,也是少數目前 (2000) 能應用電腦做語音輸出的語言之一。經由本系統,不論使用羅馬字或是漢字,都可以將台語文字化和電腦化。希望有一天,台灣人都能用母語思考、寫作,敘述內心的感覺。本版收錄 60000 個台語語詞,詞庫陸續擴充中。敬請指教,並歡迎提供意見。

台語語音輸出專案製作

如果你會說台語,又想擁有自己獨特的語音輸出,我們可以協助你製作專屬於你的台語電腦語音輸出軟体。詳情請洽: poirotdavid@yahoo.com.tw 張佑竹。

下載台語聲調群剖析器
TSN 更新版檔案下載

已註冊使用者請將更新版檔案下載,解壓後將檔案複製到預設工作目錄 c:\Program Files\mlttsb\ 或安裝時指定的台語語音筆記本工作目錄。

[誌謝]

十八世紀以來,西方傳教士因宣教需要而學習本地語言。許多外國宣教師或神父在此居住數十年,甚至終老台灣。他們不僅能說流利的台語,更能用白話字書寫並作記錄,發行報紙。從過去出版的廈門語或台語辭典及手冊,其收編之白話字與貼切的英文譯文,可以看出他們對本土文化認識之深度與廣度,實在超乎我們想像之外。他們將宗教的熱誠與奉獻,轉化為對台語的關注,同時也為人類保存一種美麗而優雅的語言,確實值得我們尊敬與感謝。

本系統所用語詞及詞庫參考下列字 (辭) 典、書籍進行編輯,謹此向諸位作者致敬。

1. Medhurst, Walter Henry 麥都思 (1832). A dictionary of the Hok-keen dialect of the Chinese language
2. Douglas, Carstairs 杜嘉德 (1873,1899). Chinese-English Dictionary of the Vernacular or Spoken Language of Amoy
3. Macgowan, J. (1883). English and Chinese Dictionary of the Amoy Dialect
4. Campbell, William 甘為霖 (1913). 廈門音新字典
5. Barclay, Thomas 巴克禮 (1923). 廈英大辭典補編
6. 中山久四郎 編 (1929). 和英併用新式辭典
7. 小川尚義主編 (1932). 台日大辭典
8. 許嘉樂發行 (1935). 嘉義版彙集雅俗通十五音
9. 閩南基督教1934年大會詩歌委辦編修,閩南聖教書局發行 (1935初版). 閩南基督教聖詩
10. 上田萬年‧保科孝一‧垣內松三‧新井無二郎 (1944). 完成漢和大辭典
11. 沈富進 (1954). 增補彙音寶鑑
12. 王育德 (1957). 台灣語常用語彙
13. 黃士洋 (1973). 士洋國台語字典
14. Bernard L.M. Embree 主編 (1984). A Dictionary of Southern Min
15. 林繼雄 (1988). 台灣現代語音辭典
16. 王康旼 (2003). 台音正字彙編
17. Maryknoll Taiwan (2010). The Maryknoll Taiwanese-English Dictionary

作者承蒙林路尾先生提供嘉義版「彙集雅俗通十五音」並錄製呼音法,林繼雄教授惠贈台語現代文書籍,台語學者王康旼先生指導台音正字並惠贈台音正字彙編書籍 (通用一版、二版、教會羅馬字版、台灣羅馬字版) 及各版電腦檔案,在此併致謝忱。


[備註]

1
台語漢字音,是不同高低、強弱、長短的聲調。八個主要聲調的基準音是第七聲 (陽去),是中間高度的長音。以第七聲為中心,有四個類似北京話的四聲,稱為「副四聲」。即提高聲調的第一聲 (陰平),中高音調的第五聲 (陽平),壓低聲調的第三聲 (陰去) 及用力噴出的第二聲 (陰上)。另外兩個短聲調是「促音」,比第七聲低的是第四聲,比第七聲高的是 (第八聲)。至於第六聲,只有少數方音仍然保留。在台語的三重詞中還有一種特別的音調類似第五聲的滑音。例如「靜靜靜」,「光光光」,「紅紅紅」的頭一個音。

 2
取樣值為13819個台語常用語詞,誤差估計值2.5%。分別就
     1. 與中文間音義相同可用漢字書寫之台語語詞
     2. 中文無此用法,但可用漢字書寫之台語語詞
     3. 僅有中文同義字之台語語詞
     4. 無中文同義字之台語語詞
等四項進行分類,同音異義詞及多義詞併入與第三類互斥計算。

3
依據周辨明、王育德的研究 (參見 Chiu Bien-Ming, The phonetic structure and tone behavior in Hagu and their relation to certain questions in Chinese, T'oung Pao 28, 245-342, Leidenu, 1931. 王育德, 臺灣語の聲調, 中國語學 41, 3-11, 1955),台語第四聲與第八聲互轉,僅用於以 p、t、k結束的入聲韻。以 h 結束的入聲韻,要用第四聲轉第二聲,第八聲轉第三聲的規則,獨自變調。台語除八聲外,還有一個介於三聲和四聲間的弱音 0 (輕) 聲。 雙音節語詞為了表示本身是一個完整單位,具有重音核心。原則上重音核心位於第二音節,換句話說,重音所在的音節保有原來的聲調,而在前面的音節發生變調的現象。但是輕聲則在最後音節,而把重音核心移至前一音節,此為例外。

4
由於台語構詞法和語詞標準化尚未定案,本系統第二版媒介語言將以 h 結束的入聲韻實詞改用第四聲轉第二聲,第八聲轉第三聲的規則變調。以 h 結束的入聲韻虛詞仍沿用第四聲與第八聲互轉的方式變調。輕聲暫以第三聲標示。強辭記號則用 「`」,記號前後都標實調。

5
「彙集雅俗通十五音」 韻書內文言音印紅字,白話音及訓讀都印黑字。閩南基督教聖詩則以小圓圈符號標記文音。台語中何者為白話音,何者為訓讀,實務上頗難區別。在台語語詞尚未標準化前,語詞標調及錄音原則上以作者習用的台南腔為主,疏誤之處,將於改版時訂正。相對漢語語詞,僅供參考,待部頒語詞定案後一併修正。 6

「台語語音筆記本」和「中文漢語拼音讀寫系統」都是採用 Vikon Multilingual Text to Speech System (MLTTS) Compiler 進行編譯之語音輸出應用軟體。MLTTS 除了配備語音引擎以外,還能整合及編譯各種類型的語料和工具程式,並進行語詞檢索 (Word retrieval)、文句剖析 (Sentence parsing)、機器學習 (Machine learning) 與自動回饋 (Auto-feedback) 等功能測試。其組織架構適用於以大詞庫 (Corpus) 及語意單位 (Semantic unit) 為基礎的語料處理,也是框架理論和語意網路的延伸應用。
7

現存的文字語言或因通行已久,或因約定成俗,無法以電腦做邏輯規則處理,必須建立電腦化的人工語言做為媒介。媒介語言的符號和構詞法不受自然語言約束,語法簡單,語意明確,因此適合常規處理,也能建立與自然語言映射的機制。
8

台語語音筆記本及MLTTS 語音輸出編譯器,包含軟體規畫、程式設計、測試、除錯、技術文件編撰、語料庫、知識庫建置, 自1998年迄今,累計逾30000個開發工時。

2017年6月8日 星期四

Tân-phok-sū ê Guān-Bōng (陳博士的願望)

Tân-phok-sū ê Guān-Bōng (教育部台羅版)
Tân-phok-sū ê Goān-Bōng (傳統白話字版)
陳博士的願望

張東瀛 

2008-09-05





Tân-phok-sū ê Guān-Bōng

Tân-phok-sū sī Guá ê hó-pîng-iú. Tâi-Uân-Tāi-Ha̍k i-ha̍k-īⁿ tshut-gia̍p liáu-āu, sing tī Ko-Hiông ê Pēⁿ-īⁿ tsò i-sing. I saⁿ-tsa̍p huè lâi Tâi-Lâm-Pēⁿ-Īⁿ ho̍k-bū saⁿ-tsa̍p tang, tsò hù-īⁿ-tiúⁿ ê sî-tsūn thè-hiu. Aū-lâi tsiah tī Tâi-Lâm-tshī khui i-sing-kuán. I hâm Guá ê ma-ma lóng sī Ji̍t-Pún-sî-tāi Tsiau-Hô jī-nî tshut-sì ê Tâi-uân-lâng. Sóo-í I sī guá ê tióng-puè. M̄-kú I tsò-lâng tsin khiam-pi, tī kàu-huē tiúⁿ-ló kap bo̍k-su ê bīn-thâu-tsîng, lóng kā in kóng guá sī I ê tiān-náu lāu-su, hāi guá kám-kak tsin-pháiⁿ-sè. Kî-si̍t I tī tsin-tsē sóo-tsāi lóng sī guá ê tsí-tō-tsiá. Iû-kī sī I tuì-thāi-lâng kap tsò-tāi-tsì ê sîng-khún thāi-tōo, hōo Guá tit tio̍h tsin-tsē ê khé-sī, iā hōo Guá tshim-tshim liáu-kái tíng-tsi̍t-puè Tâi-Uân tì-sik-hūn-tsú ê tsâi-tsîng kap pak-tn̂g.

I-sing-kuán ê tsín-sóo ū tsi̍t-tè Tōo-tshong-bîng phok-sū iōng môo-pit siá ê pián-á. Tsé-sī Tân-phok-sū ê lāu-su tī I liû-ha̍k Ji̍t-Pún, tit tio̍h i-ha̍k-phok-sū hit-tang sàng--I ê kì-liām-bu̍t. I tī Ji̍t-Pún gián-kiù tong-sî siōng sian-tsìn ê lāi-sī-kiàⁿ i-ha̍k. Tńg--lâi liáu-āu tī Tâi-Uân tsò kuè tsi̍t-bān guā ê uī-kiàⁿ ê lîm-tshn̂g pēⁿ-lē. Tsit-tè pián-á tī tsín-sóo kuà sì-tsa̍p-tang.

Tân-phok-sū ē-hiáu Ing-bûn, Ji̍t-bûn kap Tik-bûn tsit saⁿ-tsióng gú-giân. I tsin-tsá tō tsai-iáⁿ Guá teh siá Tâi-Gú gú-im su-tshut nńg-thé. Sui-jiân I jīn-uī tse ing-kai sī tsìng-hú ê gián-kiù-tan-uī tsiah ū huat-tōo tsò ê khang-khuè, m̄-kú I mā tuì Guá án-tsuáⁿ kà tiān-náu kóng Tâi-uân-uē kám-kak tsin tshù-bī. I tiāⁿ-tiāⁿ kóo-lē--Guá, hâm Guá thó-lūn Tâi-gú su-siá huat ê būn-tê. Í-tsá àm-sî káu-tiám nā kuè, Guán tō tiàm I ê tsín-sóo iōng tiān-náu tshâ-tshuē i-ha̍k bûn-hiàn, tsò-hué khai-káng, sūn-suà thiaⁿ I kóng tsi̍t-kuá ha̍k-sing-sî-tāi khuàⁿ--tio̍h ê tāi-tsì. I kóng I ê ma-ma tsū sè-hàn tō o̍h Pe̍h-Uē-Jī. In tshù-lāi mā-ū tsi̍t-pún kóo-tsá ê Ē-Mn̂g-Im Sin-Jī-tián. Hit-pún jī-tián khuàⁿ--khí-lâi tsin kū, tān-sī pó-tsûn kah tsin-hó-sè.

Kong-guân 2001-nî, Guá tsiong thâu-tsi̍t-tiuⁿ Tâi-Gú nńg-thé sàng-khí Bí-kok sin-tshíng tù-tsok-kuân. Tē-jī-tiuⁿ tō sàng hōo Tân-phok-sū. Guá hit-tsām tsò ê Pe̍h-uē-Jī pán-pún in-uì iáu-buē ū Iú-ní-khóo ê hû-hō, sóo-í kan-nā iōng sòo-jī lâi piáu-sī siaⁿ-tiāu. Tân-phok-sū kóng án-ne khuàⁿ-tio̍h khah buē-kuàn-sì, it-tīng ài siūⁿ-pān-huat lâi kái-liông. Kong-guân 2008-nî, Guá iōng Iú-ní-khóo tsò thuân-thóng Pe̍h-uē-Jī ê pán-pún, sòo-jī siaⁿ-tiāu hâm hû-hō siaⁿ-tiāu lóng ē-tàng Uāⁿ-lâi-Uāⁿ-khì, tsóng-sǹg uân-sîng Tân-phok-sū ê sim-guān. Khó-sioh, sin-pán Pe̍h-uē-Jī ê gú-im-su-tshut tsò hó-sè, I í-king kuè-sin--ah.

Tân-phok-sū kuè-sin liáu-āu, Sin-seⁿ-niû tō tsiong hit-tè pián-á sàng hōo--Guá. Tōo-īⁿ-tiúⁿ sī Tâi-Uân i-ha̍k-kàu-io̍k ê sian-kak-tsiá, Tân-phok-sū sī uī-tn̂g-kho ê tsuan-ka. Àm-sî-á, Guá ka-kī tsē tī tiān-náu thâu-tsîng leh tsò khang-khuè, tiāⁿ-tiāⁿ lóng ē siūⁿ tio̍h tsit nn̄g-uī Tâi-Uân i-ha̍k-kài ê tsiân-puè. In ê it-sing lóng tsin jīn-tsin, tsin-tsìng-ti̍t, kha ta̍h si̍t-tē teh tsò tāi-tsì, tuì siā-huē ū tsin-tuā ê kòng-hiàn, In sī tsin-tsiàⁿ ài Tâi-Uân ê lâng.




Tân-phok-sū ê Goān-Bōng

Tân-phok-sū sī Góa ê hó-pêng-iú. Tâi-Oân-Tāi-Ha̍k i-ha̍k-īⁿ chhut-gia̍p liáu-āu, seng tī Ko-Hiông ê Pēⁿ-īⁿ chò i-seng. I saⁿ-cha̍p hòe lâi Tâi-Lâm-Pēⁿ-Īⁿ ho̍k-bū saⁿ-cha̍p tang, chò hù-īⁿ-tiúⁿ ê sî-chūn thè-hiu. Aū-lâi chiah tī Tâi-Lâm-chhī khui i-seng-koán. I hâm Góa ê ma-ma lóng sī Ji̍t-Pún-sî-tāi Chiau-Hô jī-nî chhut-sì ê Tâi-oân-lâng. Só͘-í I sī góa ê tióng-pòe. M̄-kú I chò-lâng chin khiam-pi, tī kàu-hōe tiúⁿ-ló kap bo̍k-su ê bīn-thâu-chêng, lóng kā in kóng góa sī I ê tiān-náu lāu-su, hāi góa kám-kak chin-pháiⁿ-sè. Kî-si̍t I tī chin-chē só͘-chāi lóng sī góa ê chí-tō-chiá. Iû-kī sī I tùi-thāi-lâng kap chò-tāi-chì ê sêng-khún thāi-tō͘, hō͘ Góa tit tio̍h chin-chē ê khé-sī, iā hō͘ Góa chhim-chhim liáu-kái téng-chi̍t-pòe Tâi-Oân tì-sek-hūn-chú ê châi-chêng kap pak-tn̂g.

I-seng-koán ê chín-só͘ ū chi̍t-tè Tō͘-chhong-bêng phok-sū iōng mô͘-pit siá ê pián-á. Ché-sī Tân-phok-sū ê lāu-su tī I liû-ha̍k Ji̍t-Pún, tit tio̍h i-ha̍k-phok-sū hit-tang sàng--I ê kì-liām-bu̍t. I tī Ji̍t-Pún gián-kiù tong-sî siōng sian-chìn ê lāi-sī-kiàⁿ i-ha̍k. Tńg--lâi liáu-āu tī Tâi-Oân chò kòe chi̍t-bān gōa ê ūi-kiàⁿ ê lîm-chhn̂g pēⁿ-lē. Chit-tè pián-á tī chín-só͘ kòa sì-cha̍p-tang.

Tân-phok-sū ē-hiáu Eng-bûn, Ji̍t-bûn kap Tek-bûn chit saⁿ-chióng gú-giân. I chin-chá tō chai-iáⁿ Góa teh siá Tâi-Gú gú-im su-chhut nńg-thé. Sui-jiân I jīn-ūi che eng-kai sī chèng-hú ê gián-kiù-tan-ūi chiah ū hoat-tō͘ chò ê khang-khòe, m̄-kú I mā tùi Góa án-choáⁿ kà tiān-náu kóng Tâi-oân-oē kám-kak chin chhù-bī. I tiāⁿ-tiāⁿ kó͘-lē--Góa, hâm Góa thó-lūn Tâi-gú su-siá hoat ê būn-tê. Í-chá àm-sî káu-tiám nā kòe, Goán tō tiàm I ê chín-só͘ iōng tiān-náu chhâ-chhōe i-ha̍k bûn-hiàn, chò-hóe khai-káng, sūn-sòa thiaⁿ I kóng chi̍t-kóa ha̍k-seng-sî-tāi khoàⁿ--tio̍h ê tāi-chì. I kóng I ê ma-ma chū sè-hàn tō o̍h Pe̍h-Oē-Jī. In chhù-lāi mā-ū chi̍t-pún kó͘-chá ê Ē-Mn̂g-Im Sin-Jī-tián. Hit-pún jī-tián khoàⁿ--khí-lâi chin kū, tān-sī pó-chûn kah chin-hó-sè.

Kong-goân 2001-nî, Góa chiong thâu-chi̍t-tiuⁿ Tâi-Gú nńg-thé sàng-khí Bí-kok sin-chhéng tù-chok-koân. Tē-jī-tiuⁿ tō sàng hō͘ Tân-phok-sū. Góa hit-chām chò ê Pe̍h-oē-Jī pán-pún in-ùi iáu-bōe ū Iú-ní-khó͘ ê hû-hō, só͘-í kan-nā iōng sò͘-jī lâi piáu-sī siaⁿ-tiāu. Tân-phok-sū kóng án-ne khoàⁿ-tio̍h khah bōe-koàn-sì, it-tēng ài siūⁿ-pān-hoat lâi kái-liông. Kong-goân 2008-nî, Góa iōng Iú-ní-khó͘ chò thoân-thóng Pe̍h-oē-Jī ê pán-pún, sò͘-jī siaⁿ-tiāu hâm hû-hō siaⁿ-tiāu lóng ē-tàng Oāⁿ-lâi-Oāⁿ-khì, chóng-sǹg oân-sêng Tân-phok-sū ê sim-goān. Khó-sioh, sin-pán Pe̍h-oē-Jī ê gú-im-su-chhut chò hó-sè, I í-keng kòe-sin--ah.

Tân-phok-sū kòe-sin liáu-āu, Sin-seⁿ-niû tō chiong hit-tè pián-á sàng hō͘--Góa. Tō͘-īⁿ-tiúⁿ sī Tâi-Oân i-ha̍k-kàu-io̍k ê sian-kak-chiá, Tân-phok-sū sī ūi-tn̂g-kho ê choan-ka. Àm-sî-á, Góa ka-kī chē tī tiān-náu thâu-chêng leh chò khang-khòe, tiāⁿ-tiāⁿ lóng ē siūⁿ tio̍h chit nn̄g-ūi Tâi-Oân i-ha̍k-kài ê chiân-pòe. In ê it-seng lóng chin jīn-chin, chin-chèng-ti̍t, kha ta̍h si̍t-tē teh chò tāi-chì, tùi siā-hōe ū chin-tōa ê kòng-hiàn, In sī chin-chiàⁿ ài Tâi-Oân ê lâng.




陳博士的願望

陳俊雄醫師是我的好朋友。台大醫學院畢業後,先在高雄的醫院當醫師。三十歲來台南醫院服務三十年,當副院長時退休。後來在台南市開醫院。他和我母親都是日政時期昭和二年出生的台灣人,所以是我的長輩。不過他做人很謙虛,在教會的長老和牧師面前,都跟他們說我是他的電腦老師,害我覺得很不好意思。其實他在很多地方都是我的指導者。尤其是他待人處事的誠懇態度給我很多啟示,也讓我深深了解上一輩台灣知識分子的才華和氣度。

醫院的診所有一塊杜聰明博士用毛筆寫的匾額。這是陳醫師的老師在他留學日本,取得醫學博士學位那一年送他的紀念物。陳博士在日本研究當時最先進的內視鏡醫學。在台灣做過一萬多個胃鏡臨床病例。這塊匾額在診所掛了四十年。

陳博士通曉英文、日文和德文三種語言。他很早就知道我在寫台語語音輸出軟體。雖然他認為這應該是政府的研究單位才有辦法完成的工作,不過他對我如何教電腦說台語很感興趣。經常鼓勵我,和我討論台語文書法的問題。有一陣子,晚上九點過後,我們就在診所聊天,用電腦查詢醫學文獻,順便聽他談一些學生時代經歷的事。他說他的母親從小就學白話字,家裡也有一本古老的廈門音新字典。那本字典看起來很舊,但是保存得很完整。

公元2001年我將第一張台語軟體寄到美國申請著作權。第二張就送給陳博士。當時做的白話字版本因為沒有Unicode的台語聲調符號,所以只能用數字標調。陳博士說這樣子看來很不習慣,一定要想辦法改良。公元2008年我用Unicode做傳統白話字的版本,數字聲調和符號聲調可以換來換去,總算達成陳博士的心願。可惜,新版白話字的語音輸出完成時,他已經過世了。

陳博士辭世之後,先生娘將那塊匾額送給我。杜院長是台灣醫學教育的先覺者,陳博士是胃腸科的專家。夜晚我獨自坐在電腦前面工作,經常會想起這兩位台灣醫學界的前輩。他們的一生都很認真,很正直,腳踏實地做事,對社會有很大的貢獻,是真正愛台灣的人。




 
This website is sponsored by VIKON Corp.
Copyright July 1996. All rights reserved.

Last update : 2008-08-20
有什麼建議嗎 ? 來信請寄:

  vikontony@gmail.com

Uán-pì-sù ê kòo-sū (露背裝的故事)

Uán-pì-sù ê kòo-sū * サンドレスの話
露背裝的故事 * The story of a sundress
 
田村志津枝 ‧ 張東瀛 

2008-08-20







Uán-pì-sù ê kòo-sū

Ta̍k-li̍t lóng teh kà tiān-náu kóng Tâi-Uân-Uē. Kin-á-li̍t hut-jiân-kan siūⁿ beh iōng tâi-gú siá tsi̍t-phiⁿ khah ti̍k-pia̍t ê bûn-tsiuⁿ hōo tiān-náu tha̍k khuàⁿ-māi--leh. Tsú-iàu ê guân-in sī in-uī Tíng kuí-ji̍t-á ū siu tio̍h Ji̍t-Pún pîng-iú kià--lâi ê phue. I kā guá kóng tsi̍t-kuá I hâm i ê tsa-bóo-kiáⁿ tsò-hué tsia̍h-pn̄g ê tāi-tsì.

Tsit-phiⁿ tō-sī I siá ê kòo-sū.

**********

Tsit lé-pài-saⁿ, Guá kah guá ê tsa-bóo-kiáⁿ, Iú, iok-hó beh khì bí-su̍t-kuán khuà uē-tián, sūn-suà tsò-hué tsia̍h tiong-tàu-pn̄g.

Hit-ji̍t ji̍t-thâu tsin-iām. Sui-jiân tsē hué-tshia tsiaⁿ hong-piān, Iú iá-sī khiâ kha-ta̍h-tshia lâi. I kóng I khiâ tsha-put-to gōo-tsa̍p hun-tsing khah kàu-uī. I tshīng tsi̍t-niá guá khah-tsá ê uán-pì-sù. Hit-niá saⁿ ê hue-sik tsin-suí, m̄-kú kan-nā nn̄g-tiâu sè-tiâu tuà-á khàm tī king-thâu. I ê king-kah í-king hōo ji̍t-thâu pha̍k-ka̍h âng-kòng-kòng.

Hâm tsi̍t-ê tshīng Guá ê saⁿ ê lâng tsò-hué la-thian, tsia̍h-pn̄g, si̍t-tsāi tsin hó-sńg. Khuàⁿ--khí-lâi tō káⁿ-ná teh hâm guá ka-kī kóng-uē kāng-khuán.

**********

Tsit-ê kòo-sū tsin-té, m̄-kú bué-á tsit-kù-uē hōo guá kám-kak tsin ū ì-sù. Ma-ma tuì tsa-bóo-kiáⁿ ê m̄-kam kah tuì kuè-khì ê huâi-liām kau-tsit, ka-kī iā hóng-hut koh tńg-khì tshing-tshun ê sî-tāi.

Tsit-tsióng ho̍k-tsa̍p ê tsîng-sū, ē-tàng iōng tsi̍t-kù-uē siá--tshu̍t-lâi, si̍t-tsāi bô-kán-tan. Tshin-tshiūⁿ óo-hián-luì ê siáu-suat án-ne, Tsit-ê kòo-sū mā-ū tsi̍t-ê tsing-tshái ê kiat-bué.

Sui-jiân Guá m̄-bat ū hâm ka-kī bīn tuì-bīn teh kóng-uē tsit-khuán ê king-iām, tsóng-sī Guá i-guân ē-tàng liáu-kái tsok-tsiá hit-tsūn ê sim-tsîng.




サンドレスの話

 来る日も来る日も、ぼくはコンピューターに台湾語の話し方を教えている。だが先頃ぼくは、何かをテーマにして台湾語で文章を書いてみようと思い立った。そうすれば、ぼくのテキスト・トゥ・スピーチのプログラムのさまざまな機能を試してみることができるはずだ。そんなことを思いついたのは、数日前に日本に住む友人からメールを受け取ったのがきっかけだった。彼女は娘と会い昼食をともにして、とても楽しかったと書いていた。

 その話は次のようなものだ。

*********

 水曜日に私は美術館で娘の悠に会い、色彩が奔放に舞い踊る絵を見てから、昼食を食べました。

 暑い日だったけれど、娘は自転車でやって来ました。彼女のところからだと、電車がとても便利なのですが。自転車だと50分もかかった、と彼女は言いました。

 しかも彼女は、私の昔のワンピースを着ていました。とてもきれいな色合いですが、肩には細いストラップがついているだけ。彼女の肩は赤く日焼けしていました。

 それにしても、私の洋服を着ている人とお喋りしながら食事をするというのは、妙な気分でした。なんだか私自身と話をしているような。

*********

 ささやかな話に過ぎない。けれど最後の文章がいい。若いころの思い出と、母親が娘を思いやる気持ちが、彼女の心を魔法のタイムマシーンで溌剌たる青春時代へと運んだ。冴えた一文だ。書き手はたった一行の文章で、複雑な心の綾を鮮やかに描き出している。ぼくはO.ヘンリーの短篇を思い出した。彼の作品にはどれも忘れがたい結末が埋め込まれている。

 ぼくには彼女のような経験はない。けれどそのときの彼女の気持ちがよく分かる。




The story of a sundress

I have been teaching my computer how to speak Taiwanese language day after day. Recently I decided to write an article on some special topic in Taiwanese, so that my Taiwanese text-to-speech program could be tested for more functions. The main reason why I got the idea was that a friend of mine living in Japan gave me a mail a couple days ago. She told me that she had a pleasant time with her daughter when they met and had lunch together.

The following is her story.

**********

I met my daughter Yu on Wednesday in an art museum and enjoyed beautiful paintings together with lunch.

It was a hot day. But she came by bicycle, although taking a train was more convenient for her. It took about 50 minutes by bicycle, she said.

Besides she was wearing an one-piece which used to be mine. It had beautiful colors but it had only thin straps to cover her shoulders. Her shoulders were suntanned already.

It's a funny feeling chatting and eating lunch with a person who was wearing MY clothes. It was like chatting with ME.

**********

It was a short story. However, the last sentence was quite marvelous. A memory of good old days and mother's affection seemed to bring her back to her brilliant youth by a magic time machine. What a talent. The author used only one sentence to interpret such a complicated feeling. It reminded me the short stories of O. Henry. Each one of them had an unforgettable ending of the story.

Although I didn’t have the same experience, I could understand what she thought at that moment.




露背裝的故事

每天都在教電腦說台灣話。今天忽然想到要用台語寫一篇比較特別的文章,讓電腦讀讀看。主要是因為幾天前收到一位日本朋友寄來的信。她提到一些和她女兒一塊吃午飯時發生的趣事。

這篇文章就是她寫的故事。

**********

這個星期三,我和我女兒-悠,相約在美術館看畫展,順便一道吃午餐。

那天太陽很大。雖然坐火車很方便,悠卻騎著腳踏車來。她說她花了大約五十分鐘才到達。她穿著一件我曾經穿過的露背裝。那件洋裝的花色很漂亮,不過肩帶很細。她的肩膀已經被陽光曬紅了。

跟一個穿著我的衣服的人一起聊天、吃飯,實在很好玩。感覺就像和自己在說話一般。

**********

這個故事很短,不過最後一句話讓我覺得很有意思。媽媽疼惜女兒的心情和對往事的懷念交織,彷彿自己也重回當年的青春的歲月。 這種複雜的心境,能用寥寥數語表達,實在不容易。也讓我想起 O. Henry 的短篇小說,這個故事也有精彩的結尾。

雖然無法體驗自己對自己說話的感覺,卻可以理解作者當時的心情。






 
This website is sponsored by VIKON Corp.
Copyright July 1996. All rights reserved.

Last update : 2008-08-20
有什麼建議嗎 ? 來信請寄:
 vikontony@gmail.com

南竿,一九七三

南竿,一九七三

張東瀛 

2009-07-16 完稿, 2010-06-23上網




啟航

無灞橋煙水,也無十里長亭。夜晚的基隆港,星空映照船影,冷豔中帶著淒涼。悄悄地,登陸艇開始移動,越過東方皇后號,就要離開碼頭。不久,岸上的燈光終於消逝。雖說男兒志在四方,冒著九級風浪出海,心境卻瀟灑不起來。忽然間,一個巨浪打來,船身晃了兩下,坦克艙中的人和背包,如同煎鍋裡的香腸,不停地翻滾著。不知過了多久,終於聽見有人大喊「看到陸地了」。從搖擺的甲板遠望,馬祖列嶼像在潮中下碇的風帆,不停地起伏上昇。下午一時三十分搶灘。我要報到的地點在鐵板,還有一段路要走。車子在山道上拐來拐去,遠方傳來砲聲隆隆。到達連部,天色已暗。吃過飯,在燭光下才發現,餐廳原來是蘆葦搭蓋的草寮。


港口素描

儲水澳西南方有一座廢碉堡,看來是五零機槍陣地。三向開窗,從射口可以遠眺海面。太陽偶爾露個臉,一下子又躲起來。若是春雨綿綿,羊腸小徑準是泥濘滿佈。從露儲場可以俯視港口和西尾,放眼北望,第三根通訊桿盡頭,就是北竿和高登。三、四月間,春霧正濃,馬祖港宛如罩上白紗,只聽到氣笛聲嗚嗚乍響,霧薄時候,諸島就在虛無縹緲間了。

媽祖廟前,有幾個人在編竹筏。粗大的麻竹先用草繩捆綁,再塞上木楔,便緊靠一起。有一次我從小徑下山,看到一艘漁船正在海裡衝浪。金黃色陽光,從灰黯的雲隙灑落,風很急,浪很高,雷電交加,小舟卻不屈不撓。年青力壯的負責打漁,老人和婦女忙著煮魚、曬魚。丁香魚在陽光下閃閃發亮,孩子們聚精會神把玩彈珠。像他們那樣的年紀,我也常在地上流連,曾幾何時,看到玻璃珠子,卻有陌生的感覺。


戰備演習

潮水沖擊岩石,浪花飛濺。梅石澳口,不時傳來稀稀落落的槍聲。還在睡夢中的鳥雀,突然從樹叢飛出。一九七三年九月二十七日凌晨五時三十一分,金池二號演習的第二天,我們已經在壕溝裡蹲了一夜。天氣有點涼,太陽仍在地平線下,只有幾道紅霞,偶爾從濃密的雲層穿出。

排陣地在六八高地前緣,左方是第一班,右方是第二班,兩挺機槍火網交叉,剛好封鎖澳口。第三班在高地背面,傳令不時跑上跑下,一下子毒氣來了,一下子心戰喊話。幾度喧嘩過後,周遭又恢復靜寂。秋桂山一帶,看來十分安祥。天主堂旁邊有幾頭乳牛,悠閒地吃草,我卻擔心,那兩箱手榴彈全是真的,不曉得會不會有人好奇打開。驀地,一片血紅映入眼簾;石蒜花正盛開,讓人怵目驚心。從望遠鏡裡,隱約還可見到蘆花在微風中輕搖,朝露點點滴滴。

幸運草原本下垂的葉子,不知何時展開了。海風陣陣吹來,天空沒有一絲雲彩。好不容易捱到傍晚,一眉新月在落日餘暉中閃爍著。敵軍已經奉命休息,弟兄們也取出便當大口吃著。傳令兵把一張「請把飯多裝一點」的字條放進空飯盒。他不知道,過了今晚,演習就要結束了。


戰術行軍

午夜時分,沒有月亮。全副武裝的戰士,由儲水澳魚貫而出。途經秋桂山,風不太大,只是有點刺骨。部隊過了珠螺,霧氣從海面掩至,星光逐漸消失。戰備道微微可循,小徑已被暗夜吞沒,兩公尺外一片漆黑。走過一段下坡碎石山路,幾個弟兄東倒西歪,所幸只是有驚無險。

步兵碉堡幾乎全在海邊。耳際傳來怒濤拍岸,猶勝萬馬奔騰。值班的哨兵,在寒風中經常凍得發抖。這些充員戰士,眼看著牆上蠟炬,不知何時返台,難免跟著淚痕斑斑。沿著海岸繞上一圈,最快也要四個小時。回到駐地,濃霧瀰漫山谷,兩碗熱粥下肚,寒意盡除。不久,遠處傳來幾聲雞啼,天尚未破曉,井邊的轆轤已經轉個不停。


浮生半日

天氣相當晴朗,坐在碉堡裡,不時聽到鳥鳴。桃花初綻,春日已近。樹林裡的斑鳩突然展翅,似乎發現有人偷窺。隔壁步兵的公雞,喔喔叫了幾聲。通往海灘的小路,被無情的雷區阻隔,不知危險的牽牛花,卻放肆地爬滿四周。

池邊的芒草,長得約有一人高。從壩頂流下的山泉,經過層層土石,到達下游彎曲處,已經變得清澈透明。山谷背風面,林木相當茂盛。松果早已掉光,殘存的楓葉與藍天白雲相映,分外悅目。澳口的海水,平靜無波。桃花正在吐蕊,迎風漫步,有一種酸酸麻麻的感覺。陽光照在臉上,很溫暖,原來是三春暉。老枝奮力抽出嫩葉,小蟲忙著翻開新土,當相思樹綴滿黃花,蟬聲響起,我也要買棹歸航。


長亭更短亭

細雨打在玻璃板上,冷風夾著水氣吹入車窗。我拉高衣領,突然發現山隴和清水在雨霧裡顯得格外青翠。遠處漁帆片片,山路蜿蜒曲折。峰巒路樹、滿佈偽裝的碉堡和石砌小樓構成一幅美麗的圖畫。車過八角亭,微雨初霽,不覺想起李白的「菩薩蠻」。兩年的軍旅生活,即將在南竿的碧空下結束。這裡,無曉角悲鳴,無薤露垂淚,卻有戎馬的倥傯,和喚不回的青春歲月。遠離市囂,面對千山萬水,一朝回首,方知所見,仍是十里紅塵。

又是五月黃梅天。聽!碉堡外狂濤怒吼,風過蘆葦,絲絲作響。歸期已屆,再會吧!南竿。


後記

「南竿,一九七三」,是我的服役側寫。歷經多年,走馬燈般的回憶,沉澱出這篇短文。彼岸花正紅,腦海中一再浮沉的影像卻是暮春時節,儲水澳的野百合與鐵板的轆轤。當年因緣際會,如今物換星移。謹以此文紀念1973-1974戍守戰地的馬祖同胞和弟兄們。




 
This website is sponsored by VIKON Corp.
Copyright July 1996. All rights reserved.

Last update : 2010-06-23
有什麼建議嗎 ? 來信請寄:

  vikontony@gmail.com

2015年6月12日 星期五

Guán-tau ê Lāu-ke-bó (我家的老母雞)


Guán-tau ê Lāu-ke-bó *
我家的老母雞 * Our Old Hens
 
張佑竹 

2015-06-12





Guán-tau ê Lāu-ke-bó

Guán-tau ū nn̄g-tsiah lāu-ke-bó. Tsit-nn̄g-tsiah lāu-ke-bó í-king tshī gōo-la̍k tang. Pún-lâi, guán-tau ū tsin-tsē ke, tān-sī tāi-pōo-hūn ê ke lóng hōo lâng thâi--khì-ah, sóo-í tsí tshun nn̄g-tsiah.

Tsit-nn̄g-tsiah lāu-ke-bó seⁿ-tsò puî-nńg-á puî-nńg, jî-tshiáⁿ koh ē seⁿ-nn̄g. M̄-koh pa-pa kóng ke-sái ē tsè-tsō lah-sap, tsin-gâu seⁿ báng-á, guán ē hōo báng-á kā, iá-sī kā ke-á thâi-thâi--è. Guá hâm ma-ma kín-tiuⁿ gah beh-sí, tsí-hó kóng tsi̍t-kuá hū tsik-jīm ê uē, Khún-kiû pa-pa, tsiah-bō kā ke-á thâi--khì.

Guán-tau ê ke-bó, khah-tsá tsia̍h tshī-liāu, tsit-má kái-tsia̍h phun khah-tsē. Guá bat kiàn-gī kóng kái-tsia̍h í-tsîng ê tshī-liāu, in-uī phun tsiok-tshàu, koh ē seⁿ káu-hiā. Jî-tshiáⁿ tsiok lah-sap, sóo-í kái tsia̍h tshī-liāu. Tsiah-ê kiàn-gī tong-jiân hōo-lâng kū-tsua̍t--à.

Ke-á beh tsia̍h phun ê sî-tsūn, tiāⁿ-tiāⁿ hōo sì-gōo-tsiah iau-kuí-niau-á tshiúⁿ-khì-tsia̍h. Tsū-án-ne guá tō ài khì kuáⁿ-niau. Guá nā kuáⁿ-niau, ke-á tō tsia̍h-tio̍h khah an-sim. Niau uī tio̍h sio-tsiⁿ mi̍h-kiāⁿ tsiah lâi sio-phah, sīm-tsí sī ka-kī ê niau-á-kiáⁿ lóng beń put-liáu.

Ū-tsi̍t-páiⁿ guá beh tò bah-iû-phoh hōo ke-á tsia̍h ê sî, ke-á iū-koh kap niau phah--khí-lâi. Ke-á tsit-pái tō bô-kheh-khì, I iōng tsiam-tshuì tok niau ê thâu. Niau iā bē hōo ke-á hó-tsia̍h-khùn, kiat-kó tong-jiân sī ke-á iâⁿ.

Tsâ-hng, guá tng-teh tsia̍h-pn̄g ē sî-tsūn, hut-jiân thiaⁿ tio̍h ke-á tī teh thî. Guá má-siōng tshiong--tshut-khì, huat-hiān tsi̍t-tsiah n̂g-sik ê tuā-tsiah káu-á. Guá tō kā káu-á kuáⁿ-tsáu, liáu-āu the̍h tsi̍t-tè tsio̍h-thâu khian káu-á, ka-tsài bô kā tio̍h ke. Tsin-tsiàⁿ sī thiⁿ-kong ū pó-pì.




Our Old Hens


















我家的老母雞 (1990)

我家有兩隻老母雞,這兩隻老母雞已經養了大約五、六年了。 本來,我家有很多雞,但是大部分的雞被殺了,所以只剩兩隻。

這兩隻老母雞長得肥肥的,而且還會生蛋。可是,爸爸說雞糞會製造垃圾,容易滋生蚊子,我們會被咬子咬,還是把雞殺了吧! 我和媽媽緊張的要命,只好說一些負責任,懇求爸爸,才沒把雞殺掉。

我家的母雞,以前吃飼料,現在大多吃餿,我曾經提議說,改吃以前的飼料,因為餿很臭,又生螞蟻,而且很髒,所以改吃飼料,這些話當然被拒絕了。

雞吃餿時,常常被四、五隻貪吃貓吃掉,於是我就去趕貓。一趕貓,雞吃得安心,但是貓就為了爭食物而打架,連自己的小貓都不能倖免。

有一次我要倒油肉渣給雞吃時,雞又跟貓打起架來了,雞這次可發威了,牠用尖嘴啄貓的頭,貓也不甘示弱,結果當然是雞贏了。

昨天,我正在吃飯時,忽然聽到雞在叫,我立刻衝出去,發現一隻大黃狗,我就把牠趕走,然後丟一塊石頭。幸好老天保佑,沒讓狗咬到雞。




 
This website is sponsored by VIKON Corp.
Copyright July 1996. All rights reserved.

Last update : 2018-06-12
有什麼建議嗎 ? 來信請寄:
vikontony@gmail.com

2014年10月4日 星期六

中文作品目錄

中文作品 (Works in Chinese)



  

蓬萊札記(Multimedia)


一部縱橫台灣四百年,整合文字,聲音,圖像,動態影像的多媒体記錄 
 


 
林鳥是關不住的,因為它的羽翼光鮮有勁

 


 秋鸞 


一部多媒体浪漫文學史詩,改編自 D.H. Lawrence 於一九二八年完成的長篇小說 - Lady Chatterley's Lover











我驀然驚覺,母親許久不再唱歌,不禁自問
「難道她們的歡笑僅止於無憂的童年? 或是不公不義的世界,迫令她們謹言慎行?」



落葉(Multimedia)


改編自「被遺忘的年代」, 謹以此文紀念為這塊土地犧牲奉獻的台灣人




 運轉中的反應器一旦爐內失水,或爐心冷卻功能失效 放射性分裂物所產生的大量衰變熱無法移除,爐心熔解,這時一場核子災變便無可避免。

普羅米修斯與潘朵拉-核能科技的沉思


當我們開發新的科技,不應把它視為征服自然或宇宙的武器而急著去應用。 即使知道某些東西的製造方法,最好還是稍安勿躁,至少應先了解該不該製造,能否收放自如。







少運崎嶇老景宜-我的電腦學習歷程


 突然想起年幼時祖父央人替我排的命書,上頭批有一首七言:
「元神乙木大雪期,幸喜頤氣來相依,傷官逢財衣祿富,少運崎嶇老景宜」
回想我的電腦學習過程,還真是蜿蜒曲折.......


 



 
                                               

  


林榮德音樂藝術專輯(Multimedia)

林榮德
一九三七年四月六日生于台南
他把奧而福音樂教育引進台灣,幫助幼童增長並珍視自己的天賦和人性
希望藉著藝術、音樂與文學,融合精神文明以及內在的智慧,喚起臺灣人的自覺。
身為音樂教師和文化工作的先驅者,他努力將台灣文化凝聚成一個國際景觀。
並奉獻一生向世界宣示台灣人的尊嚴與人權。
業餘他畫油畫,畫中充滿環保意識及鄉土背景的氣氛。




午夜時分,沒有月亮。全副武裝的戰士,由儲水澳魚貫而出。途經秋桂山,風不太大,只是有點刺骨。
部隊過了珠螺,霧氣從海面掩至,星光逐漸消失。戰備道微微可循,小徑已被暗夜吞沒,兩公尺外一片漆黑。


南竿,一九七三


馬祖列嶼原本就是海裡的一串珍珠。即使歷經烽煙,風華依舊迷人。




杜博士任職台大醫學院首任院長時,篳路藍縷,開創格局,有守有為,不忮不求。
他的智慧與風骨,在亂世成為台灣醫界的中流砥柱。



歷史的責任 - 緬懷杜聰明博士


為甚麼數十年來在台灣的歷史、教育體系和教科書裡讀不到杜聰明與林茂生的事蹟? 是國民黨的高壓統治讓台灣人畏首畏尾? 還是台灣人愚痴魯鈍,忍令青史成灰?

2013年8月20日 星期二

歷史的責任 - 緬懷杜聰明博士

歷史的責任 - 緬懷杜聰明博士

張東瀛 

杜聰明醫學博士120歲冥誕紀念專刊 2013 年 8 月 p.106-108



第一次聽到杜聰明博士的事蹟是1962年,當時我正在台南市中讀書。有一位就讀台南一中的鄰居考上高雄醫學院藥學系;他興高采烈地告訴我,說他也是杜聰明博士的學生了。當時我不明白這句話的含義,也不知道杜聰明是誰。高中畢業後我考取台北工專,和醫界無緣。當時杜博士已經退休,離開高醫。我雖有就讀醫學院的同學,卻很少聽到他們提及杜博士的大名。後來讀到杜博士的著作已是數十年後的事。

一九九五年我開始做電腦多媒体,想要把 1895-1995 這一百年間,台灣的人事地物記錄下來,為歷史做個見證。從資料蒐集、考證、文字編輯、圖像輸入、音效製作和影音攝錄等工作,逐步進行。那時候網路不如現在普及,能夠獲得的資料相當有限。台灣經過長期戒嚴,很多人物和事件都被扭曲。例如我的名字「東瀛」就經常被用來指涉「日本」。其實「東瀛」本是台灣的別名。我查證過不少古籍,也發現台灣的廟宇,從北到南,不論樑柱題字或古匾都有不少的「東瀛」。在杜博士的漢詩裡看到他用「東瀛」代稱台灣,便推定這個被誤植的名詞和「閩南語」一樣,應該是國府遷台以後才在台灣流行的用語。

我的長輩朋友當中,有兩位和杜博士相熟。一位是杜博士的長女-淑純女士,另一位是杜博士在台北帝大及台大醫學院的高足-陳俊雄醫師。和淑純女士談話時,每能感受杜博士對女兒的期許,他的開明以及對台灣醫學教育、藥理和蛇毒研究的貢獻。杜女士不僅是杜博士的女兒,祕書,也是他最談得來,能信任的知己。近年來她致力於杜聰明博士相關文獻的整理與出版,一方面是基於對父親的懷念,另一方面也希望經由杜博士的著作,論述,旅遊札記和日誌,讓年輕一輩對台灣的歷史有更深層的認識。

陳俊雄醫師是我的好朋友。台大醫學院畢業後,先在高雄的醫院當醫師。三十歲到台南醫院服務三十年,當副院長時退休。後來在台南市開醫院。醫院的診間有一塊杜聰明博士用毛筆寫的匾額。這是杜博士在陳醫師留學日本,取得醫學博士學位那一年送他的紀念物。陳醫師在日本研究當時最先進的內視鏡醫學。在台灣做過一萬多個胃鏡臨床病例。這塊匾額在他的書桌右上方掛了四十年。陳醫師說杜博士是一個「人格者」,是不畏權勢,不卑不亢,卻能堅守正義的人物。他指的就是杜博士曾經堅決反對台大醫學院與國防醫學院合併,因而得罪當道,1954年離開醫學院,終身不再就任公職。

關於杜博士的生平,坊間已有多本著述; 從天下雜誌的「一代醫人杜聰明」,黃元興的「臺北杜聰明」到國史館的「杜聰明與我-杜淑純女士訪談錄」以及近年來杜聰明基金會陸續出版的書籍,讓我對這位醫學界的前輩,除了尊敬與感念之外,更多了一分反省與自勵。我常想,像杜聰明博士這樣有學識、有擔當的學者為何不能見容於國府? 杜博士在1937年出任台北帝國大學醫學部教授職,是台北帝大僅有的一位台灣人教授。與杜聰明 (1893-1986,日本京都帝大醫學博士) 大約同一時代的知識菁英,如林茂生 (1887-1947,美國哥倫比亞大學哲學博士)、胡適 (1891-1962,美國哥倫比亞大學哲學博士)、林語堂 (1895-1976,德國萊比錫大學語言學博士)、吳國禎 (1903-1984,美國普林斯頓大學政治學博士) 應該都是台灣現代史上最具影響力的人物。對於人物的臧否,歷史學者和專家自有定見,在此無意置喙。我所不解的是為甚麼數十年來在台灣的歷史、教育體系和教科書裡讀不到杜聰明與林茂生的事蹟? 為甚麼在號稱民主自由的台灣,自治史上獨缺「吳國禎事件」? 是國民黨的高壓統治讓台灣人畏首畏尾? 還是台灣人愚痴魯鈍,忍令青史成灰?

解嚴後言論尺度寬放,不僅未能擦亮史實,反而更因意識形態的激烈衝突和政經形勢日趨複雜,迫使「糊化」過程加速,而「包裝歷史」的風潮,也從幕後走向台前。在蒐集資料的過程中我看得出這種趨勢和相關事件的因果關係,而杜博士的歷史定位,也讓我對台灣現代史有更深的期待。

生於日政時期的杜聰明,做為第一位獲得日本帝國大學醫學博士的台灣人,與在國民政府接收台灣後,歷經二二八屠殺事件及白色恐怖時期,倖存的知識分子,如何看待當時的政權與社會? 他們在戰後對台灣的前途有何見解? 這些都是我比較關心而想瞭解的問題。杜淑純女士望九高齡,猶孜孜矻矻,不倦於斯,她的用心,實在令人感佩。杜博士任職台大醫學院首任院長時,篳路藍縷,開創格局,有守有為,不忮不求。他的智慧與風骨,在亂世成為台灣醫界的中流砥柱。哲人日已遠,典型在夙昔。祈望杜博士的日誌和諸多作品早日復刻出版,讓我們得以效法這位受人景仰的前輩,也讓新世代台灣人瞭解在這個歷史的關鍵時刻,應該何去何從。





This website is sponsored by VIKON Corp.
Copyright July 1996. All rights reserved.
Last update : 2013-08-20
有什麼建議嗎 ? 來信請寄:   vikontony@gmail.com

2011年10月20日 星期四

使用者圖形介面程式之設計

使用者圖形介面程式之設計
張東瀛 
 
原載 自動化科技 1996 年 3 月 p.13-17


壹﹑前言

二十世紀九十年代是一個令人振奮的時代. 因為個人電腦已經深入工業社會, 學校和一般家庭. 使用電腦的人終於明白,電腦確實可以協助人們把工作做得更 快,更好,更省力氣. 然而回顧三十年來電腦科技的發展過程,不難發現,電腦雖然 普及,使用效率卻不如預期. 軟硬体快速更新,不但縮短設備使用年限,又讓使用 者付出更多學習時間. 即使新一代的電腦功能更強,更具親和力,它畢竟不像電視 機那麼容易操作. 對一般人而言,想讓電腦成為好幫手,仍須經歷一段艱苦的學習 歷程.

七十年代,只有專業人員才懂得使用電腦. 大部分程式都有專屬機器和用途. 軟体幾乎是針對特定程序設計. 因此電腦從業人員必須接受一系列專業訓練;諸如 基本電腦原理,程式語言,演算法或系統分析等. 換句話說,使用電腦的人幾乎都是 程式設計師. 到了八十年代,個人電腦開始流行,一般人可以自行操作電腦. 雖然 機器相當簡陋,軟体也不太多,套裝程式的開發仍在起步階段,投入個人電腦工業 的人力和物力卻相當驚人,因而刺激軟硬体工業的蓬勃發展.

八十年代末期,媒体儲存技術突飛猛進,套裝應用軟体的開發,猶如雨後春筍. 此一現象對傳統的電腦教育和學習方法,當有深遠影響. 學院教育有了顯著改變, 市場導向成為主流,一般使用者也逐漸擺脫「想用電腦,先上基本電腦概論,再學程 式設計」的夢魘. 文書處理,資料庫,電腦網路加上多媒体,只要學會開機,執行程 式,便能自己練習. 一旦熟習各項指令操作,何妨開班授徒,稍有心得,亦可出書上 市. 學習個人電腦,一時蔚為風潮.

九十年代,人機介面成了個人電腦軟体爭霸戰的重頭戲. 不論蘋果或 IBM 相 容 PC 莫不朝著人性化使用者圖形介面的目標邁進. 早先麥金塔的堀起和今日 WINDOWS 風光地分庭抗禮,即是一例. 電腦知識普及,硬体功能增強,軟体親和性高 ,使得電腦不再是少數人專用的工具. 在可以預見的未來,不僅是新新人類,恐怕連 銀髮族都將是電腦族的成員.

貳、DOS 與 WINDOWS

用慣麥金塔的人,冷眼旁觀 WINDOWS 作業環境的發展,難免會有類似「鄰家 小孩學步」的感覺. 平心而論, WINDOWS 和 DOS 的糾葛,雖是微軟試圖開發新一 代作業系統的絆腳石,從另一個角度觀察,十幾年來 DOS 累積的資源卻是 WINDOWS 緩步攻堅的支柱. 從 WINDOWS 95 隱藏 DOS 可知微軟充分了解此一觀點.

WINDOWS 仍有缺失,DOS 卻非一無可取. 撇開已發展的軟体資源不談,DOS 的 批次檔,仍是許多電腦族難以割捨的利器. 就應用程式的管理而言, WINDOWS 比 DOS 容易操作是事實. 即使很多人知道, DOS 的批次檔功能可以設計文字選單來 執行特定程式. 然而文字選單畢竟比較單調,總不若滑鼠點選圖像來得多彩多姿, 更何況應用軟体一多,文字選單便有捉襟見肘之虞. 只是 WINDOWS 內雖有 PIF 檔 可執行 DOS 程式,感覺上卻有點拖泥帶水. 魚與熊掌若要兼得,不知如何是好?

本文將敘述以批次檔,結合圖形介面和音效,並利用滑鼠操控方式設計一個涵 蓋 WINDOWS 和 DOS 應用軟体的使用者圖形介面.

參﹑程式設計之目標,特色,設備需求及工具
    設計目標: 提供一個簡潔明白,易於操作的軟体人機介面

        特色: 整合中英文字,圖形,音效分別管理 WINDOWS 及DOS 應用軟体

    設備需求: 80486 以上,IBM 相容 PC
              4 MB 主記憶体
              SVGA (1 MB 記憶) 圖形界面卡,彩色顯示器
              硬碟,滑鼠

    作業系統: MS-DOS 5.0 以上版本

    選項配備: 聲霸卡 2.0 或 PRO (可加音效)
              倚天中文碟版 V 3.0 或 V 3.5 16x16 字形檔

    軟体工具: BASIC,C,PASCAL 或其他高階語言均可
              Mouse 驅動相關程式庫
              圖形檔解碼器或程式庫
              聲霸卡程式發展工具 SBSIM
              繪圖程式 Dr. Halo IV 或其他類似軟体
              一般文書編輯器




肆﹑程式設計概要

    1. 設定變數及陣列,存放應用程式標題說明文字字串,滑鼠點選範圍座標值,
       WINDOWS 應用程式執行檔或 DOS 應用程式批次檔檔名

    2. 圖形檔解碼及顯示副程式
           由於多數高階語言只提供 640x480 解析度圖形,因此必須藉助
       PCX 或 GIF 圖形解碼程式或程式庫來設計高解析圖形顯示副程式,以
       便執行 1024x768x256 色圖形顯示功能. 此外,若須使用數張圖形介面
       還要加上圖形換頁功能

    3. 滑鼠座標偵測,捕捉及顯示副程示
           當滑鼠移動時必須在螢幕顯示 X,Y 座標值,若滑鼠移至圖像位置或
       驅動指令預設範圍,則偵測是否按鍵點選,以便執行指定的應用程式

    4. 應用程式標題顯示副程式
           每一應用程式除了用圖像代表以外,也可加上中英文說明. 此副程式
       可從 EXPROG?.WIN 檔讀取程式說明,再依照中英文 ASCII 碼轉換成16x16
       字形,當滑鼠移至圖像位置即於螢幕下方顯示相關應用程式標題說明

    5. 應用程式執行副程式
           當滑鼠點選某一圖像時,系統即呼叫此副程式執行相關 WINDOWS 應用
       軟体或執行 DOS 應用程式的批次檔,並將現在的磁碟目錄名稱存入變數,
       等到應用程式執行完畢,再返回原來的目錄. 為了確保應用程式得以順利
       執行,必須將介面程式轉存於延伸記憶体,以便釋放最大傳統記憶供應用程
       式使用. 如果應用程式無法執行,也能返回介面程式.

    6. 音效播放及中斷副程式
           應用聲霸卡程式發展工具 SBSIM (隨卡附贈軟体),提供 CMF,VOC,
       MID 三種音效檔播放及中斷背景音樂的功能. VOC 檔並可選擇從磁碟讀取
       或從延伸記憶体讀取音效資料的方式.


伍﹑圖形介面製作及操作說明

    程式設計好了以後,就可進行圖形介面檔案製作.

    一、介面圖形檔製作

        首先用繪圖軟体製作一張集合常用軟体圖像(icon)的圖片,然後以 PCX
    (或 GIF) 格式存入 EXPROG1.PCX, 並以圖像面積作為滑鼠點選範圍.通常把
    軟体圖像依照 Windows 和 DOS 兩類分別存放,並將各軟体圖像的邊限座標
    記錄備用.

        圖檔大小和樣式可依個人品味自行設計. 建議包含下列元件:
            WINDOWS 方框
            DOS 方框
            上下頁選擇方框
            結束方框

請參考圖(一) EXPROG1.PCX 說明



.



    二、視窗文字檔製作

        視窗文字檔提供程式所需相關變數資料. 建構視窗檔可用一般文書編輯
    器進行編輯,再以 EXPROG1.WIN EXPROG2.WIN .... 命名.
        每列文字包含"程式標題",滑鼠點選範圍(軟体圖像)的邊限座標 X1,Y1,
    X2,Y2 及"程式執行檔" (DOS 應用程式則用BAT檔),標題和程式執行檔必須
    用 " 括起來. 例如

    "Dr. Halo IV 繪圖程式",581,181,608,210,"DH.BAT"
    "PSP 影像處理器",190,266,223,296,"win e:\Psp\psp.exe"
    ....... 可視應用軟体多寡自行添加
 
        標題可設定為 100 個字元(50 個中文字)以內,每個視窗檔最多可存入
    99 個應用程式資料. 批次檔 DH.BAT 必須存放於經由 PATH 定義的子目錄內
    (例如 D:\TITES). WINDOWS 應用程式執行檔可從 WINDOWS 的檔案選單中的
    內容選項查出.

        最後將 EXPROG1.PCX 和 EXPROG1.WIN 存放於 D:\TITES 子目錄.
    如有必要可依序建立 EXPROG2.GIF EXPROG2.WIN, EXPROG3.GIF EXPROG3.WIN
    ... 備用.

    三、執行
        程式一執行,會顯示圖形介面. 因此可在 AUTOEXEC.BAT 設定讓電腦開機
    後就進入介面程式. 再以滑鼠左鍵點選所需的程式圖像便可直接執行指定的
    應用程式.
        應用程式執行完畢後,系統會回到圖形介面等候下一個指示. 點選螢幕
    Windows 區域或 DOS 區域左上角方框,可結束介面程式,返回作業系統.

        執行外部程式過程若有呼叫常駐程式佔用記憶体時,則在應用程式執行
    完畢後應先釋放常駐程式所佔用的記憶体(建 BAT 檔時應特別注意),否則會
    造成介面程式遭覆疊而不能回復的現象.


陸﹑聲霸卡 SBSIM 安裝及設定

若要讓介面程式有登場音效,來一段自己喜歡的音樂,或用語音指示使用者
如何操作電腦,可利用音效檔添加介面效果.

    音效檔需命名為 EXPROG1.VOC (或 CMF,MID 視種類而定), EXPROG2.VOC ..
音效播放,除了必須安裝聲霸卡以外,尚需執行聲霸卡的程式發展工具 SBSIM.
SBSIM 是一個常駐程式,它提供某些音效驅動程式的基本聲音輸出功能.

    安裝 SBSIM 所需檔案如下: (可自聲霸卡所附軟体取得)

        SBFMDRV.COM
        SBMIDI.EXE
        SBSIM.COM
        CTVDSK.DRV
        SBSIM.CFG

    一﹑SBSIM 功能設定
            由於 SBSIM 佔用不少記憶体,因此最好修改 SBSIM.CFG 的內容
        以便配合應用程式不同的記憶体需求.

        舉例說明兩種 SBSIM.CFG 設定方式

        (1) SBSIM.MEM 檔 (用文書編輯器編好後和 SBSIM 檔案存同一目錄)
            ; 可播放 VOC 及 MIDI 檔
            ; 只能從延伸記憶体讀取音效資料,使用最少的記憶
            ;[FM] (若用 CMF 檔,則將 ; 去除)
            ;BufferSize=32 (若用 CMF 檔,則將 ; 去除)

            [DskVoice]
            DMABufferSize=8
            BufferSize=24

            [Midi]
            BufferSize=32
            MidiMap=2               ; 0:General  1:Base  2:Extend

        (2) SBSIM.DSK 檔 (用文書編輯器編好後和 SBSIM 檔案存同一目錄)
            ; 可播放 VOC 及 MIDI 檔
            ; 可從磁碟或延伸記憶体讀取音效資料,佔用較多記憶体

            ;[FM] (若用 CMF 檔,則將 ; 去除)
            ;BufferSize=32 (若用 CMF 檔,則將 ; 去除)

            [DskVoice]
            DMABufferSize=8
            BufferSize=24

            [MemVoice]
            DMABufferSize=8
            ExtendedMemory=on
            SBSIMhandles=10

            [Midi]
            BufferSize=32
            MidiMap=2               ; 0:General  1:Base  2:Extend

    二﹑SBSIM 安裝及去除

            為了靈活應用 SBSIM 各項功能,可以依應用程式的記憶体需求選擇
        適當的批次檔來安裝 SBSIM

        (1) 可從磁碟或延伸記憶体讀取音效資料的 SBD.bat
            @echo off
            C:  (假設聲霸卡檔案放在 C:\SBPROI)
            cd\sbproi
            rem lh sbfmdrv  (若用 CMF 檔,則將 rem 去除)
            c:\sbproi\sbmidi /E  (執行 MIDI 播放常駐程式)
            copy c:\sbproi\sbsim.dsk c:\sbproi\sbsim.cfg
            sbsim

        (2) 只能從延伸記憶体讀取音效資料的 SBM.bat
            @echo off
            c:  (假設聲霸卡檔案放在 C:\SBPROI)
            cd\sbproi
            rem lh sbfmdrv  (若用 CMF 檔,則將 rem 去除)
            c:\sbproi\sbmidi /E  (執行 MIDI 播放常駐程式)
            copy c:\sbproi\sbsim.mem c:\sbproi\sbsim.cfg
            sbsim

        (3) 去除 SBSIM,釋放 SBSIM 所佔用的記憶的 SBU.bat
            @echo off
            c:
            cd\sbproi
            sbsim /U    (注意此處,後執行的程式記憶先釋放)
            sbmidi /U   (注意此處,先執行的程式記憶後釋放)
            d:

            應用程式若有安裝 SBSIM 音效,必需在執行應用程式的批次檔內呼叫          SBU.bat, 當應用程式執行完畢,便可釋放 SBSIM 所佔用的記憶.


柒﹑製作 EXPROG1.WIN 所需應用程式批次檔範例

    一﹑執行 PE2 文書編輯器的例子 PE2.BAT

        @echo off
        call Et3.bat  (呼叫倚天中文系統)
        d:            (假設 PE2 存放於 D:\pct)
        cd\pct        (進入存放 PE2 的子目錄)
        pe2.exe       (執行 PE2 應用程式)
        call Q.bat    (呼叫釋放倚天中文系統所佔記憶的批次檔)

        Q.bat 內容如下:
        @echo off
        D:\ET3\ETCTL/c: IQ

    二﹑執行 TITES 多媒体管理系統的例子 VKMDB.BAT

        @echo off
        call SBD.bat  (呼叫 SBSIM 設定批次檔)
        d:
        cd\timdb
        vikon         (執行 TITES 多媒体管理程式)
        call sbu.bat  (呼叫釋放常駐程式的批次檔)


捌﹑結語

一枝畫筆,幾樣顏料可以在帆布上塗出美麗的色彩; 許多無價的藝術品往往 用最簡單的工具創作出來. 面對日新月異的電腦科技,我們似乎也該坐下來,喘 口氣,思考一下如何把手邊的工作做好,而不應汲汲於將有限的資源用來追逐功能 更強,速度更快的硬体,或是馬不停蹄地拷貝最新的軟体.

建立應用程式圖形介面的目的在於提供使用者一個方便執行應用程式的工 具. 換句話說,由具有電腦使用經驗者應用此一人機介面,協助初學者規劃應用 程式執行環境,不但可以簡化執行程序,也能達到有效管理電腦的目的.

本文所敘述的程式,曾用於 TITES 多媒体雙語教學系統 (自動化科技 110 期, 一九九三年五月 p.95-p.106) 的外部應用程式介面. 有興趣的讀者,不妨 參考本文敘述的方法,自行設計能夠展現個人風格的介面程式.

2011年4月18日 星期一

相關論文目錄

相關論文

張東瀛



現代科技一日千里,資訊更新的速度更是讓人目不暇給。一般人接受的資訊越廣, 對知識的需求也越深,學習方法必然有所改變,「知識加工」勢在必行。教學系統 的設計可說是藝術﹑教育與科技的結合,在電腦日益普及而傳統教育成本逐年提高 的現代化社會,應用個人電腦作為輔助教學工具,不僅是當代潮流,也是教育工作 者必須面對的事實。 Alan Turing 曾說:「即令識見不遠, 亦知所當行。」 (We can see only a short distance ahead, but we can see plenty there that needs to be done.) 我們希望為知識導航創造一個實驗環境。學習者經由系統協助,可望發揮潛能,提 高學習效率。藉著多媒体系統的開發,結合有心人的努力,人類的智慧和文明當更 能傳諸久遠。

TITES 多媒体系統、Vikon 語音輸出編譯器與 Vikon 自然語言認知系統的設計,歷經數十個寒暑,爰將歷年撰寫的相關論文,提供有志研究人工 智慧與多媒体系統的讀者參考。敬祈諸位讀者先進指教。


1. 自然語言研究與自動翻譯系統 自動化科技 1985 年 9 月 p.73-82
2. BASIC 語言與資料庫管理系統 自動化科技 1987 年 4 月 p.79-90
3. 智慧的面紗 自動化科技 1987 年 7 月 p.97-102
4. 語意網路與框架結構 自動化科技 1987 年 12 月 p.211-221
5. BITNET 國際學術網路 自動化科技 1987 年 12 月 p.133-147 IBM 資訊世界 1988 vol.1 p. 8-13 IBM 資訊世界 1988 vol.2 p.12-16
6. ARPANET 高等科技網路 自動化科技 1988 年 4 月 p.186-197 (國科會科技論文索引 編號: 7707IA0018)
7. 科技野花 自動化科技 1989 年 1 月 p.32-36
8. 電腦化教學專家系統 自動化科技 1989 年 3 月 p.159-166 (國科會科技論文索引 編號: JA 7807-1475)
9. 普羅米修斯與潘朵拉-核能科技的沉思 自立早報 1990-02-05 (上) 自立早報 1990-02-06 (下)
10. 專家系統化與實驗計劃法 自動化科技 1990 年 5 月 p.180-187 (國科會科技論文索引 編號: JA 7907-1335)
11. 多媒体電腦系統 自動化科技 1991 年 10 月 p.111-116 (國科會科技論文索引 編號: JA 8101-1273)
12. A Multimedia-based Bilingual Instructional System Using An Expert System Shell (以專家系統發展工具建構多媒体雙語教學系統) CHAPTER I : INTRODUCTION CHAPTER II : REVIEW OF RELATED LITERATURE CHAPTER III: METHODOLOGY CHAPTER IV : SYSTEM ANATOMY CHAPTER V : CONCLUSIONS AND RECOMMENDATIONS University Microfilms International 1992 No. 13-50454
13. 以 BASIC 語言建構多媒体雙語教學系統 自動化科技 1993 年 5 月 p.95-106
14. 電腦多媒体在商業廣告之應用 HOPENET 光碟月刊 1994 年 10 月 p.158-161
15. TITES 多媒体管理系統 HOPENET 光碟月刊 1995 年 2 月 p.151-155
16. 少運崎嶇老景宜 - 我的電腦學習歷程 自動化科技 1995 年 11 月 p.65-72
17. 使用者圖形介面程式之設計 自動化科技 1996 年 3 月 p.13-17
18. 加密與密碼防禦 自動化科技 1996 年 6 月 p.70-76
19. 密碼設計與檢核原理剖析 自動化科技 1996 年 12 月 p.62-67(上) 自動化科技 1997 年 1 月 p.54-59(下)
20. 電腦多媒体專輯製作紀實 微電腦傳真(PC Magazine 中文版) 1998 年 7 月 p.282-286
21. 台語語音筆記本 2000 年 11 月 初稿 2009 年 9 月 更新稿

2011年4月3日 星期日

密碼設計與檢核原理剖析

密碼設計與檢核原理剖析
  張東瀛 



原載  
自動化科技  1996 年 12 月  p.62-67(上)
自動化科技  1997 年  1 月  p.54-59(下)



壹、前言

人類的社會,從組織型態看來,類似樹狀階層(hierarchical)結構。通常大群体中 有小群体,小群体內又有小組合。一般人喜歡過群体生活,又希望保有相當的私 密性。這種特性在城市居民的生活中特別顯著。基於區隔或保密的理由,多數人鍾 愛透天厝,獨門獨戶,屋外又可建造圍牆,萬不得已,才住公寓。重門深鎖,外掛鐵 窗,都是為了阻絕非法闖入或限制他人進出的防護措施。

個人電腦讓現代人具備第六個感知器,資訊傳播透過網路發展而無遠弗屆,活動 範圍迅速擴大,其規模遠非傳統城市格局所能比擬。人類的知性生活因電腦而豐 富,各行各業對電腦的依賴性也越來越高,因此電腦資訊的安全與維護便成為重 要而嚴肅的課題。

一般人大都有使用自動櫃員機的經驗。提款卡插入後,機器會要求你輸入密碼,用 以辨識身份。這種利用密碼檢核以過濾非法使用者的措施,常被用來作為系統安全 防護的第一道關卡。類似的保護方式也可在 BBS 站,軟体安裝或使用時看到。

電腦系統內部,也有層層關卡,最常見的便是機密等級或使用權限的保護措施。 假設你意外闖入某個電腦系統,發現一大堆看不懂的檔案,不必驚訝,因為這些檔 案可能因為安全理由而上鎖,也就是經過檔案加密的手續。除非你持有密碼可將檔 案還原或解密,否則仍是入寶山空手回的局面。

不論密碼檢核或檔案加密,都是專門技術,某些特殊的演算法更非三言兩語可以解 釋清楚。密碼學即是研究此道的入門課程。密碼設定有許多種,常見的有單碼 和複碼(以密碼機製造出來),檔案加密的方法更是五花八門,令人嘆為觀止。本文 僅針對基本的固定式密碼檢核及傳統檔案加密方法提出說明及程式設計實例。所 附程式及演算法已用於商用軟体多年,並受國際著作權公約保護,僅供讀者參考。


貳、密碼檢核程式

   REM             ******************************************
   REM             *     CHarades.BAS Version 2.0           *
   REM             *     01-22-1986                         *
   REM             *     By Tony Chang                      *
   REM             *     06-22-1996                         *
   REM             *     Writing in Quick BASIC 4.5         *
   REM             *     Tony Knowledge Engineering Lab     *
   REM             ******************************************
   以上為版權宣告及程式設計相關資訊

   'EXIT Reminder  暫回DOS作業系統的檢知器。程式內因設有暫回DOS的功能
   因此利用&H4E位址來偵測是否已執行本程式。使用者按Esc時,將&H4E內函值設
   定為5,表示電腦已執行本程式
   COLOR 15, 1: DEF SEG = &H30: MS% = PEEK(&H4E): DEF SEG
   IF MS% = 5 THEN
      CLS : BEEP: PRINT
      PRINT "CHarades 2.0 already installed, type EXIT to return": END
   END IF
   程式開始執行時先檢查&H4E是否等於5,是的話,則提醒使用者打EXIT回本程式
   若否,則繼續下一步,定義變數
   A1$ = CHR$(68): A3$ = CHR$(97): A4$ = CHR$(109): A5$ = CHR$(101)
   A2$ = CHR$(114)
   這些變數用來定義密碼所需的字母,如果直接使用字串定義,很容易用PCTools
   等工具程式看出,所以先用字母的ASCII值來定義變數,再加以組合成密碼

   此一變數為音樂響鈴,可用PLAY指令發聲
   FATE1$ = "MB T180 O2 P2 P8 L8 GGG L2 E-"

   利用剛才定義的變數設定密碼PK1$,至於PK2$可作為備用鑰匙或第二個密碼,
   必要時也可再增加幾個KEY CODE,甚至建立密碼庫存放這些密碼
   I = 1: KEY OFF: CLS : LOCATE , , 0, 14
   PK1$ = A1$ + A2$ + A5$ + A3$ + A4$ + A5$ + A2$
   PK2$ = PK1$  '本例只用一個密碼

   從第line 14到line 18為密碼檢核常式,I值設定讓使用者可輸入三次,超過
   三次未輸入正確密碼則結束程式。非法使用者有時會先找出密碼為幾位數,再進
   行測試。此處使用DO ... LOOP 的目的即是讓非法使用者無法查覺密碼位數,以
   增加篩檢困難度。
14 PRINT : PRINT : PRINT : ' PLAY FATE1$
   IF I <= 3 THEN
      I$ = LTRIM$(STR$(I))
      ANS$ = "": LOCATE 8, 10, 1: PRINT "Password"
      DO: SANS$ = INPUT$(1): ANS$ = ANS$ + SANS$
      LOOP UNTIL ASC(SANS$) = 13
      I = I + 1: PRINT : ANS$ = LEFT$(ANS$, 7)
          IF I > 3 THEN
             GOTO 16
          ELSE
             GOTO 18
          END IF
   END IF
   CLS : LOCATE 10, 12: PRINT "Incorrect password, permission denied."
   LOCATE 22, 7
   PRINT "* * * By Tony Chang, Tainan, Taiwan, August 18, 1986 * * *"
   PRINT : END
16 IF NOT (ANS$ = PK1$ OR ANS$ = PK2$) THEN GOTO 14
18 IF NOT (ANS$ = PK1$ OR ANS$ = PK2$) THEN
      LOCATE 10, 10: PRINT "Incorrect password, try again please."
      SOUND 700, 1: GOTO 14

   以上的密碼檢核常式,原先是以MBASIC寫成,後來改用QBASIC編譯成OBJECT
   CODE 就可在不同的程式呼叫。


參、檔案加密與解密

檔案加密有很多方式,比較常見的是改變檔案內函值,也就是重新編碼。不論是 ASCII文字檔或是Binary檔(如*.EXE,*.COM,圖形檔或音效檔)都是由0-255等 兩百五十六個ASCII碼組合而成,因此只要將這些ASCII碼按照一定的模式重新 組合,就和原來的檔案大不相同,達到保護的目的。

編碼的方式有兩種,一種是規則式,例如將原碼加上或減去某值,甚至利用特定公 式計算後變碼,也有依照一定程序將原碼重新排列。這種方式因為有一定的規則 常會留下蜘絲馬跡,讓解碼者有機可趁,並非是很好的方法。另一種是不規則式, 或是隨機式加密法。通常由兩個檔案組合而成,一個是要加密的來源檔,另一個則 是用來當作密碼本的簽名檔。這兩個檔案可以是文字檔也可以是二進位檔。由於 簽名檔可以千變萬化,檔案大小從數十BYTE到數十KBYTE不等,因此被破解的機率 比較小。

以下分別以程式說明這兩種加密方式


肆、規則式檔案加密法

50 CLS
   A6$ = CHR$(110): A12$ = CHR$(111): A15$ = CHR$(121): A16$ = CHR$(84)
   LOCATE 1, 1:
   PRINT "CHarades 1.0 Copyright " + A16$ + A12$ + A6$ + A15$ + " Lab 1992"
   IF A16$ <> "T" OR A6$ <> "n" OR A12$ <> "o" OR A15$ <> "y" THEN 50
   以上是防止版權宣告遭他人篡改的措施

   其次是設計以方向鍵操作的功能選單,使用者可以選擇「加密」「解密」「結束」
   等功能,選項以紅底黃字顯示,項目少時,用方向鍵比較便捷,選單多時才用滑鼠操作
   CLEAR : DIM M$(4): ECG$ = "MF L16O2ECG>CEG>CL32O2CDEFGAB>CDEFGAB>C"
   M$(1) = " 1: Charades "
   M$(2) = " 2: Reduction "
   M$(3) = " 3: Exit to DOS "
   FOR Y = 1 TO 3: LOCATE 2 * Y + 6, 30: PRINT M$(Y): NEXT Y
   LOCATE , , 0
   Y = 1: MVE = NO: X = 1: Q$ = ""
   WHILE Q$ <> CHR$(13)
   LOCATE 2 * Y + 6, 30: COLOR 14, 4: PRINT M$(Y): COLOR 15, 1
   Q$ = INKEY$: WHILE Q$ = "": Q$ = INKEY$: WEND
   IF LEN(Q$) = 2 AND ASC(RIGHT$(Q$, 1)) = 72 THEN
      MVE = YES: X = Y - 1:
          IF X = 0 THEN
             X = 3
          END IF
   END IF
   IF LEN(Q$) = 2 AND ASC(RIGHT$(Q$, 1)) = 80 THEN
      MVE = YES: X = Y + 1:
          IF X = 4 THEN
             X = 1
          END IF
   END IF
   'Call DOS shell
   這一段是利用SHELL指令設計暫回DOS功能,有時候忘記檔案放在那個目錄,或是臨時想
   到DOS作業,便可按Esc跳出。&H4E用來存放程式辨識值
   IF ASC(RIGHT$(Q$, 1)) = 27 THEN
      CLS : DEF SEG = &H30: H4E% = PEEK(&H4E): POKE &H4E, 5: SHELL
      DEF SEG = &H30: POKE &H4E, H4E%: DEF SEG : GOTO 50
   END IF
   IF Q$ >= "1" AND Q$ <= "3" THEN X = VAL(Q$): MVE = YES
   IF MVE = YES THEN LOCATE 2 * Y + 6, 30: PRINT M$(Y): Y = X: MVE = NO
   WEND
   A$ = STRING$(1, " ")'定字串長度
   IF Y = 1 THEN 110
   IF Y = 2 THEN 370
   IF Y = 3 THEN PLAY ECG$: CLS
   END

   這一段是加密常式,先輸入要進行加密和加密後的檔名
110 CLS : BEEP
    LOCATE 7, 20: PRINT "ASCII (Binary) file -> Charade file"
    LOCATE 9, 20: INPUT "Source file name "; SFN1$: IF SFN1$ = "" THEN 110
    LOCATE 11, 20: INPUT "Charade file name "; CFN1$: IF CFN1$ = "" THEN 110

    再用 SUB 600 讓使用者選擇 1-99999 五位數作密碼,CD%是密碼值除以256後的餘數
    GOSUB 600

    打開檔案,將ASCII碼逐一讀入,經過編碼運算後存入新檔
    OPEN SFN1$ FOR BINARY AS #1
    OPEN CFN1$ FOR BINARY AS #2
    L = LOF(1)
    FOR I = 1 TO L
    GET #1, I, A$
    H% = ASC(A$)
    AC% = H% + CD%: IF AC% > 255 THEN AC% = AC% - 256
    將ASCII值和密碼餘數值相加,若大於255則減去256
    IF AC% >= 249 THEN 260 '超過249則商大於10,無法存個位數
    A% = INT((AC%) / 25) '計算商
    C% = AC% - A% * 25 '計算餘數
    IF C% = 7 OR C% = 18 THEN
    LOCATE 15, 30: PRINT "Proceeding   : "; I '顯示進行加密的進度
    END IF
    AC% = C% * 10 + A% '以餘數當十位數,以商當個位數,計算新數值
260 PUT #2, I, AC% '將演算結果存進加密檔
    NEXT I
    LOCATE 15, 30
    BEEP: LOCATE 20, 20: INPUT ; "Hit RETURN to continue.", ANS2$: GOTO 50

    這一段是解密常式,將加密演算法反向操作,把ASCII數值還原,再存入解密檔
370 CLS : BEEP: LOCATE 7, 20: PRINT "Charade file -> ASCII (Binary) file"
    LOCATE 9, 20: INPUT "Charade file name "; CFN2$: IF CFN2$ = "" THEN 370
    LOCATE 11, 20: INPUT "Target file name "; TFN2$: IF TFN2$ = "" THEN 370
    GOSUB 600
    OPEN CFN2$ FOR BINARY AS #1
    OPEN TFN2$ FOR BINARY AS #2
    L = LOF(1) - 1
    FOR I = 1 TO L
    GET #1, I, A$
    AC% = ASC(A$)
    IF AC% >= 249 THEN 500
    C% = INT(AC% / 10): D% = AC% - C% * 10 'C% 為十位數, D%為個位數
    AC% = D% * 25 + C% 'D%為原來的商,C%為原來的餘數
    IF D% = 2 OR D% = 7 THEN LOCATE 15, 30: PRINT "Proceeding   : "; I
500 H% = AC% - CD%: IF H% < 0 THEN H% = H% + 256
    B$ = CHR$(H%)
    PUT #2, I, B$
    NEXT I
    LOCATE 15, 30: PRINT "Proceeding   : "; I 顯示進行解密的進度
    BEEP: LOCATE 20, 20: INPUT ; "Hit RETURN to continue.", ANS2$: GOTO 50
    END

    SUB 600 用以計算密碼的餘數值,由於ASCII值為0-255,故除以256再取餘數值,
    密碼設計為五位數只是障眼法,目的是取一個隨機的ASCII值來運算
600 BEEP: LOCATE 13, 20: PRINT "Code Number (XXXXX) : ": CD$ = INPUT$(5)
    CD& = VAL(CD$): IF CD& > 99999 OR CD& < 1 THEN PLAY ECG$: GOTO 600
    CD% = CD& - (INT(CD& / 256)) * 256
    RETURN

    這種加密方式由於一次處理一個BYTE,速度較慢,而且密碼為定值,被解開的機率較大。


伍、隨機式檔案加密法

隨機檔案加密法是利用兩個不同檔案,將其對應位址ASCII碼相加後,應用簡單的演算 法取得新值成為加密檔。第一個檔案為資料來源檔,是要加密的檔案,第二個檔案為簽 名檔,是當作密碼鑰匙用的檔案。由於簽名檔可以是任何形式的檔案,因此要解開密碼 的機率相當低。

範例程式以長字串方式讀入ASCII碼,再存入陣列,得以加快加密速度,由於需用動態 定長字串陣列,因此需要較多記憶体來執行。字串陣列大小設定為20K BYTE。陣列太小 時若要將大檔案加密,耗時甚久,陣列設定太大,會造成Out of Stack。

50 CLS : A6$ = CHR$(110): A12$ = CHR$(111): A15$ = CHR$(121): A16$ = CHR$(84)
   LOCATE 1, 1
   PRINT "CHarades 2.0 Copyright " + A16$ + A12$ + A6$ + A15$ + " Lab 1992"
   IF A16$ <> "T" OR A6$ <> "n" OR A12$ <> "o" OR A15$ <> "y" THEN 50
   CLEAR : DIM M$(4): ECG$ = "MF L16O2ECG>CEG>CL32O2CDEFGAB>CDEFGAB>C"
   M$(1) = " 1: Charades "
   M$(2) = " 2: Reduction "
   M$(3) = " 3: Exit to DOS "
   FOR Y = 1 TO 3: LOCATE 2 * Y + 6, 30: PRINT M$(Y): NEXT Y
   LOCATE , , 0
   Y = 1: MVE = NO: X = 1: Q$ = ""
   WHILE Q$ <> CHR$(13)
   LOCATE 2 * Y + 6, 30: COLOR 14, 4: PRINT M$(Y): COLOR 15, 1
   Q$ = INKEY$: WHILE Q$ = "": Q$ = INKEY$: WEND
   IF LEN(Q$) = 2 AND ASC(RIGHT$(Q$, 1)) = 72 THEN
      MVE = YES: X = Y - 1:
          IF X = 0 THEN
             X = 3
          END IF
   END IF
   IF LEN(Q$) = 2 AND ASC(RIGHT$(Q$, 1)) = 80 THEN
      MVE = YES: X = Y + 1:
          IF X = 4 THEN
             X = 1
          END IF
   END IF
   'Call DOS shell
   IF ASC(RIGHT$(Q$, 1)) = 27 THEN
      CLS : DEF SEG = &H30: H4E% = PEEK(&H4E): POKE &H4E, 5: SHELL
      DEF SEG = &H30: POKE &H4E,
   END IF
   IF Q$ >= "1" AND Q$ <= "3" THEN X = VAL(Q$): MVE = YES
   IF Q$ >= "1" AND Q$ <= "3" THEN X = VAL(Q$): MVE = YES
   IF Q$ >= "1" AND Q$ <= "3" THEN X = VAL(Q$): MVE = YES
   IF MVE = YES THEN LOCATE 2 * Y + 6, 30: PRINT M$(Y): Y = X: MVE = NO
   WEND
   IF Y = 1 THEN 110
   IF Y = 2 THEN 370
   IF Y = 3 THEN PLAY ECG$: CLS : END

   以上程式說明,請參考規則式加密法部份

加密常式: 輸入相關檔名,打開檔案,視檔案相對長度決定一次讀入字串和陣列大小
110 CLS
    LOCATE 7, 20: PRINT "Input file name for Charades Process"
    LOCATE 9, 20: INPUT "Source file: ", SFN1$: IF SFN1$ = "" THEN 110
    LOCATE 11, 20: INPUT "Signature file: ", CFN1$: IF CFN1$ = "" THEN 110
    LOCATE 13, 20: INPUT "Charades file: ", TFN1$: IF TFN1$ = "" THEN 110
    OPEN SFN1$ FOR BINARY AS #1
    OPEN CFN1$ FOR BINARY AS #2
    OPEN TFN1$ FOR BINARY AS #3
    L1 = LOF(1)
    L2 = LOF(2)

    若檔名輸入有誤,則重新輸入
    IF L1=0 OR L2=0 THEN
       BEEP: LOCATE 20,20
       INPUT ; "File Error! Hit RETURN to continue.", ANS2$
       GOTO 110
    END IF

    IF L1 > L2 THEN IL = L2 ELSE IL = L1
    以來源檔及簽名檔中較小的檔案長度作為字串陣列設定值IL
    IF IL > 20480 THEN IL = 20480   'IL最大值為20K BYTE
    設定動態定長字串陣列
    '$DYNAMIC
    DIM RD$(2)
    定義字串變數長度
    RD$(1) = SPACE$(IL)
    RD$(2) = SPACE$(IL)
    若來源檔大於一次處理長度則分段進行加密,否則一次完成
    IF L1 > IL THEN GOSUB RECHA ELSE GOSUB NONRECHA
    ERASE RD$  '將動態陣列移除
    CLOSE : BEEP:
    LOCATE 20, 20: INPUT ; "Hit RETURN to continue.", ANS2$: GOTO 50

一次完成加密常式
NONRECHA:
    GET #1, , RD$(1)
    GET #2, , RD$(2)
    FOR I = 1 TO IL
    DSOR$ = MID$(RD$(1), I, 1)
    DCHA$ = MID$(RD$(2), I, 1)
    SOR% = ASC(DSOR$)
    CHA% = ASC(DCHA$)
    TAG% = SOR% + CHA%: IF TAG% > 255 THEN TAG% = TAG% - 256
    必要時可在此處加上其他演算法變碼
    DSOR$ = CHR$(TAG%)
    PUT #3, , DSOR$
    NEXT I
    RETURN

分次完成加密常式
RECHA:
    LAST = 0
    JT = INT(L1 / IL) + 1
    FOR J = 1 TO JT
    GET #1, , RD$(1)
    GET #2, 1, RD$(2)
    FOR I = 1 TO IL
    DSOR$ = MID$(RD$(1), I, 1)
    DCHA$ = MID$(RD$(2), I, 1)
    SOR% = ASC(DSOR$)
    CHA% = ASC(DCHA$)
    TAG% = SOR% + CHA%: IF TAG% > 255 THEN TAG% = TAG% - 256
    必要時可在此處加上其他演算法變碼
    LAST = IL * (J - 1) + I
    DSOR$ = CHR$(TAG%)
    PUT #3, LAST, DSOR$
    IF LAST = L1 THEN EXIT FOR
    NEXT I
    LOCATE 15, 30: PRINT "Proceeding   : "; LAST
    NEXT J
    RETURN

解密常式: 輸入相關檔名,打開檔案,視檔案相對長度決定一次讀入字串和陣列大小
370 CLS
    LOCATE 7, 20: PRINT "Input file name for Reduction Process"
    LOCATE 9, 20: INPUT "Charades file: ", SFN1$: IF SFN1$ = "" THEN 370
    LOCATE 11, 20: INPUT "Signature file: ", CFN1$: IF CFN1$ = "" THEN 370
    LOCATE 13, 20: INPUT "Reduction file: ", TFN1$: IF TFN1$ = "" THEN 370
    OPEN SFN1$ FOR BINARY AS #1
    OPEN CFN1$ FOR BINARY AS #2
    OPEN TFN1$ FOR BINARY AS #3
    L1 = LOF(1)
    L2 = LOF(2)
    若檔名輸入有誤,則重新輸入
    IF L1=0 OR L2=0 THEN
       BEEP: LOCATE 20,20
       INPUT ; "File Error! Hit RETURN to continue.", ANS2$
       GOTO 370
    END IF
    IF L1 > L2 THEN IL = L2 ELSE IL = L1
    IF IL > 20480 THEN IL = 20480
    DIM RD$(2)
    RD$(1) = SPACE$(IL)
    RD$(2) = SPACE$(IL)
    IF L1 > IL THEN GOSUB REDUC ELSE GOSUB NONREDUC
    CLOSE : BEEP:
    LOCATE 20, 20: INPUT ; "Hit RETURN to continue.", ANS2$: GOTO 50

一次完成解密常式
NONREDUC:
    GET #1, , RD$(1)
    GET #2, , RD$(2)
    FOR I = 1 TO IL
    DSOR$ = MID$(RD$(1), I, 1)
    DCHA$ = MID$(RD$(2), I, 1)
    SOR% = ASC(DSOR$)
    CHA% = ASC(DCHA$)
    TAG% = SOR% - CHA%: IF TAG% < 0 THEN TAG% = TAG% + 256
    DSOR$ = CHR$(TAG%)
    PUT #3, , DSOR$
    NEXT I
    RETURN

分次完成解密常式
REDUC:
    LAST = 0
    JT = INT(L1 / IL) + 1
    FOR J = 1 TO JT
    GET #1, , RD$(1)
    GET #2, 1, RD$(2)
    FOR I = 1 TO IL
    DSOR$ = MID$(RD$(1), I, 1)
    DCHA$ = MID$(RD$(2), I, 1)
    SOR% = ASC(DSOR$)
    CHA% = ASC(DCHA$)
    TAG% = SOR% - CHA%: IF TAG% < 0 THEN TAG% = TAG% + 256
    LAST = IL * (J - 1) + I
    DSOR$ = CHR$(TAG%)
    PUT #3, LAST, DSOR$
    IF LAST = L1 THEN EXIT FOR
    NEXT I
    LOCATE 15, 30: PRINT "Proceeding   : "; LAST
    NEXT J
    RETURN


陸、結語

以簽名檔作為隨機加密的密碼檔,也可用來作為檔案製作認證文件,如果通訊雙方 各用兩個共軛簽名檔重覆加密,更可確認雙方身分。例如收訊者和送訊者先交換簽名檔 送訊者再以自己和對方的簽名檔進行二次加密後,經由網路送給對方,受訊者收到檔案 再用這兩個簽名檔進行二次解密,便可將檔案還原。由於簽名檔可針對不同檔案隨時更 改內容,即使第三者截獲加密檔也很難解密。本文提到的隨機加密程式,經過編譯後處理 20K BYTE 檔案僅需數秒,實用性頗高。

簽名檔可用一般文字檔或二進位檔,最好使用字元比較有變化的檔案作簽名檔。色彩單 調的圖形檔或比較鬆散的檔案(可得高壓縮率的未壓縮檔),通常不適合作為簽名檔。一 般而言,使用經過壓縮的檔案進行加密或當作簽名檔,都可得到較好的加密效果。