跳转到内容

Oberon/A2

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

ETHZ 的 Gitlab

安装和运行 A2

[编辑 | 编辑源代码]

UnixAOS 和 A2 可以安装并使用在裸机 PC 上,包括被认为对商业操作系统过时的台式机和笔记本电脑。这些 Oberon 风格的系统也可以作为 ARMMS Windows类 Unix 系统上的子系统运行。

安装和运行 UnixAOS

[编辑 | 编辑源代码]

安装 UnixAOS 的原始说明[1] 位于 http://user.informatik.uni-bremen.de/fld/UnixAos/Readme.txt。安装文件可从 http://user.informatik.uni-bremen.de/fld/UnixAos/ 获取。

新安装的 LinuxAos 通用 32 位版,rev.9527 的显示。

shell 脚本安装程序假定主机中存在 sys 组。对于缺少此组的系统,脚本很容易进行调整。例如,以下行:

chgrp -R sys ${aosdir}

可以更改为以下内容。

chgrp -R bin ${aosdir}

UnixAOS 工作目录可以在可移动闪存存储器上具有 ext2FAT 文件系统。

10272 之前的版本

[编辑 | 编辑源代码]

系统的默认目录为 /usr/aos。默认情况下,install.UnixAos 安装启动脚本 /usr/bin/aos。aos 脚本在启动 aos.{solaris,linux,darwin} 之前调整操作系统环境。如 Readme.txt 中所述,UnixAos 可以使用以下两个命令启动。[2]

cd <myWorkingDirectory>
aos

<myWorkingDirectory> 必须替换为特定的目录名称。

10272 版本

[编辑 | 编辑源代码]

系统的默认目录为 /usr/local/A2,默认启动脚本为 /usr/local/bin/a2。A2 可以使用以下命令启动。

cd <myWorkingDirectory>
a2

与早期版本一样,<myWorkingDirectory> 代表特定的目录名称。

UnixAOS 的用户和机器特定配置

[编辑 | 编辑源代码]

UnixAos 由 Configuration.XML 配置。Oberon 子系统由 Oberon.Text 配置;请参考 ETH Oberon 页面 和原始的 betadocu 页面。

Firefox 和 A2 以及 Weston 和 XWayland 在具有双屏幕的 Debian 10 系统上。

如果工作目录位于可移动存储器上,则 myaos 脚本 允许存储设备在配置不同的多台机器上使用。当存储设备尚未挂载时,会作为预防措施应用 e2fsck[3] 如果文件系统已损坏,e2fsck 通常会完成修复。myaos 脚本的合理位置是用户的 home 目录。对于每个主机,在工作目录中创建文件 Configuration.<host>.XML。要使用 Oberon 子系统,请创建 Oberon.<host>.Text。这可以通过复制安装的文件并编辑副本完成。例如,名为 blunder 的主机需要 Configuration.blunder.XML 用于 A2 以及 Oberon.blunder.Text 用于 Oberon 子系统。XML 文件包含 ASCII 文本,可以使用 Linux 中的 Geanygeditmousepad,或者 A2 中的 Edit > Text 进行编辑。安装的 Oberon.Text 包含一些二进制信息。[4] 在 ETH Oberon 中,它通常会使用 Edit 或 ET 进行编辑。不过,纯文本也可以工作。使用 ET.StoreChar 保存 Oberon.Text 后,可以使用 Linux 中的 Mousepad 或 Gedit、MS Windows 中的 Notepad 以及 MacOS 中的 Atom 进行编辑。这可以解决文件名 Oberon.<Host>.Text 超过 Oberon 系统 32 个字符限制的难题。myaos 将 Configuration.blunder.XML 复制到 Configuration.XML 以及 Oberon.blunder.Text 复制到 Oberon.Text,然后再启动 UnixAos。

A2 仓库

[编辑 | 编辑源代码]
ETHZ Gitlab 中 A2 主页的屏幕截图。

几个平台的源代码和可执行文件的原始仓库是基于 Apache Subversion (SVN) 的。基于 Git 的当代 仓库 从 SVN 版本 10270 的文件开始。虽然 Git 存档是当前的,但 SVN 的说明 仍然可用。

仓库提供最新版本并允许持续更新。从用户的角度来看,此方法基于仓库的本地副本。本地副本是通过从 ETHZ 克隆创建的。在本地副本中,可以为目标平台(包括裸机 PC)构建 A2 可执行文件。Windows、Linux(Intel 32 位和 64 位)和 ARM 的子目录中的可执行文件可用。仓库将占用 0.5+ GB,具体取决于是否包含可执行文件。

与 ETHZ 无关的用户可以获取 Github 帐户。Github 登录 将允许访问包括 问题 在内的设施。

类 Unix 系统中的 Git

[编辑 | 编辑源代码]
Git 操作。有关详细信息,请参阅文中的链接。

维基百科文章 提供了有用的概述。 官方文档 可作为 参考手册 提供,包括手册页和 Pro Git 书籍。 git-lfs 的文档 单独提供。

每个 Linux 都有一个 Git 安装程序,各种程序的流程 在 Git 网站上进行了总结。还提供特定版本的发布信息。对于 Debian Linux,请参阅 UsingGit wiki 页面。如果 apt 可用,以下命令就足够了。

# apt install git
# apt install git-lfs

存储库目录的名称是任意的。“A2” 用于此示例。ls 命令可以避免名称冲突。

# ls -ld A2
drwxr-xr-x 12 me mygroup 4096 Dec  5 09:22 A2

创建本地存储库。

# git clone https://gitlab.inf.ethz.ch/felixf/oberon.git A2

从源代码更新本地存储库,主分支。

# git pull origin main

在 MS Windows 中检查您拥有的内容。

dir /ad *

在 Linux 中检查您拥有的内容。

ls -d *

输出应与以下类似。

AosVM  LanguageReport  Linux32  source  UnixAos  Win64
ARM    license.txt     Linux64  tools   Win32    WinAos

使用 git-lfs 跟踪一些 zip 存档。

# cd A2
# git lfs track "Linux*.zip"
# git add .gitattributes

检查哪些大文件正在跟踪。

# git lfs track
Listing tracked patterns
    ARM/ARM.A2/*.bin (ARM/ARM.A2/.gitattributes)
    Linux32.zip (.gitattributes)
    Linux64.zip (.gitattributes)
    LinuxARM.zip (.gitattributes)
    Win32.zip (.gitattributes)
    Win64.zip (.gitattributes)
    *.bin (.gitattributes)
    Linux*.zip (.gitattributes)
Listing excluded patterns

检索特定的存档文件。

# git lfs fetch Linux64.zip
fetch: Fetching reference refs/heads/main

验证 zip 存档是否存在。

# ls -ld Linux64*
-rw-r--r-- 1 root root 23712521 Dec  5 09:19 Linux64.zip

解压缩。

# unzip Linux64
 Archive: Linux64.zip
    creating: Linux64/
    creating: Linux64/work/
   inflating: Linux64/oberon.ini
    creating: Linux64/bin/
   inflating: Linux64/Kernel.GofU
   inflating: Linux64/OpenTypeScan.SymU
   inflating: ...

执行启动脚本。

# Linux64/a2.sh

# cd Linux64 ; ./a2.sh
LinuxA2 通用 32 位,rev.9799 从 Git 存储库启动。

a2.sh 的内容可以通过 "cat a2.sh" 或编辑器显示。该脚本执行两个操作。“cd `dirname $0`" 切换到 a2.sh 所在的目录;例如 ~/A2/Linux64。然后 "./oberon run a2.txt" 执行 Linux 命令 "oberon",参数为 "run" 和 "a2.txt"。a2.txt 包含 A2 命令,可以通过 cat 和编辑器显示。第一个命令执行 oberon.ini 中的命令,包括

Files.SetWorkPath work~

在已安装的系统中,工作区是空的。可以根据用户的喜好编辑 oberon.ini。

Files.SetWorkPath /home/me/myWorkingDirectory~

MS Windows 中的 Git

[编辑 | 编辑源代码]

Git 可直接从 官方网站 获取。

模块命名

[编辑 | 编辑源代码]

上下文和别名

[编辑 | 编辑源代码]

在 A2 中的源代码中,系统和 Oberon 子系统之间的区别被称为上下文。在源代码模块的文本中,根据 Oberon (2019) 语言报告 的“5 模块”部分确定上下文。

Module := 'MODULE' [TemplateParameters] Identifier 'IN' Identifier ';' ...

在模块范围内,导入模块的名称可以使用 别名,这种语法也适用于上面提到的部分。

Import = Identifier [':=' Identifier] ...

Unix.Oberon.NetSystem.Mod 说明了上下文和别名。

MODULE NetSystem IN Oberon;

IMPORT S := SYSTEM, IP IN A2, DNS := DNS IN A2, TCP := TCP IN A2,  UDP := UDP IN A2, Texts, Oberon, Input, Fonts, Strings, Out;

目标系统和文件名扩展

[编辑 | 编辑源代码]

编译、加载、链接和相关的术语在 https://people.inf.ethz.ch/felixf/pdfs/2011_UnifiedStaticDynamicLoading.pdf 中讨论。与所有 Oberon 系统一样,指定模块的文件名可以与模块的名称不同。这些文件名扩展在 A2 中是惯例。

目标系统 通用[5] 对象文件名扩展 符号文件名扩展
Unix,x86,32 位 .GofU .SymU
Unix,AMD64,64 位 .GofUu .SymUu
Windows,x86,32 位 .GofW .SymW
Windows,AMD64,64 位 .GofWw .SymWw
ARM,32 位[6] .GofA .SymA
ARM,64 位 .GofAa .SymAa

对象和符号文件名

[编辑 | 编辑源代码]

对象和符号文件名包含上下文,上下文与模块名称之间用减号分隔。减号不能用作 Oberon 中的有效名称。因此,Oberon 系统模块的对象和符号文件分别命名为 Oberon-System.GofU 和 Oberon-System.SymU。

从存储库启动

[编辑 | 编辑源代码]

如果 A2 存储库根据上面的说明就位,则 A2 可以运行。

识别支持的体系结构。

cd <somewhere>/A2/

在 MS Windows 中。

dir /ad *

在 Linux 中。

ls -d *

输出应与以下类似。

AosVM  LanguageReport  Linux32  source  UnixAos  Win64
ARM    license.txt     Linux64  tools   Win32    WinAos

查看启动过程。在 MS Windows 中。

dir /ad Win32/*

在 Linux 64 中。

ls -ld Linux64/*
2022-10-31 的 LinuxA2,通用,32 位的启动显示。

oberon 文件必须可执行。执行启动脚本。适用于运行 MS Windows 的 32 位机器。

./Win32/a2.bat

适用于运行 Linux 的 64 位机器。

./Linux64/a2.sh

cd Linux64 ; ./a2.sh

应出现右侧的窗口。

工作目录

[编辑 | 编辑源代码]

oberon.ini 包含 A2 命令,包括

Files.SetWorkPath work~

在已安装的系统中,工作区是空的。根据工作目录的偏好编辑 oberon.ini。例如

Files.SetWorkPath /home/me/myWorkingDirectory~

用户级应用程序

[编辑 | 编辑源代码]

各种文档和应用程序可通过 A2 显示屏左下角的菜单获得。注意演示和文档 > 程序演示。

安全外壳控制台

[编辑 | 编辑源代码]

在目标系统、本地主机或外部系统中,安装 SSH 服务器。这是一种可能性。

sudo apt install openssh-server

在 A2 菜单中调用工具 > 安全外壳。对于主机,指定 "localhost" 或 "127.0.0.1"(不带引号)或外部机器的名称或地址。指定您的用户 ID。单击连接。在提示时提供您的密码。

电子邮件

[编辑 | 编辑源代码]

使用 IMAP 的邮件客户端位于应用程序 > 邮件客户端。Oberon 子系统有 Mail.Panel 支持 POP、POP3 和 SMTPETH Oberon 的说明和说明 适用。

Oberon 子系统

[编辑 | 编辑源代码]
UnixAos 上的 Oberon 子系统,在 XO-1.5 上。

在 A2 屏幕的左下角,菜单工具 > Oberon 和开发 > Oberon 全屏允许交互式启动 Oberon 子系统。

子系统也可以通过 Configuration.XML 的自动启动部分中的命令或命令打开。在 UnixAos,修订版 4929 中,Configuration.XML 中有这些行。

<Section name="Autostart">
	...
	<Setting name="OberonDisplay" value="OberonDisplay.Install Oberon 1100x704 0 74 ~"/>		
	<Setting name="OberonStart" value="Oberon.Call System.Init Oberon"/>

这在更新的版本中[7]

<Section name="Autostart"> 
	... 
	<Setting name="Start an Oberon" value="Oberon.Start Oberon 1100x704 0 74 ~"/> 

尺寸 1100x704 可根据需要调整,以便在查看器中获得文本的最佳比例。如果通过鼠标抓住右下角拉伸 Oberon 窗口,则文本与查看器的比例会保持不变。

鼠标的使用方式不寻常,但效率很高。学习使用鼠标绝对值得花费一小点时间。拥有三个按钮或两个按钮和滚轮的鼠标几乎是必不可少的。<Esc> 键用于中断任务。例如,它可以中断长时间运行的 FTP.GetFiles。<F1> 设置 * 标记。<F2> 清除所有标记。如果意外按下鼠标按钮,则在释放任何按钮之前一起按下的所有鼠标按钮都不会生效。有关鼠标和键盘输入和使用方式的完整详细信息,请参阅 鼠标支持鼠标教程键盘支持 页面。

Oberon 中的 Telnet 控制台

[编辑 | 编辑源代码]

Telnet 是一种不安全的协议,但它在 Oberon 子系统中提供了一个主机控制台。ETH Oberon 说明 适用于 Oberon 子系统。

Oberon 中的新闻阅读器

[编辑 | 编辑源代码]
News.Tool 的屏幕截图。

与邮件服务器一样,新闻服务器现在也需要身份验证。因此,需要对 NetSystemNews 模块进行修订以支持身份验证。编译修订后的模块。

TextDesc 是 Objects.ObjDesc 的扩展。添加到 TextDesc 中的字段与从 ObjDesc 继承的字段不同,它们具有不同的背景颜色。

文本类型
类型 字段的
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 指针

模块源代码、工具和配置文本

[编辑 | 编辑源代码]

A2 中大约 2000 个源代码的示例。

当代 Firefox 浏览器尝试从 扩展名 推断“内容类型”。默认情况下,Firefox 错误地推断出源文件 *.Mod 包含“Amiga SoundTracker 音频”,并且无法打开它。通过调整 Firefox 与“内容类型”关联的“操作”可以解决此问题。打开 汉堡菜单 > 设置 > 常规 > 应用程序。对于“Amiga SoundTracker 音频”,选择一个编辑器,例如 /usr/bin/mousepad 或 /usr/bin/gedit。A2 中的大多数源代码已转换为 纯 ASCII 文本;一些仍然是 Oberon 文本。Gedit 可以打开所有这些。Mousepad 和其他几个编辑器无法打开 Oberon 文本。“纯文本文档”的内容类型也应设置为所选编辑器。通过这些调整,Firefox 应该可以打开存储库中的大部分文件。

在某些情况下,用户可能无法找到浏览器配置来打开存储库中的文件。无论如何,浏览器应该打开 Wikibook 复制品。

ETHZ 存储库 Wikibook[8] 注释
BIOS.V24.Mod BIOS.V24.Mod  
BootManager.Asm BootManager.Asm BootManager 源代码,由 André Fischer 使用网络汇编编写。
BootManager.Mod BootManager.Mod 包含一个命令 Split 的模块。[9]
BootManager.Text BootManager André Fischer 编写的说明性文档。在存储库和 MediaWiki 表示中。
BootManager.Tool BootManager.Tool 总结说明性文档的工具文件。
Oberon.Configuration.Mod    
Configuration.XML  
Oberon.Desktops.Mod    
Oberon.Documents.Mod Oberon.Documents.Mod  
Oberon.ET.Mod    
Oberon.Files.Mod    
Oberon.Gadgets.Mod Oberon.Gadgets.Mod  
Oberon.HTML.Mod Oberon.HTML.Mod 符合 HTML5 的修订。
  HTML.Tool ETH 存储库中没有“预览”。
Oberon.HTMLDocs.Mod Oberon.HTMLDocs.Mod InitEntities() 已扩展以支持更多字符。
Oberon.ISO9660Files.Mod    
Oberon.ISO9660Volumes.Mod    
Oberon.MIME.Mod Oberon.MIME.Mod  
Oberon.Mail.Mod Oberon.Mail.Mod 偏离 SMTP 已修正。添加了 Wrap()。类型名称已修订。修订了 Show()。cont.len 的计算已修正。
Oberon.MultiMail.Mod Oberon.MultiMail.Mod
Oberon.News.Mod Oberon.News.Mod 添加了身份验证以允许访问当代服务器。
  Oberon.MediaWiki.Mod 不在 A2 存储库中。
Oberon.Objects.Mod    
Oberon.Out.Mod Oberon.Out.Mod 允许使用 标志 变量延迟执行 Append。
Oberon.Out1.Mod 允许使用过程变量延迟执行 Append。
Oberon.OutStub.Mod Oberon.OutStub.Mod  
Oberon.QuotedPrintable.Mod Oberon.QuotedPrintable.Mod 来自 LinuxA2 Gen. 32 位,修订版 9527 的变体。
  Oberon.RFC3986.Mod URL 的百分比编码和解码。不在 A2 存储库中。
Oberon.Sort.Mod Oberon.Sort.Mod 改进了输出的呈现。修订不完整。
Oberon.Streams.Mod    
Oberon.Strings.Mod    
Oberon.TFTPTool.Mod Oberon.TFTPTool.Mod
Oberon.TextDocs.Mod    
Oberon.TextFrames.Mod Oberon.TextFrames.Mod 删除了 LOOP。
Oberon.Texts.Mod    
Oberon.V24.Mod Oberon.V24.Mod  
Release.Oberon.Text Oberon.Text 通常 Oberon.Text 会根据用户进行自定义。
TFTP.Mod TFTP.Mod
Unix.Machine.Mod    
Unix.Oberon.NetSystem.Mod Unix.Oberon.NetSystem.Mod 改进了术语。将本地过程移出了 SetUser。更新了 RETURN 的使用方式。删除了标志“ok”。添加了标志“verbose”以简化密码调试。澄清了许多注释。
  myaos 启动脚本允许在多台机器上使用可移动工作存储。可根据用户需求进行调整。不在 A2 存储库中。

潜在的开发

[编辑 | 编辑源代码]
  • 类似于 ETH Oberon 的 TUI
  • 改进了 HTML 支持。例如,支持样式和表格。
  • 触摸屏 支持。
  1. Git 存储库(后面有描述)是一种更近期的安装和版本跟踪方法。
  2. 类 Unix 系统中的命令行前缀是用户可配置的,并且可以配置为空字符串。为简单起见,此处显示的大多数命令中都省略了前缀。
  3. 如果在系统关闭之前未卸载文件系统,则文件系统可能会损坏。目录也可能因存储介质的自然退化而损坏。如果文件系统完好无损,则 e2fsck 的执行时间可以忽略不计。
  4. 请参阅 Oberon/Text
  5. “通用”是指加载器和链接器适用于所有目标系统,与语言和运行时系统的更改无关。
  6. 允许 A2 在 树莓派 上使用。
  7. Oberon 子系统使用 MenuPage30.XML 启动。从两个命令更改为一个命令的更改由 svn diff -r 5253:5254 .../MenuPage30.XML 报告。
  8. 在某些情况下,Wikibook 复制品与 ETHZ 存储库中的最新文件不同。为了进行准确的比较,请使用文件比较器;Oberon 中的 Diff.Do,Linux 中的 comm。一些源代码有讨论页面。例如,Oberon.Mail.Mod 讨论
  9. 执行 BootManager.Split BootManager.Bin 命令将 BootManager.Bin 分割成 BootManagerMBR.Bin 和 BootManagerTail.Bin。有关更多详细信息,请参阅 André Fischer 的 说明文档
华夏公益教科书