跳轉到內容

Oberon/ETH Oberon/newfaq

來自 Wikibooks,開放世界中的開放書籍

該文件最初託管在 ETHZ。它仍然在 ETH 許可證 下,並且位於 WayBack 存檔 中。


ETH Oberon - alpha/beta 版本常見問題解答
下載

來自: ftp://ftp.ethoberon.ethz.ch/ETHOberon/Native/Update/Beta/ [已過期]

當前最新: beta00120

連結


已修復的錯誤

  1. 檔案何時從檔案系統中有效刪除?
  2. Windows 2000 問題與 Oberon 衝突
  3. 複製特定長度的檔案會導致系統凍結
  4. System3.Tool 中的按鈕顏色錯誤

已知錯誤

  1. Adaptec AIC-7861AHA-2940AU SCSI 控制器掛起
  2. 安裝期間發生 TRAP -7

看似問題,但不是問題

  1. 在具有 1024 Kb 擴充套件記憶體的機器上啟動 Oberon-0
  2. "版本不相容" 錯誤
  3. Oberon-0 磁碟上的引導病毒
  4. Intel Pentium F0 0F 錯誤

一般問題

  1. 給新手一些關於如何開始使用 Oberon 的建議
  2. 解釋 Oberon 的編號方案
  3. ETH Oberon 系統的歷史背景是什麼?
  4. 我在哪裡可以找到有關 Oberon-0 的資訊?
  5. 如何從多工處理的角度來描述 Native Oberon?
  6. 是否計劃釋出新的 ETH Oberon 版本?
  7. 是否計劃釋出具有整合開發環境 (IDE) 的 ETH Oberon 版本,類似於 CodeWarrior、Visual C++ 或 Visual Basic?
  8. Aos 與 Native Oberon 有什麼區別?

硬體支援

  1. 是否有可用的 Native Oberon 磁碟演示?
  2. 支援哪些硬體?
  3. 是否有用於編寫驅動程式的 SDK?
  4. 我可以使用 ... Intel 克隆 / 非美國鍵盤 / 雙按鈕滑鼠 / AGP / USB / 點陣印表機嗎?
  5. 我可以使用 ... EIDE 和 SCSI 結合 / ZIP / SCSI CD-ROM / 可錄製 CD 驅動器嗎?
  6. 我可以使用 ... 模組化磁碟 / 片上磁碟嗎?
  7. 我可以將 Oberon 安裝到快閃記憶體中嗎?
  8. 是否支援電源管理?
  9. 舊機器中安裝的哪些裝置可能有效?

安裝

  1. 我需要花多少時間才能讓 Native Oberon 系統執行?
  2. 我應該如何在機器上設定 BIOS?
  3. 我可以從大於 8GB 的磁碟上的任何分割槽引導 Oberon 嗎?
  4. 我可以不重新分割槽就安裝 Oberon 嗎?
  5. 我可以從硬碟安裝 Oberon 嗎?
  6. 選擇 HD 驅動程式時系統掛起
  7. Partitions.Show 指示硬碟讀取錯誤
  8. Oberon 在 Partitions.Show 中如何分配驅動器磁碟機代號?
  9. 如何使用使用者名稱、密碼、域名訪問網路服務?
  10. 如何將 Oberon 安裝到索尼 VAIO 上?
  11. 啟動期間的奇怪的莫爾斯電碼式蜂鳴聲是什麼意思?

啟動磁碟

  1. 為什麼建立 Oberon0 啟動磁碟會導致錯誤?
  2. 如何為現有 Oberon 建立啟動磁碟
  3. 如何建立現有 Oberon(分割槽)的映像檔案

系統啟動

  1. 顯示 "OBE" 後系統掛起
  2. 從 LILO 引導時,顯示 "OBE" 後系統掛起
  3. 配置檔案 Oberon.Text 有多特殊?
  4. 自定義 Oberon.Text 後系統無法重新啟動
  5. 啟動時發生 Oberon.Text 錯誤
  6. 啟動時系統掛起並出現黑屏

系統關機

  1. 關機後系統鎖定

編譯器(一般)

  1. 我可以獲得目標檔案的反彙編程式碼嗎?
  2. 是否有用於其他開發環境的 Oberon 編譯器?
  3. 如何為新架構編寫後端: ETH Oberon 編譯器

檔案系統

  1. 如何使用最少兩個分割槽來組織系統
  2. 隨著檔案數量的增加,檔案搜尋會變慢嗎?
  3. 檔案垃圾回收何時發生?
  4. 如何將檔案定向到正確的檔案系統
  5. 如何掛載 FAT16 分割槽
  6. 如何訪問備份磁碟
  7. 檔名最大長度是多少?
  8. 如何在臨時檔案中快取資料
  9. 我可以在 Oberon 中處理 *.zip 存檔嗎?

軟體開發

  1. 使用 Watson 獲取的模組定義 ( .Def) 的語法是什麼?
  2. 模組 SYSTEM 的定義在哪裡?
  3. Oberon 在 SYSTEM 中是否公開了足夠的系統功能?
  4. 如何強制 Oberon 進入“輸入模式”?
  5. 如何以所需的精度輸出實數值?
  6. 如何比較過程變數?

PCI 檢測

  1. 如何解釋使用 PCI.Mod 獲得的值?

Oberon 文字

  1. 如何區分下劃線和連字元?
  2. 可以修補下劃線嗎?
  3. 如何使用游標移動鍵?
  4. 如何只使用小寫字母編寫 Oberon 原始碼?

使用 Gfx 進行 2D 圖形繪製

  1. 如何在 Leonardo 中加速文字繪製?

超文字文件

  1. 如何儲存瀏覽過的文件的原始碼?
  2. 如何清除快取?

Postscript 檔案

  1. 如何列印 Postscript 檔案?
  2. 是否有類似於 Postscript 檔案檢視器的工具?

I/O 埠控制

  1. 如何控制序列埠?
  2. 如何控制音效卡?
  3. 如何控制並行埠: 序列和並行埠支援
  4. 如何控制 USB 埠: USB 支援
  5. 如何在揚聲器上發出簡單的聲音: 揚聲器支援

小工具

  1. 如何在小工具 TextField 中突破 64 個字元的限制?
  2. 如何在使用者介面中插入影像?
  3. 如何在 System3.Tool 的下拉選單中新增專案?
  4. 如何建立類似於 System3.Tool 中的下拉選單?

Linux Native Oberon

  1. 使用操作碼 OUT 時發生 TRAP
  2. 如何使用 Linux 音效卡驅動程式?
  3. 如何將螢幕尺寸從當前的 1024x768 畫素縮小?

Oberon for Linux (x86)

  1. 如何將螢幕尺寸從當前的 1024x768 畫素縮小?

VNC 客戶端

  1. Alt 鍵不起作用
  2. 向下箭頭鍵不起作用
已修復的錯誤
  1. 當我從 AosFS 卷中刪除檔案時,該空間不會釋放,直到卷被解除安裝然後再重新掛載。例如,如果我有一個已滿的 AosFS 格式的軟盤,我掛載該卷並刪除所有檔案,然後嘗試將檔案複製到這個“空的”軟盤,結果是出現一個陷阱,指出該卷已滿。如果我解除安裝軟盤然後再重新掛載,我就可以將檔案複製到該卷中。這是個疏忽嗎,還是出於某種原因這樣做的?
    A: 這是從 Project Oberon 中釋出的 Ceres 檔案系統繼承來的。該檔案系統僅在啟動時執行垃圾回收,此時我們確定沒有開啟的檔案。這極大地簡化了垃圾回收器。舊的 Native 檔案系統也是如此。當前的 beta 版本對匿名檔案進行了動態垃圾回收。
  2. Windows 2000 問題。如果在安裝一個(或多個)Native Oberon 後安裝 W2,它會認為它找到了一個損壞的 FAT32 分割槽,並透過寫入前幾個扇區來修復它,過了一會兒 W2 就掛起了。再見 Oberon 分割槽!無論分割槽型別如何,無論是 76(新)還是 79(舊)都會發生這種情況。如果在安裝 W2 後安裝 Oberon,則在下一次啟動時,W2 會崩潰並出現“未處理的異常”。沒有 W2,Oberon 也無法完整保留。
    A: Partitions.Format 現已修復,以解決 Windows 2000 安裝程式中的錯誤,該錯誤會導致它將 Native Oberon 分割槽“識別”為 FAT 分割槽。
  3. 奇怪的錯誤:建立一個文字檔案,名為“c11936”,包含正好 11936 個位元組,然後執行;
    DOS.CopyTo "c:/" c11936 ~
    系統凍結,但沒有出現陷阱。Ctrl-Break 可以恢復。如果檔案包含 11935 或 11937 個字元,則不會出現問題。DOS.CopyTo 從未在其他任何檔案中失敗。
    A: 問題實際上出在正常檔案系統中。它從 Project Oberon 中釋出的第一個 Oberon 系統開始就存在。當 Files.ReadBytes 讀取超出大小為 n*2048-352(對於任何整數 n > 0)的檔案末尾時,騎手的 .res 欄位將被錯誤地設定。這會導致 DOS.Copy 無限迴圈。在新的 AosFS 中也會出現相同的錯誤,但發生在大小為 n*4096-568 的檔案上。這兩個錯誤現在都已修復。
  4. 使用新的 Voodoo 卡和 Vesa2 驅動程式時,System3.Tool 中的按鈕有點綠色。這是一個新功能還是錯誤?
    A: 這是一個驅動程式錯誤(直到 beta000526),現在已修復。
已知錯誤
  1. 我的計算機配備了 Adaptec AIC-7861AHA-2940AU SCSI 控制器,它掛起了。你能幫忙嗎? - Alan Freed
    A: 目前沒有線索。正在調查這個問題。
  2. 安裝期間發生 TRAP -7。
    A: TRAP -7 是處理器的“裝置不可用”異常。這意味著遇到了浮點指令,而處理器沒有實現浮點。所提到的 Cyrix Cy486SLC 沒有浮點。

    實際上,這是 Native 的一個錯誤,因為我們已切換到 zip 格式來壓縮啟動磁碟。以前可以不使用浮點來啟動系統,而浮點模擬器由 System 模組載入。要修復它,必須從引導過程中使用的 Zip 模組過程中刪除浮點運算,或者必須將浮點模擬模組與引導檔案連結。
看似問題,但不是問題
1. 從 Oberon-0 磁碟引導我的 486 筆記型電腦,該筆記型電腦有 1024 Kb 的擴充套件記憶體,結果如下:
     TRAP 14 
     ... 
     Kernel PC=9860, Kernel PC=9808, Kernel PC=10565, OFSRAMVolumes PC=461, ...
A: Oberon-0 預設情況下會建立一個 2Mb 的 RAM 磁碟。這意味著至少需要 3Mb 或更多記憶體才能進行安裝。從技術上講,Oberon 可以使用更少的記憶體執行,但這需要更新安裝程式以使用更少的記憶體。
2. 執行 Diff.Do Empty.Display.Mod GD54xx.Display.Mod ~ 會導致:
     Call error: Disk imports incompatible version of Kernel 
          GetConfig incompatible 
          WriteString incompatible
在其他檔案中也會發生這種情況。
A: 看起來你正在新系統上執行舊版本的 Diff。新的目標檔案具有與舊系統不相容的鍵。差異與開放陣列相關,這似乎由上面列出的兩個過程得到證實。
==> 你重新安裝了新系統上的 apps 包嗎?
 
3. 我在從 beta000320 版本建立的啟動磁碟中發現了一個 parity.b 引導病毒。這是一個潛在的威脅嗎?
A: 這是一個誤報。病毒檢測器通常使用啟發式方法來“檢測”病毒。在這種情況下,引導扇區看起來不像正常的 DOS 引導扇區,因此病毒檢測器認為它被病毒感染了。磁碟映像檔案在製作過程中不會被非 Oberon 機器觸碰。一些檢測器會檢測到Bloodhound.Boot 病毒。
4. 當我執行 Linux 下的 dmesg 來幫助追蹤我的 SCSI 問題時,我注意到以下一行:
     Intel Pentium with F0 0F bug - workaround enabled.
似乎我的電腦存在奔騰漏洞。我不知道核心是否檢測到這個漏洞,如果檢測到,是否會像 Linux 一樣進行解決?
A: 在 Oberon 中修復奔騰漏洞可能不是必需的。從 https://en.wikipedia.org/wiki/Pentium_F00F_bug 中對該漏洞的描述來看,該漏洞的唯一影響似乎是使機器掛起。這在多使用者作業系統中很嚴重,因為任何非特權使用者都可以使機器掛起(而不僅僅是 root 或管理員使用者)。
 
在 Oberon 中這不是問題,因為它是一個協作式的單使用者環境。如果您不堅持使用 Oberon 語言的安全部分,還有許多其他方法可以使機器掛起。
一般問題
  1. 給一個新手一些建議,如何開始學習 Oberon
    A: 假設您對使用 Oberon 程式設計感興趣,可以先閱讀 N. Wirth 和 M. Reiser 撰寫的《Oberon 程式設計》一書,以學習該語言本身。根據您的背景,這可能需要您花很少時間,尤其是在您有一些 Pascal 經驗的情況下。試試這些教程:
    • Oberon 入門 由 Günther Sawitzki 編寫 - http://www.statlab.uni-heidelberg.de/projects/oberon/Ito/ 一個德語版本 Einführung in die Programmiersprache Oberon 也已提供。這兩個教程都包含一個名為“Oberon for Pascal Programmers”的附錄。
    • Pedro G. Gonnet 為第一年計算機科學學生編寫的快速簡便的教程(德語)。
  2. 解釋 Oberon 的編號方案。
    A: 從歷史上看,Oberon 有兩個獨立維護的“分支”:V4 和 System 3。System 3 是 ETH 分支,由 Gutknecht 教授的小組和像布萊梅大學的 Günter Feldmann 這樣的外部合作者繼續積極維護。V4 由奧地利林茨大學維護。
     
    為了減少混亂,我們幾年前將“Oberon System 3”重新命名為“ETH Oberon”。
     
    ETH Oberon 的最新官方版本適用於各種平臺,始終可以透過 Sourceforge 匿名 FTP 獲取。以前在 ftp://ftp.ethoberon.ethz.ch/ETHOberon/。
  3. ETH Oberon 系統的歷史背景是什麼?
    A: 閱讀ETH Oberon 系統白皮書
  4. 我在哪裡可以找到關於 Oberon-0 的資訊?
    A: Oberon-0 可以指以下三種東西
    1. Wirth 最近出版的書籍編譯器構造中介紹的 Oberon 程式語言子集。德語版本。Oberon-0 包含一組最小的必要程式語言功能,例如賦值、語句序列、if 和 while 結構以及過程的概念。因此,該語言易於學習,並且表達能力足以指定應用程式程序。此外,該語言的簡潔性使編譯器體積小巧且效率高,這對於執行時編譯和評估非常重要。
    2. Mössenböck 教授的面向物件程式設計在 Oberon-2 中一書中介紹的經典 Oberon 系統的子集,採用面向物件風格。德語版本
    3. 用於啟動 Intel 機器以安裝 Native Oberon的最小 Oberon 系統。由 Oberon0.Dsk 生成。
    最後,Oberon-00 程式語言是 Oberon 的一個子集,它被翻譯成一個Lola 資料結構,程式由 Niklaus Wirth 編寫。
  5. 如何從多工處理的角度來描述 Native Oberon?
    A: Native Oberon 是一個單執行緒多工系統。它有兩種型別的任務:互動式任務和後臺任務。互動式任務由使用者使用滑鼠啟動的短時執行的“命令”組成,而後臺任務由系統空閒迴圈定期呼叫的“處理程式”組成。

    從傳統作業系統的角度來看,Oberon 系統只有一個駐留在單個程序中的執行執行緒。Oberon 中的過程呼叫是不可分割的執行單元(除了作為中斷處理程式安裝的過程)。

    系統範圍內的中央迴圈(Oberon.Loop)在以下兩個方面迴圈:
    1. 透過將訊息記錄廣播到螢幕上的檢視器來將事件分發給螢幕上的檢視器。這樣的廣播不過是使用包含發生的事件資訊的記錄(透過引用傳遞)呼叫每個顯示幀中安裝的處理程式過程。
    2. 呼叫後臺任務,這些任務只是包含過程指標的物件(在堆中)。該物件可以在呼叫之間儲存過程的本地狀態。安裝的任務需要避免佔用處理器(即及時將控制權返回給 Oberon.Loop),以便保持系統的響應能力。
    原始的 Oberon 系統已透過各種方式擴充套件,以允許更多工以相同優先順序執行。參見 Wirth 的“任務與執行緒”論文、Concurrent Oberon、ETHOS、Aos。
  6. 是否計劃釋出當前 Alpha ETH Oberon 的新版本?
    A: 該系統由志願者維護。ETH 開發人員現在正在開發Bluebottle 系統,因此沒有固定的釋出計劃。計劃在 2002 年底釋出新版本。它主要是一個 bug 修復和整合版本。
  7. 是否計劃釋出一個集成了類似 CodeWarrior、Visual C++ 或 Visual Basic 的整合開發環境 (IDE) 的 ETH Oberon 版本?
    A: Oberon 作業系統最初是在 80 年代後期開發的,早於上面提到的所有整合開發環境。它旨在成為一個極簡作業系統,可以在所有級別的細節中進行研究和使用。有關其基本原理,請參閱 Wirth 和 Gutknecht 撰寫的“Project Oberon”一書。Oberon 作業系統遠不止一個 IDE!

    其他小組已經建立了類似 Oberon 的環境,這些環境與 Windows 緊密整合,並且可能更像傳統的基於 Windows 的開發環境。以下是可以引用的:
    在 ETH,對於教學,系統首選的是原始的文字使用者介面,而不是 GUI 桌面或 Windows 嵌入。如果作為沒有干擾的極簡系統正確展示,這在教授程式設計方面可能會非常成功。TUI 的操作(編輯、編譯、測試)可以在一次教程中教授。
  8. Aos 與 Native Oberon 有什麼不同?
    A: 在 Aos 中,活動被對映到活動物件,這些物件在多個處理器上搶佔式排程。
硬體支援
  1. 是否提供類似 QNX 演示軟盤的 Native Oberon 演示軟盤(或 2 張軟盤或一個 CD 映象),用於測試 Oberon 並檢查我的硬體是否得到良好支援?
    A: 在 ftp://ftp.ethoberon.ethz.ch/ETHOberon/Native/Update/Alpha/ 下載 Oberon0.Dsk 和 rawrite.exe。使用 rawrite.exe 將 Oberon0.Dsk 寫入格式化的 1.44MB 軟盤,並啟動它。
  2. 支援哪些硬體?從一些文件來看,需要更多硬體支援。是否有什麼計劃?
    A: 檢視硬體相容性列表,其中包含有關如何編寫磁碟和圖形控制器驅動程式的說明,尤其是這些驅動程式。對於顯示控制器,我們有一些帶有真彩色支援的加速驅動程式(Permedia 2、S3Trio64)和一些沒有真彩色的驅動程式(S3C805、W32、GD54xx),然後是一些適用於許多卡的通用驅動程式(VGA、VESA 2.0、VESA 3.0)。一直在新增更多顯示驅動程式。
  3. 是否提供用於編寫驅動程式的 SDK?
    A: 沒有。最好的資訊來源是現有“模型”驅動程式的原始碼。目的是確定驅動程式中的最佳驅動程式,並讓這些驅動程式成為示例。
  4. 我可以使用...嗎?
    A:
  5. 我可以使用...嗎?
    A:
  6. 我可以使用...?
    A:
    • 磁碟模組 - DOM:是 - 磁碟支援

      Michael A. McGaw 關於此主題的報告
      我一直使用磁碟模組,型號為 DOM-4-40V,由 ADLink Technology, Inc 生產。這些模組本身帶有 IDE 聯結器,因此直接插在主機板的 IDE 聯結器上(不需要 IDE 線,也不需要任何特殊的安裝硬體/位置)。有一個 Molex 電源聯結器,必須連線到 PC 電源的 Molex 聯結器之一。就這樣。它們工作正常;我在 Tyan 和 DFI 主機板上使用了大量此類模組(目前用於基於 DOS 的應用程式)。它們似乎也能很好地與 Oberon 協同工作。我已經在該模組的 4 MB 版本上運行了穩定的原生版本(不是 beta 或 alpha 版本;我沒有嘗試過這些版本,儘管我認為它們也會很好)。對於此係統,我擁有非常緊湊且高效的模組組合,使我能夠進行開發,儘管這是旨在作為僅執行時的目標環境,由透過乙太網上的 UDP 與目標進行通訊的 Windows 應用程式遠端控制。您建議使用 8 MB 模組的建議很好。

    • 磁碟晶片 - DOC:否 - 磁碟支援
  7. 我可以在快閃記憶體中安裝 Oberon 嗎?
    A:不能,下載版本不行。但 Radiar 為其 C2 板上使用的英特爾 DA28F640JS 快閃記憶體 PROM 記憶體開發了定製解決方案,包括 OBL。此板是為 Colortronic 公司製造的。在該工業系統中,沒有 Gadget 的底層應用程式使用具有 1.3 MB 的檔案系統。一個簡單的帶有 Gadget 的應用程式使用不到 4 MB 的記憶體。
  8. 是否支援電源管理?參考筆記型電腦。
    A:支援簡單的電源管理。在空閒迴圈期間,Oberon 執行 HLT 指令,該指令停止處理器,直到下一個中斷(例如計時器、滑鼠或鍵盤中斷)。這節省了大量的電源。原生 Oberon 已經使用高階電源管理 (APM) 規範在關機期間關閉機器。將來,我們可能會考慮使用 ACPI。
  9. 較舊機器中安裝的哪些裝置可能有效?我想把它變成一臺專門的原生 Oberon 機器。
    A:該機器具有
    • 兩個 IDE 硬碟:標準 ATA/EIDE 驅動程式可能會成功使用。否則,可以重新啟用/重新整理早期版本中包含的標準 IDE 驅動程式,用於真正的舊控制器。不過,只能使用一個驅動器。
    • 一塊 Adaptec AVA-1505:可能無法工作。支援 AHA-1520。
    • 一塊 ATI Mach 64 顯示卡:在 1024 x 768 x 8 模式下無法工作,因為我們希望它能這樣工作。vesainfo.exe 顯示
     
    VESA 1.2 512kb ATI MACH64
     
    100 C000:4DC9 A000 W A000 R 64K 64K 640x400x8
    101 C000:4DC9 A000 W A000 R 64K 64K 640x480x8
     
    但即使如此,請閱讀有關 顯示支援 的內容。
    更一般地說,請查閱 硬體相容性列表
安裝
  1. 我需要投入多少時間才能讓原生 Oberon 系統執行起來?
    A:以下步驟所需的時間
    • 可選:組織您的機器以接受 Oberon,使其與已安裝的作業系統共存於專用分割槽中。考慮購買商業軟體以完成此步驟。其中,PartitionMagic 是一項不錯的投資。
    • 下載您選擇的實現檔案。至少 3 MB,最多 10 MB。
    • 在您的平臺上解壓縮軟體,有時需要建立啟動軟盤。這是有效的安裝過程,大約需要 10 分鐘。
    • 透過編輯 Oberon.Text 對 Oberon 系統進行自定義,遵循 System.Text 中的說明。
    • 可選:在已完全功能的程式設計環境之上安裝 Oberon 包。每個包的安裝時間不超過幾秒鐘。
  2. 我該如何在我的機器上設定 BIOS?
    A如何設定 BIOS
  3. 我可以在大於 8GB 的磁碟上的任何分割槽啟動 Oberon 嗎?
    A8.4GB 硬碟容量限制
  4. 我可以在不重新分割槽的情況下安裝 Oberon 嗎?
    A:可以,在以下情況下
    1. 針對 初學者的原生 Oberon 版本 可以安裝在具有 40MB 或更多可用空間的 FAT16 分割槽中。FAT32 支援正在開發中。 文件
    2. 基於 Linux 的原生 Oberon 可以安裝在現有的 ext2 分割槽中。
    3. 至少 40MB 的現有且完全空閒的分割槽可以專門用於 Oberon。
  5. 是否可以從硬碟啟動和安裝 Oberon?我這裡有一臺筆記型電腦,我想安裝 Oberon,但它沒有軟盤驅動器,而且我沒有 ide<->mini-ide 線(找不到供應商)。
    A:可以,但只能使用最新發布版本,不能使用新的 beta 版本。參見
    ftp://ftp.ethoberon.ethz.ch/ETHOberon/Native/DosBased/ [已過期]
    稍後 beta 版本也將支援從非軟盤介質安裝。
  6. 當我嘗試從 Oberon-0 中選擇 Adaptec 驅動程式時,系統會凍結。
    A:有時初始化驅動程式可能需要很長時間,因為會掃描 SCSI 匯流排。嘗試等待最多一分鐘以完成此操作。
  7. 我嘗試安裝新的 beta 版本,當我從 Oberon-0 啟動並使用 Partitions.Show 時,我的第一個 IDE 硬碟讀取時出現讀取錯誤 2,第二個驅動器讀取正常,但我使用 Partition Magic 4.0 在第一個驅動器上釋放了空間以安裝它。為什麼它沒有被正確讀取?
    A:在配置磁碟驅動程式之前,在 Oberon-0 中執行 System.OpenKernelLog。配置並執行 Partitions.Show 後,儲存 Kernel.Log 並將其傳輸到軟盤(參見 Install.Tool 的附錄 C),並將文字郵件傳送給我。ATA 磁碟錯誤記錄在 ATADisks.Mod 模組的末尾。
  8. Oberon 在 Partitions.Show 中如何分配驅動器磁碟機代號?
    A:自從引入可掛載檔案系統以來,就不再使用驅動器磁碟機代號了。在當前 Alpha/Beta 版本之前的版本中,透過從 C: 開始並依次掃描所有分割槽表以查詢型別為 1、4 或 6 的分割槽,將驅動器磁碟機代號分配給 FAT 分割槽。如果有多個磁碟可用,則首先掃描 IDE 磁碟,按照主磁碟、從磁碟、次主磁碟和 then 次從磁碟的順序進行掃描。然後掃描所有 Adaptec SCSI 磁碟,按照匯流排順序進行掃描,最後掃描 USB 裝置,按照初始化順序進行掃描。
  9. 我如何使用使用者名稱、密碼和域名訪問網路服務?
    A:必須在 Oberon.Text 的 NetSystem 部分配置通訊介面卡。NetSystem.SetUser 命令用於訪問服務。有許多方法可以自定義訪問過程:從偶爾訪問到更永久的設定。在以下說明中,我們假設密碼始終以不可見模式輸入,由系統提示控制。
    1. 透過其 URL 指定文件並開啟它 - 例如 ftp://user@server.domain.tld ~
      系統日誌中將顯示以下內容
      NetSystem.SetUser ftp:user@server ~
      - 未指定密碼或使用者名稱
      ftp://user@server.domain.tld 載入文件失敗
       
      現在,執行 NetSystem.SetUser 命令,並在提示符後輸入密碼。最後,開啟文件。
    2. 在嘗試透過其 URL 開啟文件之前,執行 NetSystem.SetUser。同樣,日誌中會顯示一個提示訊息,要求輸入密碼。現在,開啟所需的文件。
      可以在 SetUser 命令之後指定 URL 列表,以便一次設定多個密碼。用至少一個空格分隔密碼。如果 URL 的數量超過密碼的數量,則最後一個密碼將應用於剩餘的 URL。
      執行 NetSystem.Show 以顯示 NetSystem 的狀態,包括為哪些使用者輸入了密碼。密碼永遠不會洩露。
      執行 NetSystem.ClearUser 以清除所有密碼。
    3. 編輯 Oberon.Text,在 System.InitCommands 部分新增 NetSystem.SetUser 命令。同樣,可以在 SetUser 命令之後指定 URL 列表。對於到目前為止介紹的所有過程,密碼可以包含在 URL 中(例如 ftp://user:password@server),但要注意可怕的安全漏洞!!!有關命令語法的更多資訊,請參閱 NetSystem.Tool。
  10. 我該如何在索尼 VAIO 上安裝 Oberon?
    A:困難在於 Oberon 尚未支援 PCMCIA。假設在 Windows 下存在一個空閒分割槽和一個 FAT167FAT32 分割槽,可以繞過此困難。
    1. 在 Windows 中,安裝 Oberon Dummy(從 VIS CD-ROM 或下載它),並使用透過 USB 連線的軟盤驅動器製作可啟動軟盤。
    2. 將透過 ftp 獲得的 Aos 安裝檔案複製到 FAT 分割槽中的一個目錄中。
    3. 從剛建立的軟盤啟動 Oberon。可能需要停用 VAIO BIOS 的即插即用選項,以便 Oberon 能夠識別 USB 軟盤驅動器。
    4. 掛載包含 Aos 安裝檔案的 FAT 分割槽。
    5. 開啟 AosInst.Tool(位於這些安裝檔案中)。
    6. 遵循 AosInst.Tool 中的說明。
  11. 啟動期間出現的奇怪莫爾斯電碼般的蜂鳴聲是什麼意思?
    A:舊版本的原生 Oberon 在啟動期間發生不可恢復的錯誤時會生成莫爾斯電碼。莫爾斯電碼實際上可以提供有關錯誤位置的有用資訊,但在更高版本中,這種聲音訊號已被刪除,因為很少有人能夠破譯程式碼,而且大多數人似乎都被它嚇了一跳。問題可能與缺乏協處理器有關,如舊筆記型電腦 Compaq Conture 4/25CX 中報告的 i486SX 主機板上所述。某些版本的 Native 不會在引導檔案中包含浮點模擬器。請嘗試使用在 Sourceforge 上可下載的最新 Alpha 版本。
啟動磁碟
  1. 為什麼建立 Oberon0 啟動軟盤會以錯誤結束?無法寫入最後一個塊。軟盤容量已超過。
    A:確保以二進位制模式傳輸 Oberon0.Dsk 檔案。一些 FTP 客戶端預設使用 ASCII 模式,該模式會將 CR 轉換為 CR-LF。將下載的檔案大小與伺服器上的檔案大小進行比較。如果您擁有正在執行的 Oberon 系統,請使用它。ftp 檢視器可以清楚地區分“二進位制”和“ascii”。
  2. 我該如何為現有的 Oberon 系統建立啟動軟盤?
    A:如果在安裝過程中沒有建立可啟動軟盤,則必須啟動 Oberon-0 系統並執行 .Tool 文字中列出的少量命令。
    1. 執行與您的磁碟控制器相對應的 Config.Disk 命令
    2. 執行:Partitions.Show 並選擇相關分割槽
    3. 透過執行以下命令掛載該分割槽:OFSTools.Mount DST AosFS ^
    4. 開啟 Configure.Tool 以配置系統(至少要配置顯示卡和鍵盤)
    5. 透過執行以下命令建立軟盤:Config.BootDiskette
  3. 如何建立現有 Oberon(分割槽)的映像檔案。
    A: 使用 Partitions.PartitionToFile 命令建立 Oberon 分割槽映像檔案,包括軟盤上的分割槽,如 ETH Oberon 簡介 中所述。使用對應命令 Partitions.FileToPartition 還原分割槽。例如:以這種方式建立和還原安裝基礎上的 Oberon0.Dsk 軟盤映像檔案。
系統啟動
  1. 我的啟動管理器設定為啟動 Oberon,但在啟動時系統在顯示字元“OBE”後凍結。出了什麼問題?
    A: 這意味著 OBL 啟動載入程式的第二個塊未正確載入。
  2. 我在 IDE 控制器 2 上安裝為 MASTER 的硬碟的邏輯分割槽中成功安裝了最新的 beta 版。在 Linux 下,我更新了 /etc/lilo.conf 並呼叫了 lilo,它確認添加了 linux * oberon。但是當我想要從 LILO 啟動時,我只得到“OBE”,系統掛起。是什麼導致了這種情況?
    A: 從第二個硬碟啟動 Native 只有在以下情況下才有可能
    • 使用支援鏈式啟動的啟動管理器(例如 LILO)
    • 使用支援此功能的 BIOS
    • 使用 Native 啟動軟盤
    • 使用 noboot.exe
    如果您的啟動載入程式不支援“鏈式啟動”以從第二個驅動器啟動分割槽,您可以嘗試使用 Norton Disk Editor 等扇區編輯器“修補”Oberon 分割槽的引導扇區。引導扇區中偏移量 24h 處的位元組應設定為 81h 而不是 80h,以從第二個硬碟啟動。為了確保您修改的是正確的扇區,請檢查字串“OBERON”是否出現在扇區中的偏移量 3 處。
  3. Oberon.Text 是否是一個異常/特殊/怪異的檔案,它必須根據使用者的需求進行定製?
    A: 否,它是一個非常普通的文字,但將小部件嵌入其中會使系統從 Oberon 啟動時載入比預期更多的系統資源。它必須在安裝過程中進行定製,之後偶爾才需要定製。頂部的 InitCommands 部分是最有可能需要編輯的部分,例如新增在系統啟動時自動執行的命令。
  4. 我已經定製了 Oberon.Text 的 InitCommands 部分,現在當我重新啟動系統時,沒有出現檢視器。如何恢復?
    A: 您在文字中輸入了錯誤。按 Ctrl-Break 獲取陷阱檢視器。現在,您可以輸入命令再次開啟 Oberon.Text 並修復錯誤。檢查所有 { 和 } 字元是否匹配。
  5. 啟動後,我的 System.Log 如下所示
    System.Time 2000 年 3 月 21 日 16:14:52
    ETH Oberon / PC Native 2000 年 3 月 20 日
    Oberon.Text - Gadgets.Aliases 未找到
    Oberon.Text - Gadgets.Documents 未找到
    Oberon.Text - Gadgets.DocumentServices 未找到
    A: 這看起來像是 Oberon.Text 中的語法錯誤。同樣,請檢查所有 { 和 } 字元是否匹配。
  6. 我嘗試在我的舊 386SX 上安裝新的 beta 版。它有一個 IDE 磁碟和一個額外的舊 Adaptec SCSI 控制器,帶有磁碟和 CD。出現帶有白色邊框的黑色螢幕,但隨後什麼也沒發生,系統掛起。
    A: 它有顯示“OBERON 載入中…”嗎?OBL> 提示符出現了嗎?軟盤燈亮了嗎?如果 OBL> 提示符出現,請在“c”之前嘗試“Init=9090”,檢視顯示屏上是否出現一些有用的錯誤訊息。
系統關機
  1. 我注意到當我透過 Shutdown 退出時,系統鎖定。Ctrl-Brk 和 Ctrl-Alt-Del 無效。
    A: 這可能是用於關閉計算機的 APM 程式碼存在問題。嘗試設定配置字串“APM=0”以停用它。
編譯器(一般)
  1. 我可以獲取目標檔案的反彙編嗎?我對檢視 Oberon 編譯器生成的程式碼感興趣。我特別感興趣的是 PowerPC 和 Intel 程式碼生成器。
    A: 使用 Decoder 工具反彙編 Native Oberon 或 Linux Native Oberon 目標檔案。語法:Decoder.Decode some.Obj 開啟一個文字檢視器“Decoder.Dec”,顯示反彙編程式碼。您可以在 System3.Tool 中的“瀏覽器”彈出選單中呼叫該命令。
     
    Native Oberon 物件檔案格式 (OFF) 是 Windows Oberon OFF 的演變,只有很小的區別。符號檔案資訊(副檔名為 .Sym)現在包含在目標檔案中,並且已擴充套件為包含 Active Oberon 和 OberonX 語言擴充套件。 文件(html,pdf,ps 可用)。
  2. 是否有適用於其他開發環境的 Oberon 編譯器?
    A: 可以引用來自英國牛津大學的 Oberon-2 編譯器
    此外,請檢視 BlackBox 和 POW! 系統。
檔案系統
  1. 我至少想要建立兩個獨立的分割槽:SYS 和 USR。擁有 APPS 分割槽也很有用。我該怎麼做呢?
    A: 請閱讀“一臺機器上的多個 Oberon 分割槽”部分中的“ETH Oberon 簡介”。
  2. 當在檔案系統中建立了非常多的(>10000)檔案時,Oberon 系統會發生什麼?檔案搜尋會變得太慢,以至於使用者必須等待開啟檔案嗎?如果不是,為什麼?
    A: 不會。請閱讀“檔案目錄”部分中“ETH Oberon 簡介”中的詳細解釋。
  3. 我知道 Native Oberon 垃圾收集器是標記-清除,而不是複製,但是它是否會移動物件,例如如果記憶體變得過度碎片化,則對其進行壓縮?
    A: 不會,物件不會被標記/清除收集器移動。為了避免在不斷分配記憶體的程式中出現碎片,請定期呼叫垃圾收集器 (Oberon.Collect) 以釋放未使用的記憶體。不過,請避免過度呼叫它,因為它確實需要幾毫秒才能執行,具體取決於堆上可達物件的數量。
  4. 我有很多 .Arc 檔案需要移植。我已經將它們放在我想要卷中,但是當我解壓縮它們時,它們會寫入 SYS: 卷。
    A: 使用 OFSTools.SetDefault.
  5. 如何掛載 FAT16 分割槽?
    A: 從 2000 年 12 月 8 日的 beta 版開始,可以在 FAT16 檔案系統中嵌入 Oberon 系統。這使得無需建立專用 Oberon 分割槽即可安裝 Oberon 系統成為可能。此功能在早期版本中存在,後來被暫時放棄,現在已恢復。現在可以完全支援掛載 FAT12、FAT16 或 FAT32 分割槽。
  6. 我有許多初始化為 Native Oberon 軟盤的軟盤。當我將其中一個放入驅動器 A 並執行
    OFSTools.Mount A NatFS Diskette0 ~
    System.Log 讀取“A: OFSDiskVolumes: 未找到裝置 Diskette0”。我做錯了什麼?
    A: Backup.Format 與 Partitions.Format 不相容。使用 Backup 工具訪問 Backup 格式的軟盤。也許有人可以將 Backup 工具整合到檔案系統中。
  7. 檔名最大長度是多少,允許使用哪些字元?
    A: 這取決於掛載的特定檔案系統。原始 Oberon 檔案系統具有以下特徵:每個名稱最大 31 個字元(不包括尾部的 0X)。名稱必須以字母字元開頭,並且只能包含字母數字字元和“.”。
  8. 如何在臨時檔案中快取資料。
    A: 在 Native Oberon 中,我們使用所有臨時檔案以“Temp”開頭的約定。如果需要大量臨時檔案,我們建議將臨時檔案命名為 TempApplicNNNNNNNN,其中 Applic 唯一標識應用程式,NNNNNNNN 是一個十六進位制的唯一數字(可能初始化為啟動時的日期/時間,然後依次遞增)。當然,您需要在覆蓋檔案之前檢查檔案是否存在。如果可行,最好使用匿名檔案 (Files.New(""))。
  9. 我可以在 Oberon 中處理 *.zip 存檔嗎?
    A: 正在準備對開啟 zip 存檔和提取檔案的大量支援。Unzip 工具存在了一段時間,但已被刪除,因為它偶爾會出現問題。傳統的 Oberon *.Arc 檔案將被節省空間的 zip 存檔替換。在 ZIP.Tool 中有記錄。
軟體開發
  1. 使用 Watson 獲得的模組定義 ( .Def) 的語法是什麼?
    A: 請參閱 語言的 EBNF 定義.
  2. 我嘗試過 Watson.ShowDef SYSTEM,但它失敗並顯示錯誤訊息“無可用資訊”——在哪裡可以找到有關 SYSTEM 匯出的所有函式的完整描述?
    A: 請參閱 SYSTEM
  3. Oberon 在 SYSTEM 中是否公開了足夠多的系統功能,以允許我想要進行的記憶體操作?
    A: 是的。請注意區分 SYSTEM 和 System 模組。SYSTEM 是一個偽模組,其呼叫由編譯器內聯編譯。System 是一個系統“工具箱”模組,提供基本系統函式,例如 Directory、ShowModules 等。模組 SYSTEM 公開了完整的記憶體,並允許進行不安全的型別轉換。使用時要小心,因為如果使用不當,它很容易使整個系統崩潰。這有點像用 C 程式設計 :-)
4.  如何強制 Oberon 進入“輸入模式”。
A: 本質上,Oberon 是非模態的。人們可能希望將其強制進入某種模式,但只有在特殊情況下才會這樣做。例如,在輸入密碼或一組值時,可能需要“輸入模式”,如以下提示模組中所建議的那樣。命令 NetSystem.SetUserEditKeys.GetKeyCode 具有輸入模式。
       MODULE Prompt;  (* inspired from NetSystem.SetUser *)
       IMPORT Input, Texts, Oberon; 
       VAR 
          W:  Texts.Writer; entered: ARRAY 64 OF CHAR; 

          (* The parameter "show" controls the appearance of the characters typed, for secrecy purposes. *) 
          PROCEDURE InputMode(prompt: ARRAY OF CHAR; show: BOOLEAN; VAR str: ARRAY OF CHAR); 
          VAR i: LONGINT; ch: CHAR; 
          BEGIN 
             Texts.SetColor(W, 1); Texts.WriteString(W, prompt); Texts.SetColor(W, 15); 
             Texts.Append(Oberon.Log, W.buf); 
             Input.Read(ch); i := 0; 
             WHILE (ch #; <span id=""></span>0DX) & (ch # 1AX)  DO 
                IF ch = 7FX THEN   (* Use backspace to correct the current input *) 
                   IF i > 0 THEN 
                      Texts.Delete(Oberon.Log, Oberon.Log.len-1, Oberon.Log.len); 
                      DEC(i) 
                   END 
                ELSE 
                   IF show THEN Texts.Write(W, ch) ELSE Texts.Write(W, "*") END; 
                   Texts.Append(Oberon.Log, W.buf); 
                   str[i] := ch;  INC(i) 
                END; 
                Input.Read(ch)
             END;
             str[i] := 0X;
             Texts.WriteLn(W);  Texts.Append(Oberon.Log, W.buf) 
          END InputMode;

          PROCEDURE Prompt*; 
          BEGIN 
             InputMode("Enter data: ", TRUE, entered); (* use for entering a password *) 
             REPEAT InputMode("Enter data: ", TRUE, entered) UNTIL entered = "q" (* use for a set of values *) 
          END Prompt; 

       BEGIN 
          Texts.OpenWriter(W)
       END Prompt.

5.   如何以所需的精度輸出實數值(例如,不是 1.E+03 而是 1037)。
A: 使用過程 Out.RealFix (x: REAL; n, f: INTEGER); 以 n 個欄位位置的定點表示法輸出實數 x,並具有 f 個小數位。LongRealFix 也存在。在用於 Windows 或 Linux 的 Oberon 中,必須開啟一個檢視器並在程式控制下寫入編輯後的值。
6.   如何比較過程變數。Oberon 僅允許將過程變數與 NIL 進行比較。
A: 可以透過這種方式比較過程變數
       MODULE Temp; 
         VAR p, q: PROCEDURE;
         PROCEDURE P;
         END P;
       BEGIN
         p := P; q := P;
         (*IF p = P THEN END;*)  (* does not compile *)
         IF p = q THEN END  (* but this works *)
       END Temp.
PCI 檢測
  1. 我發現 PCI.Mod 模組很容易使用。但是,當我讀取我擁有的卡的基地址時,我發現值偏離了 1。為什麼?
    A: 這是正確的。PCI 模組直接訪問 PCI BIOS32,無需進一步解釋結果。請參閱 PCI 規範第 6.2.5.1 節(我們擁有版本 2.0)。如果基地址的最低位為 1,則表示 I/O 空間暫存器,位 1 保留。如果最低位為 0,則表示記憶體對映暫存器,位 1-2 表示位置,位 3 表示記憶體是否可預取。其餘位是實際的 I/O 或記憶體地址。
Oberon 文字
  1. 使用 Unix 檔名,很難區分連字元 "-" 和下劃線 "_"。有沒有可能在下一個版本中修復它?或者至少給出它必須這樣做的原因?
    A: 尚不清楚為什麼將短連字元對映到下劃線 ASCII 字元。作為解決此類問題的快速變通方法,請在系統工具中保留一些 Courier10 文字,您可以使用它來快速重新格式化並顯示任何其他文字中的下劃線
    1. 使用 MR 拖動選擇目標文字
    2. 在 Courier10 文字上進行 ML-MR 互點
  2. 如果下劃線要保留下來,是否可以有人給我們提供一個工具來修補字型檔案,以便我們得到一個真正的下劃線?我想這不會花超過幾個小時的時間。
    A: 嘗試 Apps 包中的 FontEditor。 文件; 以前在 http://www.ethoberon.ethz.ch/ethoberon/tutorial/FontEditor.htm [已過期]。

    也許有人也可以生成一套新的 Oberon 字型來對映 ISO Latin-1 字元集。這可以使用程式來完成,我們建議將新字型重新命名以避免衝突。有關字型檔案格式,請參見 Source1.Arc 中的 Fonts.Internalize 過程。

  3. 原生 Oberon 執行良好,但無法使用游標移動鍵控制游標。我需要調整/設定什麼才能啟用這些鍵?
    A: 預設文字編輯器只支援使用滑鼠定位。要安裝更高階的編輯器,請執行 ET.ReplaceSystemEditor。您也可以將此命令放在 Oberon.Text 的 System.InitCommands 部分中,以使其自動執行。如果您已安裝 Gadgets 包,請執行 TextDocs.ReplaceSystemEditor 命令以安裝更好的編輯器。
  4. 如何只使用小寫字元編寫 Oberon 源文字。患有 RSI 的人可能希望這樣做。
    A1: 修改編譯器模組 OPS(掃描器)。
    1. 建立一個過程“Check”
      PROCEDURE Check(ident, keyword: ARRAY OF CHAR): BOOLEAN; 
      BEGIN 
          i := 0; 
          WHILE ident[i] # 0X DO ident[i] := CAP(ident[i]) END; 
          RETURN ident = keyword 
      END Check;
    2. 在 OPS.Get 中,為每個字母更改
      | "B": Identifier(s);
          IF name = "BEGIN" THEN s := begin
          ELSIF name = "BY" THEN s := by
          END

      | "B", "b": Identifier(s);
          IF Check(name, "BEGIN") THEN s := begin
          ELSIF Check(name, "BY") THEN s := by
          END

      重新編譯 OPS.Mod。請注意,內建型別(CHAR、INTEGER 等)未定義為關鍵字。如果您也想重新命名它們,您將在 OPT.Mod(符號表)中找到它們的宣告。建議是擁有大寫和小寫版本,以便您仍然能夠編譯釋出程式。

      在 OPT.Mod 模組體中,為每個型別宣告新增類似於此的別名

      EnterTyp("CHAR", Char, OPM.CharSize, chartyp, SFtypChar);
      EnterTypAlias("char", chartyp);
    A2: 使用 RX 正則表示式工具將源文字中的小寫關鍵字轉換為大寫關鍵字。
    RX.SetSearch "begin"
    RX.SetReplace "BEGIN"
    RX.ReplaceAll filename | *
    

    使用一個指令碼,每個關鍵字有一個條目。然後,使用 Configuration.DoText 指令碼名稱 ~ 執行它

    A3: 使用 EditKeys 工具,允許使用者定義個人快捷鍵。例如,如果您鍵入“XYZ:M”並按插入鍵,EditKeys 會將其替換為
    MODULE XYZ;
        ....
    END XYZ.

    您可以在 EditKeys.Text 中新增自己的宏,例如 integer(“INTEGER” write)。在“integer”後按“Insert”鍵會將其更改為“INTEGER”。

    最後,希望有人能將這些指令碼提交為貢獻。

使用 Gfx 進行 2D 圖形繪製
  1. 如何在 Leonardo 中加速文字繪製?Leonardo 是一個不錯的向量圖形工具,但是,在當前的實現中,文字繪製非常慢。當我第一次開啟示例圖形 Leonardo.Fig 時,我注意到“Welcome To”這兩個字是如何緩慢地繪製到螢幕上的。我最初以為這是某種動畫“功能”。但很快我意識到,如果您使用較大的文字字型(超過 20 點),Leonardo 就會變得非常慢。
    A: 建議的解決方法是編輯檔案 LeoCaptions,將以下行
    Gfx.DrawStringAt(msg.ctxt, 0, 0, cap.text^);

    替換為以下行

    Gfx.Begin(msg.ctxt, {Gfx.Stroke, Gfx.Fill}); 
    Gfx.ShowAt(msg.ctxt, 0, 0, cap.text^); 
    Gfx.End(msg.ctxt);
    文字繪製速度將顯著提高。這是解釋:透過在渲染模式中包含 Gfx.Stroke,您強制 Gfx 將文字中字形的輪廓附加到當前路徑,然後填充和描邊它們。如果您在渲染模式中只有 {Gfx.Fill}(如 Gfx.DrawStringAt 所做的那樣),Gfx 會直接將預渲染的快取字形點陣圖複製到螢幕上,因為這通常快得多。但是,在 Windows Oberon 中,當沒有匹配的 Oberon 點陣圖字型時,此假設就會失效,因為只有這些字型可以快速渲染。如果沒有 Oberon 點陣圖字型,GfxDisplay 驅動程式必須從螢幕記憶體中讀取畫素,將字形點陣圖複製到它們上面,並將它們寫回螢幕。不幸的是,在 Windows 上,從幀緩衝區讀取畫素非常慢。這個問題在原生 Oberon 中不存在。

    上述解決方案使用當前描邊顏色描邊字元,並使用當前填充顏色填充它們。如果當前描邊顏色和填充顏色不同,上述解決方法會導致所有字元周圍出現可見的輪廓。為了避免這種效果,Gfx 必須被強制使用輪廓字型,而無需實際描邊輪廓。這可以透過首先將字元輪廓記錄在路徑中,然後填充該路徑來實現,如以下演算法所示

    Gfx.Begin(msg.ctxt, {Gfx.Record}); 
    Gfx.ShowAt(msg.ctxt, 0, 0, cap.text^); 
    Gfx.End(msg.ctxt); 
    Gfx.Render(msg.ctxt, {Gfx.Fill});

    這應該至少與最初建議的解決方案一樣快。但是,有一個警告:小尺寸的文字可能看起來很糟糕,因為它直接從相應的字型輪廓渲染,沒有任何提示。
超文字文件
  1. 如何儲存瀏覽文件的源文字。
    A1: 執行 HTMLDocs.ShowHTML *。將開啟一個文字文件檢視器,顯示 HTML 源文字,然後可以使用 [Store] 儲存它。文件必須完全下載才能儲存。參見 HTTP.Tool
     
    A2: 選擇一個超連結並執行 HyperDocsTools.Fetch localname ~。將獲取具有所選 URL 的文件,並將其儲存在本地檔案“localname”中。參見 HyperDocs.Tool
     
    A3: 這兩個命令都可以在 GUI HyperDocs.Panel 中找到。
     
  2. 如何清除超文字文件快取?如果我在不重啟的情況下重新獲取文件,該文件不會從網路中檢索。
    A: 使用以下兩種方法之一
    1. 執行 HyperDocs.ClearCache
    2. 開啟 HyperDocs.Panel 並單擊 [Clear Cache] 按鈕
    3. 開啟文件並單擊 [Reload] 按鈕
PostScript 檔案
  1. 如何列印 PostScript 檔案?
    A: 要將檔案直接傳送到 PostScript 印表機,請使用(在 Miscellaneous.Tool 中):Miscellaneous.PrintFiles LPT1 {file} ~
  2. 是否有像 Oberon 的 Postscript 檔案檢視器(相當於 Windows 的 ghostview)這樣的東西?
    A: 沒有。
I/O 埠控制
  1. 如何控制序列埠 RS-232。
    A1: Oberon 包含了控制序列埠所需的一切,無需進一步操作。請參閱原生 Oberon 中的 Applications.Tool -> V24Terminal。使用 V24.Panel 可以輕鬆地控制序列埠,無需程式設計。非常適合對調變解調器進行 AT 命令測試,或透過序列控制埠(控制檯埠)設定路由器,如 原生 Oberon 安裝文件(連線部分)中所述。
     
    未記錄的 V24Log.Mod 是一個小型應用程式,它將到達序列埠的所有內容複製到 System.Log。在源文字的末尾可以找到使用它的示例。
     
    A2: 在您自己的程式中使用 V24.Mod 模組中的過程。
     
    A3: 當前的 V24 模組只支援兩個“標準”固定埠
    COM1: 3F8H / IRQ 4 和 COM2: 2F8H / IRQ 3。Alpha 版本擴充套件到也支援 COM3 和 COM4。請參閱 序列和並行埠支援
  2. 如何控制音效卡。
    A: 透過檢視 PC 原生 Oberon 中 Sound.Mod 模組的源文字獲取一些靈感。在 ETH Oberon for Windows 中,Win.Audio.Arc 是要尋找的地方。注意:Windows 實現中的一些模組不可移植(使用選項 \N 編譯)。
小工具
  1. 當我定義按鈕的 Command 欄位時,很快就會達到 Columbus 中 TextField 可用的 64 個字元的最大長度。是否可以將 MaxLen 增加到 96 或 128?
    A: 無論使用哪個數字,對於某些人來說,它總是太小了。最好用其他方式解決問題,例如,讓命令直接從相關物件讀取您的引數。使用 Gadgets.FindObj(Gadgets.context, "ObjName") 查詢物件,然後使用 Attributes.GetXXX 讀取屬性值。然後,您每個引數有 64 個字元,而不是所有引數加起來。

    如果您確實需要在命令中使用更多字元,請將小部件的 Cmd 文字欄位替換為最多 10 個欄位,並在您的某個模組中插入以下命令過程

    (** Glue together the attributes Cmd0 to at most Cmd9 of the gadget and 
        execute the resulting string. Macros are expanded. 
        This helps when the Cmd attribute limited to 64 characters is too short.  *)
    PROCEDURE ExecAttrCmds*; 
    VAR 
         cmd, cmdN: ARRAY 1024 OF CHAR; cmdName: ARRAY 8 OF CHAR; 
    BEGIN 
         cmd := ""; cmdName := "Cmd0"; 
         LOOP 
              Attributes.GetString(Gadgets.executorObj, cmdName, cmdN); 
              IF (cmdN = "") OR (cmdName[3] > "9") THEN EXIT; END; 
              Strings.Append(cmd, cmdN); cmdName[3] := CHR(ORD(cmdName[3])+1); 
         END; 
         Gadgets.Execute(cmd, Gadgets.executorObj, Gadgets.context, NIL, NIL); 
    END ExecAttrCmds;
    
  2. 我正在嘗試為開發中的使用者介面提供良好的外觀,並希望匯入一些影像以將其放入我的介面(例如)作為背景影像。在 Oberon 中實現這一點的最佳方法是什麼?
    A: 如果您的使用者介面駐留在面板上,您需要將面板的“圖片”連結設定為圖片。以下是一個具體的示例
    1. 開啟 Clown.Pict 並選擇幀
    2. Columbus.Inspect ~(您應該看到一個 Rembrandt.New 生成器)
    3. 按下連結按鈕以檢視“模型”連結。
    4. 選擇您的面板並執行另一個 Columbus.Inspect ~(Panels.NewPanel 生成器)
    5. 按下連結按鈕以檢視“圖片”連結(其中有一個十字)
    6. 在 Rembrandt.New 的“模型”連結上進行 MM-MR 交叉點選,然後將其拖放到 Panels.NewPanel 的“圖片”連結上。十字應變成一個帶有小圓圈的方框。
    7. 按下“應用”按鈕。您的面板現在應該有一個小丑背景。
  3. 如何在 System3.Tool 的下拉選單中新增專案?.
    A:
    1. 將帶有下拉選單的圖示工具的深層副本複製到工作區。
    2. 選擇已複製的圖示工具並將插入符設定在工作區中。
    3. 執行 Icon.Break 以將圖示工具拆開。兩側將插入插入符處。
    4. 使用 Columbus 編輯“開啟”側,新增新條目。列表容器通常被鎖定。
    5. 透過將“關閉”元件放到其中來重建圖示工具,然後翻轉圖示工具,最後將“開啟”元件放到其中。
    6. 將完成的圖示工具複製到 System3.Tool。
  4. 如何建立類似於 System3.Tool 中的下拉選單?.
    A:
    1. 互動式地,在工作區中,結合使用 Columbus 和 Gadgets.Panel。
    2. 編寫圖示工具及其元件的 LayLa 描述。參見《奧伯龍伴侶》第 6 章 - 奧伯龍中的 Chapter6.Text。

    示例

    LayLa.OpenAsDoc
    { Example of drop-down menu Iconizer à la System3.Tool. } 
    (CONFIG 
      (DEF width 60) 
      (DEF height 24) 
      (DEF ClosedSide 
        (VLIST Panel (w=width h=height hjustify=CENTER vjustify=CENTER) 
            (ATTR Locked=TRUE) 
          (NEW Caption (ATTR Value="Menu")) 
        ) 
      ) 
      (DEF OpenSide 
        (VLIST Panel (w=width h=100 border=1 dist=1) (ATTR Locked=TRUE) 
          (NEW Button (w=[] h=height) (ATTR Caption="Text1" Cmd="...")) 
          (NEW Button (w=[] h=height) (ATTR Caption="Text2" Cmd="...")) 
          (NEW Button (w=[] h=height) (ATTR Caption="Text3" Cmd="...")) 
          (NEW Button (w=[] h=height) (ATTR Caption="Text4" Cmd="...")) 
          ) 
      ) 
      (NEW Iconizer (w=60 h=24) (ATTR Popup=TRUE Menu=TRUE) 
        (LINKS Closed=ClosedSide Open=OpenSide)) 
    )
    
Linux Native Oberon
  1. 每次在 Linux 的 Oberon 中使用操作碼 OUT 時我都會被困住。為什麼?
    A: 要在 Linux 中使用 IN 和 OUT 彙編指令,您需要執行此操作的許可權。作為 root 使用者,您的程式可以使用 ioperm 或 iopl 設定許可權。
    嘗試 1 到 3 之間的級別。預設級別為 0。成功時,將返回零。
            PROCEDURE iopl( level: LONGINT): LONGINT; 
            CONST IOPL= 110; 
            CODE {SYSTEM.i386} 
                 MOV     EAX, IOPL 
                 MOV     EBX, level[ EBP] 
                 INT     80H 
            END iopl;
  1. 我如何使用 Linux 聲音驅動程式?
    A: 當前未實現聲音。歡迎志願者。
  2. 如何將螢幕尺寸從當前的 1024x768 畫素縮小?
    A: 編輯 oberon.cnf 中的寬度和高度。
Oberon for Linux (x86)
  1. 如何將螢幕尺寸從當前的 1024x768 畫素縮小?
    A: 雖然旨在全屏模式下執行,但您可以透過編輯 X11.Mod 並重新編譯它來建立一個更小的 Oberon 桌面。
    在過程 X11.OpenDisp 中,找到以下行
            (* adjust to physical window size *) 
            GetGeometry( display, primary, gRoot, gX, gY, gW, gH, gBW, gD );   
            IF gW MOD 8 # 0 THEN  
                 DEC( gW, gW MOD 8 );   
            ResizeWindow( display, primary, gW, gH );   
            END;
並將它們替換為
            (* gW MOD 8 should be 0 for efficiency! *)
            GetGeometry( display, primary, gRoot, gX, gY, gW, gH, gBW, gD ); 
            gW := <your desired witdh> 
            gH := <your desired height> 
            ResizeWindow( display, primary, gW, gH );
VNC 客戶端
  1. 一些重要的按鍵,如左 Alt,似乎不起作用。為什麼?
    A: 輸入模組不會返回所有可能的按鍵組合。例如,在 Oberon 中,Alt-a 會生成德語“ä”。但 VNC 客戶端為此提供瞭解決方案。如果您按下並釋放 Alt,VNC 會記住它並將“Alt”新增到下一個鍵中。例如,要切換我的虛擬 X 桌面,我按下並釋放 Alt,然後按下 Ctrl-Left/Right/Up/Down。VNC 檢視器必須首先獲得焦點,因此您必須先在檢視器中單擊滑鼠左鍵。我們希望稍後修復輸入模組。
  2. 向下箭頭鍵不能可靠地工作。這不是機械問題,因為我使用過三種不同的鍵盤進行了測試。但是,關閉 VNC 客戶端視窗並開啟一個新的視窗似乎可以“修復”它。
    A: 也許這是因為焦點丟失了。不幸的是,當檢視器獲得焦點時沒有視覺指示。嘗試在檢視器中按滑鼠左鍵以使其獲得焦點。

2003 年 1 月 23 日 - 版權所有 © 2003 ETH Zürich。保留所有權利。
電子郵件:oberon at lists.inf.ethz.ch
主頁:http://www.ethoberon.ethz.ch/

華夏公益教科書