跳转到内容

Oberon/ETH Oberon

来自维基教科书,开放世界的开放书籍

ETH Oberon 站点地图
ETH Oberon 教程,Fischer 和 Marais
YouTube 上的 Oberon 频道,Andres Ramos
ETH Oberon 白皮书
贡献,以前来自 ETHZ

QEMU 中运行在 Debian Linux 上的 ETH Oberon 的 Oberon0 安装程序。

最初,Oberon 是在裸机 32 位 i386i486 机器上使用 Oberon0 软盘 进行 安装 的。该过程可能仍然让爱好者感兴趣。

在当代系统中,Oberon0 安装程序可以在 虚拟机 上运行。虚拟机只安装一次,可以用于任意数量的安装。使用此方法,无需花费时间记录和从软盘启动,并避免了软盘和驱动器的不可靠性。安装程序在虚拟机上比从软盘运行更快。该方法已成功地将 ETH Oberon 安装到各种笔记本电脑和台式机,包括 Micron Trek 2、AGP 笔记本电脑。提供了使用 QEMU 虚拟机进行 安装 的详细说明,并且这些说明可以调整以适应其他虚拟机。

Andres Ramos 描述了一种 方法,其中使用软盘上的 FAT 文件系统将安装文件传输到目标机器。

QEMU 页面 中的系统配置说明独立于安装方法。在原始安装说明中,配置在标题 已安装的本地 Oberon 系统的自定义 下讨论。在运行的 ETH Oberon 中,Script.Open System.Text 允许访问“4. 配置系统”部分。

在存储介质上安装和配置后,系统可以直接在本地 X86 PC 上运行。或者,可以使用虚拟机继续。在本地情况下,网络连接将通过以太网或串行交叉电缆。在虚拟情况下,网络连接使用连接到主机系统的 TAP桥接 接口。

日历和时钟

[编辑 | 编辑源代码]
名为 Time 的 Oberon 文档,带有一个钩子符号,允许插入内容。
带有日历和时钟的 Time。

在桌面上使用 MM 打开一个空的 Time 文档,方法是 Desktops.OpenDoc Time ~。
在文档中使用 ML 设置钩子符号。
使用 MM 在文档中插入日历,方法是 Gadgets.Insert Clocks.NewCalendar ~。
使用 MM 在文档中插入时钟,方法是 Gadgets.Insert Clocks.NewClock ~。
使用 MM 在 [Store] 上。
使用 MM 在 [Close] 上。
使用 MM 打开 Oberon.Text,方法是 Edit.Open Oberon.Text ~。或者 ET.Open Oberon.Text ~。
在行 { System.OpenLog } 上方插入以下三行。

{ Configuration.Marker set 80% 94% }
{ Desktops.OpenDoc Time ~ }
{ Configuration.Marker set 80% 92% }

使用 MM 在 Edit.Store 或 ET.Store 上。
使用 MM 在 System.Reboot 上。

Telnet 控制台

[编辑 | 编辑源代码]

Telnet 是一种不安全的协议,但在 Oberon 和 A2 的 Oberon 子系统中提供了一个主机控制台。Oberon 子系统的主机和 LAN 中面向网络的路由器应该有一个 防火墙,例如 Shorewall

至少在一个主机上需要一个 telnet 服务器守护进程。这在 Debian Linux 中。

sudo apt install openbsd-inetd inetutils-telnetd

在 /etc/inetd.conf 中使用此行进行配置。

telnet stream tcp nowait <user> /usr/sbin/tcpd /usr/sbin/telnetd -E bin/bash

参考 telnetd 手册。<user> 必须替换为 Oberon 用户的 ID。注意默认情况下没有身份验证;相当于参数“-a none”。重新启动 inet 守护进程。

service openbsd-inetd restart

尝试从主机中的控制台使用 telnet。

telnet localhost

然后在 Oberon 中。

Desktops.OpenDoc telnet://127.0.0.1

为了自动定位到主目录,将此行追加到 ~/.bashrc。

cd ~

电子邮件

[编辑 | 编辑源代码]
Oberon 中的 Mail.Panel。

TLS 对电子邮件的安全传输至关重要,现在已成为常规做法。Oberon 支持 POP 和 POP3 用于检索电子邮件,以及 SMTP 用于发送电子邮件。电子邮件可以通过 TLS 隧道从 智能主机 接收,并通过 Exim 或 TLS 隧道发送。[1]

在 ETH Oberon 中,Oberon.Text 进行这些设置。

NetSystem = {
  SMTP = "<host on the LAN>"  {* Outgoing local exim4 or TLS tunnel to smarthost. *}
  POP = "<host on the LAN>"  {* TLS tunnel to smarthost for incoming mail. *}
  ... 
  POPMode = "POP3"  {* POP3 or APOP *} 
  EMail = "[email protected]"  {* your return address *}
  ... 
}

端口 25 用于 SMTP,110 用于 POP,在 Oberon.Mail.Mod 中可见。

在 A2 中,Oberon.Text,或者如果使用 myaos 则为 Oberon.<host>.Text,进行这些设置。

NetSystem = {
  SMTP = "localhost"  {* Outgoing local exim4 or TLS tunnel to smarthost. *}
  POP = "localhost"  {* TLS tunnel to smarthost for incoming mail. *}
  ... 
  POPMode = "POP3"  {* POP3 or APOP *} 
  EMail = "[email protected]"  {* your return address *}
  ... 
}

端口在 Oberon.Mail.Mod 中可见。

安装 stunnel 并按照此示例进行配置。服务器名称和端口,例如 my.email.server:995,应根据智能主机文档进行调整。

# localhost:/etc/stunnel/stunnel.conf
# Example SSL client mode services 
[pop3] 
client = yes 
accept = localhost:110 
connect = my.email.server:995

假设系统应该启动 stunnel。在 Debian 11 中,一个 bug 会干扰自动启动。/etc/crontab 中的此行可能有效。

@reboot root /bin/stunnel

如果一切都没有效果,则使用 root 权限交互式地启动 stunnel,并提交针对 stunnel 包的错误报告。

使用 NetSystem.SetUser 设置 POP 身份验证,如以下示例所示。

NetSystem.SetUser pop:myEmailID:[email protected] ~

原始 SetUser 命令假设 @ 字符不会出现在 myEmailID 或 myEmailPassword 中。例如,此命令将失败。

NetSystem.SetUser pop:[email protected]:[email protected] ~

通过在 SetUser 命令中进行更彻底的解析来解决此问题。在 ETH Oberon 中检索修订后的 NetSystem.Mod;在 A2 中检索 Unix.Oberon.NetSystem.Mod。编译模块。在 ETH Oberon 中。

Compiler.Compile NetSystem.Mod ~

在 A2 中,应用编辑器中的编译按钮(菜单 Files > Files > Unix.Oberon.NetSystem.Mod > MM MM)或在以下命令上使用 MM。

Compiler.Compile Unix.Oberon.NetSystem.Mod ~

根据特定系统的文档安装主机上的 Exim,例如 DebianFedora/CentOS 等。[2] Exim 根据密码文件对智能主机进行身份验证。[3] 特定邮件服务器的配置细节可能很模糊。例如,服务器可能无法指定 STARTTLS连接时的 TLS。在尝试配置 Exim 之前,最好使用 Swaks 解决歧义。将 Swaks 选项 -au、-ap、-f 和 -t 的参数替换为用户、密码和电子邮件地址的相应值。参考优秀的 手册 了解详细信息。ISP 通常使用的用户 ID 模式是 [email protected]

swaks -tls \
      -ao -apt -au [email protected] -ap r2d2\$8Ch \
      -s my.smarthost.com --port 587 \
      -f [email protected] -t [email protected]

示例密码有八个字符;\ 不包含在密码中,但可以防止主机 shell 错误解释 $8。[4] Swaks 自动创建一个简单的测试消息。可以调整选项参数,直到传输成功。根据上面的讨论,在 Oberon 中确认接收消息,以确认传输成功。

新闻阅读器

[编辑 | 编辑源代码]

待补充说明。

这些表格显示了内存中表示 Text 的记录结构。当 Texts.Store() 将 Text 记录到 文件 中用于 存储介质 时,记录结构中的信息将被 序列化。在逆过程中,Texts.Load() 将信息反序列化到内存中 Text 的记录结构。

TextDesc 是 Objects.ObjDesc 的扩展。添加到 TextDesc 的字段通过不同的背景颜色与从 ObjDesc 继承的字段区分开来。

类型 Text
类型 字段的
TextDesc
字段类型 备注
Texts.Text,指向 Texts.TextDesc 的指针 stamp LONGINT 整数
dlink Objects.Object 指针
slink Objects.Object 指针
lib Objects.Library 指针
ref INTEGER  
handle Objects.Handler 指针
len LONGINT 文本长度。
obs Objects.Library 指针
trailer Texts.Piece 指向 哨兵节点 的指针,该节点位于片段列表中。
org LONGINT 最后找到片段中第一个字符的偏移量,位于 [0,len) 中。
pce Texts.Piece 最后找到的片段。
上表中的 Objects.Library
类型 LibDesc 字段 字段类型 备注
Objects.Library,指向 LibDesc 的指针 next Objects.Library 指针
ind Objects.Index 指针
f Files.File 指针
R Files.Rider 指针
name Objects.Name  
dict Objects.Dictionary 指针
maxref INTEGER  
GName POINTER  
Texts.Piece
类型 PieceDesc 字段 字段类型 备注
Texts.Piece,指向 Texts.PieceDesc 的指针 f Files.File 指针
off LONGINT 整数
len LONGINT  
obj Objects.Object 指针
lib Objects.Library 指针
ref INTEGER  
col SHORTINT  
voff SHORTINT  
prev Piece 指针
next Piece 指针

Texts.FindPiece 和缓存

[编辑 | 编辑源代码]

对于给定的 Text T 和位于 [0, T.len) 中的偏移量 pos,过程 Texts.FindPiece 的任务是定位包含 pos 的片段。在每次执行时,FindPiece 可以从偏移量 0 开始,并累加片段的长度,直到找到包含 pos 的片段。基于 T.pce 和 T.org 的缓存可以提高效率。当 FindPiece 完成搜索时,指向找到片段的指针将被记录在 T.pce 中;该片段第一个字符的偏移量将被记录在 T.org 中。FindPiece 的下一次执行将从该缓存位置开始。由于 FindPiece 的结果通常接近上一次的结果,因此这种策略避免了从第一个片段开始的重复长度累加。

ETH Oberon 中的 Text 数据流

[编辑 | 编辑源代码]

这个 数据流 示例说明了 Oberon Text、HTMLASCII 文本之间的关系。

包含
非文本特征的 Oberon 文本
Oberon
Edit.StoreAscii
命令
省略非
-文本特征的 Oberon 文本
      省略非
-文本特征的 Oberon 文本
Oberon
MediaWiki.Markup
命令
 
Oberon
Desktops.OpenDoc
命令
     
Oberon
鼠标
复制
包含颜色
和样式的 MediaWiki 标记,但
省略了超链接
和图像
MediaWiki
处理器
包含文本颜色
和样式的 HTML5 文本
网页
  浏览器  
   浏览器   
  文本
剪贴板或
保存操作
ASCII

文本文件

文本颜色和样式、图像和超链接在将浏览器文本转换为 ASCII 时会丢失。因此,最右边的 Oberon 文本与纯 ASCII 文本具有相同的显示效果。文本颜色和样式可以帮助阅读和理解源代码,但编译不受颜色和样式的影响。

潜在发展

支持 触摸屏

模块源代码

[编辑 | 编辑源代码]

ETHZ 的 ETH_Oberon 的最后一个版本是 2.3.7。在启动时,系统将在 System.Log 中宣布发布日期 2003-01-05[5]Sourceforge 上有文件 "Native Oberon 2.3.7 Alpha/NativeOberon_2.3.7.tar.gz" 和可引导安装映像 "Oberon0 boot disk/"。包结构位于 Native.Tool 中。源代码也可以在 https://github.com/schierlm/NativeOberon-2.3.6-Extracted 的目录 FullInstall_ASCII 中找到。源代码和工具仍然受 ETH Oberon 许可证 的约束。

系统包中的模块源代码

[编辑 | 编辑源代码]

系统包包含大约 170 个模块。请参考 Native.Tool 版本 2.3.7 备注
Wikibook 变体[6] Wikibook 变体[6] ATADisks.Mod
添加了对 Compact Flash 的支持。
Compiler.Mod Compiler.Mod Dialer.Mod
Dialer.Dial 已修改为支持由 mgetty 提供的回铃协议。请参考 Dialer 页面。
DisplayLinear.Mod
Displays.Display.Mod
Displays.Mod
Empty.Display.Mod Empty.Display.Mod
FTP.Mod
GD54xx.Display.Mod GD54xx.Display.Mod
Input.Mod Input.Mod
Mail.Mod
NetSystem.Mod
OGLDisplay.Mod
Objects.Mod
PPPDebug.Mod PPPDebug.Mod
PPPFSM.Mod PPPFSM.Mod
PPPHDLC.Mod PPPHDLC.Mod
PPPIPCP.Mod PPPIPCP.Mod
PPPLCP.Mod PPPLCP.Mod
PPPMain.Mod
PPPPAP.Mod
PPPTest.Mod PPPTest.Mod
PPPTools.Mod
PSPrinter.Mod
S3C805.Display.Mod
S3C924.Display.Mod
S3Trio.Display.Mod
SVGA.Display.Mod
Texts.Mod
VGA.Display.Mod

W32.Display.Mod

Gadgets 包中的模块源代码
系统包包含大约 170 个模块。请参考 Native.Tool [编辑 | 编辑源代码] 备注
Wikibook 变体[6]
Display3.Mod
Input.Mod Input.Mod
Displays.Colors.Mod
FTPDocs.Mod

HTMLDocs.Mod

Apps1 包中的模块源代码
系统包包含大约 170 个模块。请参考 Native.Tool [编辑 | 编辑源代码] 备注
Wikibook 变体[6]

GfxDisplay.Mod

Apps2 包中的模块源代码
系统包包含大约 170 个模块。请参考 Native.Tool [编辑 | 编辑源代码] 备注
Wikibook 变体[6] Wikibook 变体[6]
HTML.Mod

Sort.Mod

Documentation 包中的模块源代码
系统包包含大约 170 个模块。请参考 Native.Tool [编辑 | 编辑源代码] 备注
Wikibook 变体[6]

Examples.Mod

Build 包中的模块源代码
系统包包含大约 170 个模块。请参考 Native.Tool [编辑 | 编辑源代码] 备注
Wikibook 变体[6]
DisplayMach64.Mod
DisplayTool.Mod
DisplayVGA4.Mod
S3TrioC.Display.Mod
SVGAH.Display.Mod
SVGAL.Display.Mod

Trace.Display.Mod

Lab 包中的模块源代码
系统包包含大约 170 个模块。请参考 Native.Tool [编辑 | 编辑源代码] 备注
Wikibook 变体[6]


DisplayBackdrop.Mod

附加模块的源代码
系统包包含大约 170 个模块。请参考 Native.Tool [编辑 | 编辑源代码] 备注
Wikibook 变体[6] MediaWiki.Mod

将 Oberon 文本转换为 MediaWiki 标记。

[编辑 | 编辑源代码]
系统包包含大约 170 个模块。请参考 Native.Tool 维基教科书变体[6] 备注
Oberon.Text Oberon.Text 根据当地要求和偏好进行编辑。
References.Text
系统包包含大约 170 个模块。请参考 Native.Tool 维基教科书变体[6] 备注
Compiler.Tool    
FTP.Tool    
Native.Tool    
PPP.Tool    
Sort.Tool    
Tutorials.Tool    
  1. 对于 ETH Oberon,LAN 上的主机可以提供 Exim 和 Stunnel。对于 A2 中的 Oberon 子系统,Exim 和 Stunnel 可以运行在本地主机上。
  2. 主要的 Exim 文档 也可用。
  3. 在 Debian 中,/etc/exim4/passwd.client 将密码与每个 (主机,用户) 对关联。多个 host:user:password 规范是可接受的。该文件不确定 exim 用于发送邮件的目的地。请参阅 exim4-config_files 手册
  4. 在 Oberon 中不涉及 转义字符
  5. ISO 8601 日期格式。
  6. a b c d e f g h i j 使用 Oberon 中的 Diff.Do 或 首页上描述的 MediaWiki 功能 比较 ETHZ 和维基教科书源代码。
华夏公益教科书