跳轉到內容

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://

為了自動定位到主目錄,將此行追加到 ~/.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 = "me@my.domain.name"  {* 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 = "me@my.domain.name"  {* 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:myEmailPassword@my.email.server ~

原始 SetUser 命令假設 @ 字元不會出現在 myEmailID 或 myEmailPassword 中。例如,此命令將失敗。

NetSystem.SetUser pop:me@my.domain.name:r2d2$8Ch@my.email.server ~

透過在 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 模式是 me@my.authentication.domain。

swaks -tls \
      -ao -apt -au me@my.authentication.domain -ap r2d2\$8Ch \
      -s my.smarthost.com --port 587 \
      -f me@my.email.address -t me@my.email.address

示例密碼有八個字元;\ 不包含在密碼中,但可以防止主機 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 和華夏公益教科書原始碼。
華夏公益教科書