跳转到内容

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日安装

华夏公益教科书