跳轉到內容

Oberon/ETH Oberon/教程/壓縮

來自 Wikibooks,開放世界中的開放書籍

這些教程頁面由 André Fischer (afi) 編寫,並由 Hannes Marais 提供編輯幫助,託管在 ETHZ,並保留在 ETH 許可證 下。相關內容可以透過 Book.Tool 在系統中找到。擴充套件內容也可以在 紙質版 上找到。一些教程頁面位於 WayBack 存檔 中。

壓縮和歸檔工具

教程目標

[編輯 | 編輯原始碼]

學習如何處理或建立壓縮檔案和歸檔檔案,這些檔案透過軟盤、FTP 和電子郵件分發。

預計時間:20 分鐘。


Compress 使用 LZSS 壓縮技術壓縮多個檔案並將它們打包到單個歸檔檔案中。一個歸檔(檔案)可以在所有 Oberon 平臺之間移植。按照慣例,歸檔檔名的最後一部分應該是 Arc。副檔名為 .Arc 的檔案可以直接使用命令 Desktops.OpenDoc 開啟(見下文)。

注意:Oberon 歸檔檔案是二進位制檔案。要透過電子郵件傳送它,必須由 AsciiCoder.CodeFiles 命令進行處理。

工作原理

[編輯 | 編輯原始碼]

LZSS 使用基於詞典的壓縮方案:它使用之前見過的文字作為詞典,並將輸入文字中的短語替換為指向詞典的指標,以實現壓縮。LZSS 壓縮演算法高度不對稱。壓縮例程相當複雜,並且做了很多工作。相比之下,展開程式碼非常簡單,工作量很少。這使得 LZSS 成為需要壓縮一次並展開多次的資料的絕佳選擇。

有關 LZSS 壓縮技術的更多資訊,請參見

資料壓縮手冊
馬克·尼爾森
M & T 出版社 - ISBN 0-13-202854-9

Compress 執行與常見的 Unix 程式 compressuncompress 相同的功能,以及 Unix 磁帶歸檔程式 tar。TAR 只需將一組檔案組合成一個檔案,並且不執行任何壓縮。

請注意 Unix 和 Oberon 之間策略的差異。Unix .tar.Z 檔案是一個壓縮的(磁帶)歸檔檔案。Oberon 歸檔檔案包含單獨壓縮的檔案,這使得在歸檔檔案中新增、提取或刪除檔案變得容易。因此,Oberon 歸檔檔案的格式與 UNIX 實用程式產生的檔案的格式不相容。

維護歸檔文件

[編輯 | 編輯原始碼]

歸檔檔案的維護工作從使用命令 Desktops.OpenDoc 開啟文件開始。嘗試使用檔名 Archive.Arc 的示例

Desktops.OpenDoc Archive.Arc

這將開啟一個同名文件檢視器,顯示歸檔檔案中包含的檔案目錄。如果歸檔檔案尚不存在,則會自動建立。執行 Compress.Directory 命令也可以獲得相同的結果,該命令將在下面介紹。維護工作可以在選單欄中的命令按鈕的幫助下舒適地執行。標題欄中的每個按鈕(除了 [關閉] 以外)都執行 Compress 模組中定義的命令

[開啟 ^] Compress.Open ^
[新增 ^] Compress.Add ^
[提取 ^]   Compress.Extract ^
[刪除 ^] Compress.Delete ^

這些命令將在下面介紹。

壓縮命令收集在 Compress.Tool.

顯示歸檔目錄 - Compress.Directory

[編輯 | 編輯原始碼]

Compress.Directory [\d] (archiveName | ^) 開啟一個名為 archiveName 的文字檢視器,列出歸檔檔案中包含的檔名。如果歸檔檔案尚不存在,則會自動建立。當存在選項 \d 時,將為每個檔案提供更多資訊:新增到歸檔檔案的日期和時間、壓縮後的位元組大小以及原始未壓縮檔案的百分比大小。

新增檔案列表 - Compress.Add

[編輯 | 編輯原始碼]

Compress.Add archiveName ({fileName} ~ | ^) 壓縮並將指定檔案新增到指定歸檔檔案中。如果名稱匹配的檔案已存在,則其名稱將附加一個序列號,如下所示:如果 Char.Mod 存在,則新增 Char.Mod0。

提取所有檔案 - Compress.ExtractAll

[編輯 | 編輯原始碼]

Compress.ExtractAll archiveName 從指定歸檔檔案中提取並解壓縮所有檔案,並將它們放置在當前目錄中。
注意:如果名稱匹配的檔案已存在,則會被覆蓋。警告訊息將寫入 Oberon 日誌。

提取檔案列表 - Compress.Extract

[編輯 | 編輯原始碼]

Compress.Extract archiveName ({fileName} ~ | ^) 從指定歸檔檔案中提取並解壓縮指定檔案,並將它們放置在當前目錄中。
注意:如果名稱匹配的檔案已存在,則會被覆蓋。警告訊息將寫入 Oberon 日誌。

刪除檔案列表 - Compress.Delete

[編輯 | 編輯原始碼]

Compress.Delete archiveName ({fileName} ~ | ^) 從指定歸檔檔案中刪除指定檔案。

開啟檔案 - Compress.Open

[編輯 | 編輯原始碼]

Compress.Open archiveName (fileName | ^) 開啟一個名為fileName 的文件檢視器,顯示命名存檔中的命名檔案。如果您想顯示壓縮檔案的內容,而不實際建立(或替換)當前目錄中的檔案,請使用此命令。

定義。Arc - 存檔示例

[編輯 | 編輯原始碼]

Definitions.Arc 是 Oberon 中一個重要且核心的存檔,因為它是 Watson 可能被請求搜尋模組定義的資訊庫。顯示儲存在該存檔中的模組定義的另一種方法是使用 Desktops.OpenDoc Definitions.Arc 顯示其目錄,在列表中選擇一個名稱,然後單擊標題欄中的 [開啟 ^] 按鈕,或使用 Compress.Open 命令。


AsciiCoder 編碼器/解碼器

[編輯 | 編輯原始碼]

AsciiCoder 編碼和解碼文字或最近選擇的文字,包括出現在文件檢視器中的小工具。它也可用於對任意檔案進行編碼和解碼。編碼生成的 資料流僅包含可列印的 ASCII 字元,適合透過電子郵件傳送。它始終顯示在文字檢視器中,可以在其中進行編輯,例如,成為電子郵件訊息的一部分。另外,編碼資料前面會加上相應的解碼命令,即根據情況使用 AsciiCoder.DecodeText 或 AsciiCoder.DecodeFiles。解碼命令將自動獲取關於要解碼的資訊量的 資訊,即它知道編碼資料在何處結束。收到此類電子郵件的 Oberon 使用者可以立即解碼資訊。

編碼文字 - AsciiCoder.CodeText

[編輯 | 編輯原始碼]

AsciiCoder.CodeText [%] (* | @) 對標記的檢視器 (*) 中的文字(包括小工具)進行編碼,或者如果命令後跟 @,則對最近選擇中包含的文字進行編碼。如果存在 % 選項,則文字會同時被壓縮。一個名為“AsciiCoder.CodeText”的文件檢視器會自動開啟。它顯示編碼資料,前面加上相應的 AsciiCoder.DecodeText [%] 命令。

編碼檔案列表 - AsciiCoder.CodeFiles

[編輯 | 編輯原始碼]

AsciiCoder.CodeFiles [%] ({fileName} ~ | ^) 對列表中命名或選擇中命名的所有檔案進行編碼。如果存在 % 選項,則檔案會同時被壓縮。一個名為“AsciiCoder.CodeFiles”的文件檢視器會自動開啟。它顯示編碼資料,前面加上相應的 AsciiCoder.DecodeFiles [%] {fileName} ~ 命令。

解碼文字 - AsciiCoder.DecodeText

[編輯 | 編輯原始碼]

AsciiCoder.DecodeText [%] (text | @) 解碼緊隨命令之後的 Ascii 編碼文字,或從最近選擇的開頭開始的文字。一個名為“AsciiCoder.DecodeText”的文件檢視器會自動開啟,顯示解碼的資訊。如果存在 % 選項,則文字會同時被擴充套件。

解碼檔案列表 - AsciiCoder.DecodeFiles

[編輯 | 編輯原始碼]

AsciiCoder.DecodeFiles [%] ({fileName} ~ text | @) 解碼緊隨命令之後的 Ascii 編碼文字,或從最近選擇的開頭開始的文字。包含的檔案會寫入當前目錄。現有的檔案不會被覆蓋,因為它們首先會被重新命名為 .Bak 檔案。檔名必須出現在選擇的最前面,在編碼資料之前。AsciiCoder.CodeFiles 命令負責這一點。如果存在 % 選項,則檔案會同時被擴充套件。

Desktops.OpenDoc AsciiCoder.Tool 在手帕中展示了剛才描述的所有命令的有用集合,包括所有變體。


Base64 編碼器/解碼器

[編輯 | 編輯原始碼]

Base64 模組對檔案進行編碼和解碼,甚至包括小工具。編碼生成的 資料流僅包含 64 個 ASCII 字元,適合透過電子郵件傳送。它始終顯示在文字檢視器中,可以在其中進行編輯,例如,成為電子郵件訊息的一部分。

編碼檔案 - Base64.Encode

[編輯 | 編輯原始碼]

Base64.Encode fileName 對命名檔案進行編碼。一個名為“Encode”的文件檢視器會自動開啟。它顯示編碼資料。

解碼文字並將其儲存在檔案中 - Base64.Decode

[編輯 | 編輯原始碼]

Base64.Decode fileName (~ | ^) 解碼緊隨 fileName ~ 之後的編碼文字,或者如果 fileName 後面跟著 ^,則解碼從最近選擇的開頭開始的文字。結果將寫入當前目錄中的命名檔案。
注意:如果硬碟上存在具有匹配名稱的檔案,則會覆蓋該檔案。


UUDecoder

[編輯 | 編輯原始碼]

Unix uuencoded 檔案 經常釋出到 Usenet 新聞組或作為郵件訊息傳送。uuencoded 檔案是二進位制檔案,已透過 Unix uuencode 程式編碼為文字檔案。請注意,此轉換會擴充套件二進位制檔案,而不是壓縮它!

如果您碰巧收到此類檔案,您可以使用 UUDecoder.Decode 命令對其進行解碼,該命令在 UUDecoder.Tool 中有說明,並在下面列出。

解碼文字 - UUDecoder.Decode

[編輯 | 編輯原始碼]

UUDecoder.Decode begin .... | @ 解碼緊隨命令之後的文字,或從最近選擇的開頭開始的文字。

解碼檔案列表 - UUDecoder.Decode

[編輯 | 編輯原始碼]

UUDecoder.Decode {fileName} ~ | ^ 對列表中命名或選擇中命名的所有檔案進行解碼。



下一步是什麼?

[編輯 | 編輯原始碼]

以壓縮格式或 Oberon 存檔檔案形式分發您自定義開發的 Oberon 擴充套件,例如透過電子郵件或透過 FTP 將其上傳到 FTP 伺服器。


A

存檔
AsciiCoder.CodeFiles
AsciiCoder.CodeText
AsciiCoder.DecodeFiles
AsciiCoder.DecodeText
AsciiCoder.Tool
AsciiCoder

B

Base64.Decode
Base64.Encode
Base64

C

compress (Unix)
Compress.Add
Compress.Delete
Compress.Directory
Compress.ExtractAll
Compress.Extract
Compress.Open
Compress.Tool
compress

D

Definitions.Arc

E

編碼/解碼

T

tar (Unix)

U

uudecode (Unix)
UUDecoder.Decode
UUDecoder.Tool


1996年7月6日修訂
1997年5月30日安裝

華夏公益教科書