跳轉到內容

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 的 說明文件
華夏公益教科書