This page is a personal collection of notes. For authoritative documentation, please refer to http://www.oberon.ethz.ch/ .

Miscellaneous Links

In alphabetical order.
Pieter Muller, The Active Object System; Design and Multiprocessor Implementation . That is a pdf file which Desktops.OpenDoc can not open. Apply pdftohtml in a Linux system or open with xpdf in Linux via VNC in Oberon.
Edgar Schwarz, Oberon Forum.
Edgar Schwarz, Sw Oberon.

Einstein's dictum: "Make it as simple as possible, but not simpler."

Violations

1. The last argument of a command can be ignored if end-of-text is reached rather than a ~ character.
Example: If ImportantArchive.Zip is created with "ZipTool.Add ImportantArchive.Zip blah1 blah2 blah3 <end-of-text>", blah3 is absent from the archive.
Solution: handle arguments with procedures which are used system wide. Allow end-of-text to produce the same effect as "~".

Sample Files, Adjustments, Modifications and Repairs



This is the configuration file Oberon.Text from Cantor.
HyperDocTools.Fetch
"http://carnot.yi.org/Oberon.Text.Ex" => Oberon.Text.Ex ~

Manifold.Vinci is an example of a simple engineering drawing written in Vinci.
HyperDocTools.Fetch
"http://carnot.yi.org/Manifold.Vinci" => Manifold.Vinci ~

A few of the source files for the Oberon System, PC Native 05.01.2003, with small adjustments, modifications and "repairs" follow. These files reside entirely under the copyright and license of the Computer Systems Institute, ETH Zurich. Before compiling any modified file, compare with the file in your SYS partition using Diff.Do. The changes are described below. Use these modifications AT YOUR OWN RISK.

HyperDocTools.Fetch
"http://carnot.yi.org/pe.ATADisks.Mod" => pe.ATADisks.Mod
"http://carnot.yi.org/pe.Dialer.Mod" => pe.Dialer.Mod
"http://carnot.yi.org/pe.FTP.Mod" => pe.FTP.Mod
"http://carnot.yi.org/pe.FTPDocs.Mod" => pe.FTPDocs.Mod
"http://carnot.yi.org/pe.HTML.Mod" => pe.HTML.Mod
"http://carnot.yi.org/pe.HTMLDocs.Mod" => pe.HTMLDocs.Mod
"http://carnot.yi.org/pe.NetSystem.Mod" => pe.NetSystem.Mod
"http://carnot.yi.org/pe.PSPrinter.Mod" => pe.PSPrinter.Mod
"http://carnot.yi.org/pe.PPPFSM.Mod" => pe.PPPFSM.Mod
"http://carnot.yi.org/pe.PPPHDLC.Mod" => pe.PPPHDLC.Mod
"http://carnot.yi.org/pe.PPPIPCP.Mod" => pe.PPPIPCP.Mod
"http://carnot.yi.org/pe.PPPLCP.Mod" => pe.PPPLCP.Mod
"http://carnot.yi.org/pe.PPPMain.Mod" => pe.PPPMain.Mod
"http://carnot.yi.org/pe.PPPTools.Mod" => pe.PPPTools.Mod
"http://carnot.yi.org/pe.URI.Mod" => pe.URI.Mod
"http://carnot.yi.org/pe.RingbackDialScript" => pe.RingbackDialScript
"http://carnot.yi.org/pe.SSHTransport.Mod" => pe.SSHTransport.Mod
~
Diff.Do pe.ATADisks.Mod SYS:ATADisks.Mod
Diff.Do pe.Dialer.Mod SYS:Dialer.Mod
Diff.Do pe.FTP.Mod SYS:FTP.Mod
Diff.Do pe.FTPDocs.Mod SYS:FTPDocs.Mod
Diff.Do pe.HTML.Mod SYS:HTML.Mod
Diff.Do pe.HTMLDocs.Mod SYS:HTMLDocs.Mod
Diff.Do pe.NetSystem.Mod SYS:NetSystem.Mod
Diff.Do pe.PSPrinter.Mod SYS:PSPrinter.Mod
Diff.Do pe.PPPFSM.Mod SYS:PPPFSM.Mod
Diff.Do pe.PPPHDLC.Mod SYS:PPPHDLC.Mod
Diff.Do pe.PPPIPCP.Mod SYS:PPPIPCP.Mod
Diff.Do pe.PPPLCP.Mod SYS:PPPLCP.Mod
Diff.Do pe.PPPMain.Mod SYS:PPPMain.Mod
Diff.Do pe.PPPTools.Mod SYS:PPPTools.Mod
Diff.Do pe.SSHTransport.Mod SYS:SSHTransport.Mod

Compiler.Compile \s \OSYS:
pe.ATADisks.Mod
pe.Dialer.Mod
pe.FTP.Mod
pe.FTPDocs.Mod
pe.HTML.Mod
pe.HTMLDocs.Mod
pe.PSPrinter.Mod
pe.PPPFSM.Mod
pe.PPPHDLC.Mod
pe.PPPIPCP.Mod
pe.PPPLCP.Mod
pe.PPPMain.Mod
pe.PPPTools.Mod
pe.URI.Mod
pe.NetSystem.Mod
pe.SSHTransport.Mod ~

Point of interest: modules are compiled in alphabetical order except that NetSystem imports URI and must be compiled after it.

(mouse middle)+(mouse right interclick)


This invokes the command specified by MODULE TextFrames; ... CONST ... OpenCmd = ... . After changing the constant, recompile and reload the module.
ET.Open TextFrames.Mod ~ Compiler.Compile \OSYS: * ~

ATADisks


Small changes in ATADisks.Mod allow use of a CF card, thanks to Josef Sedlacek. Also see Native.Tool from Build.zip and
Desktops.OpenDoc http://www.oberon.ethz.ch/native/WebBoot.html .
Excerpt from Native.Tool from Josef Sedlacek.
BootLinker.Link my.bin \refs \integrate 1000H
Kernel Disks PCI ATADisks OFS Files Modules OFSDiskVolumes OFSCacheVolumes Unicode OFSFATVolumes OFSFATFiles OFSFileBasedDevices OFSAosFiles OFSBoot ~
Partitions.UpdateBootFile dev#part my.bin ~
End of excerpt from Native.Tool.

Reports to System.Log from FTP and FTPDocs


If a file name is long, the report of completion of a transfer by FTP and by FTPDocs can be off screen on the right. WriteLns left-justify the reports from Get and Put.

Character reference in Strings.ISOToOberon


Strings.ISOToOberon is an array of 256 characters whereas HTML can refer to any of 65536 characters, &#0; .. &#65535;. HTMLDocs.WriteCharRef and HTMLDocs.CharRefStr were trapping on most characters above &#255;. A check of i was added before evaluation of ISOToOberon[i].

Character Encoding Specification in HTTP Header


The constant CharEncoding was added to the module HTML.Mod so that the name of the encoding would not be hidden in the body of the module. The ETH release contains "iso-8859-1" but I use "UTF-8". Refer to http://en.wikipedia.org/wiki/Character_encoding for more explanation.

The encoding specified in the header of a Web document should match the encoding specified in the HTTP header. Some users maintain documents for more than one http server. Specification of the encoding at the top of the parameter text for HTML.Compile would be more efficient than recompiling HTML each time the encoding is changed.

Encoding of characters in a URI


My ISP requires the UserID, ppeasthope@cable.net but the @ character is not interpreted properly by NetSystem.SetUser. This is solved by applying URI.UnESC to the user and passwd parameters in NetSystem.SetUser and URI.ESC in NetSystem.Show. The parameters are set correctly with this command.
NetSystem.SetUser pop:ppeasthope%40cable.net:<password>@mail.cable.net ~

I should make a command version of URI.ESC to help the user when setting passwords.

See also http://www.edgar-schwarz.de/mm/BugFixes.

End Of Transmission for a PostScript print job


Added a statement to send an EOT character, 4X, also called control-D, at the end of a PostScript print job. The requirement is documented in PostScript Cartridge User's Guide, Hewlett-Packard Part No. 33439-90901, page 5-7. Probably in many other H-P manuals also.

PPP


Numerous small changes to the PPP sources are described in PPPnotes.

Dialer


I use Dialer.Dial to establish a modem connection from "home" to "office" for PPP. The office computer runs mgetty in Linux and answers the connection according to the ringback protocol. For Dialer to support ringback, the syntax of the Dial script was extended so that an empty string will invoke a pause; 11 "" is the 11 s pause in this script. Refer to pe.Dialer.Mod above for the syntax extension. This extension would be unneccesary if the pause could be invoked with modem commands but I've never found a way to achieve it. The script belongs in the SYS:Oberon.Text configuration file.

{* This is for a USR Sportster modem on an Oberon system 
calling a USR Sportster on a Linux system. *} 
Ringback = { 
     Init = { COM1 19200 }     {* modem port and speed *} 
     Dial = { 
         "ATZS0=0&F1&B1&C1" 
         10 "OK" 
         "ATDT16041234567,,;H0" 
         10 "OK" 
         11 "" 
         "ATDT16041234567" 
          40 "LAPM)"  
          CALL "PPPMain.StartInst Ringback peter" 
    } 
}

I also use Dial for calling card voice calls. It saves time for numbers called frequently. This is such a script, invoked with Dialer.Dial NuvoSomeone Device0 ~ You might need Device1 or another. Init specifies the COM port; so why should Dial specify the device? A better syntax would allow Dialer.Dial Nuvo 6041234567 ~. That would work with various access protocols and destination numbers. Another problem to work on!

{* This is for the USR Sportster modem. *} 
NuvoSomeone = { 
     Init = { COM1 19200 }     {* modem port and speed *} 
     Dial = { 
          "ATZS0=0&F1&B1&C1"  
          2 "OK" 
          "ATDT<CardAccessNumber>,,;DT<LanguageSelector>,,,;" 
          20 "OK" 
          "ATDT<CardPINNumber>,,,,,,;" 
          20 "OK" 
          "ATDT<DestinationNumber>,,,,,,,;H0" 
          20 "OK" 
     } 
}

ET.Open SYS:Oberon.Text
ET.Open pe.RingbackDialScript

SSHTransport


A small change to SSHTransport.Mod to prevent the system from freezing when the remote system refuses su. Thanks to the author of SSH, Guenter Feldmann.

System.Directory


A "~" appended to a directory listing is usefull when it becomes the argument of a command such as FileSystem.GenCopyFiles.

In System.Directory, change the line
          Texts.WriteLn(W); Texts.WriteInt(W, count, 1); Texts.WriteString(W, " files");
to
          Texts.WriteString(W, "~"); Texts.WriteLn(W); Texts.WriteInt(W, count, 1); Texts.WriteString(W, " files");
and recompile; Compiler.Compile \OSYS: * .

Mice


CLIXes, serial, 3-button, Model: Jx Mouse, FCC ID: FSUGMZB6. Works correctly as MS1.

MS Intellimouse 1.2A, PS/2 Compatible. PN X04-72176, Product ID 63618-OEM-2170103-7, As MSI, there is no cursor movement. As PS2 it appears OK but can freeze when opening a document. Press <Scroll Lock> and use the arrow keys to reboot.

MS Wheel Mouse, Serial and PS/2 compatible. PN X03-53717, Product ID 83351-577-4049495-00000. Works as PS2. Occasionally the cursor jumps downwards for a few milliseconds; freezes rarely.

I've used the pointing stick in three old model Toshiba laptops. As PS2, no failure has ever occurred.

Conclusion: the PS/2 driver needs work.

Video


Q. My computer lacks a diskette drive. Can the display driver be adjusted?

A. Restart and hold down the shift key. The boot loader will allow config strings to be set. Make these settings to restore the VGA display as used by Oberon0.
Display=VGA.
Init=b81200cd10
DRefresh=""
DWidth=640
DHeight=480
DDepth=4
Press "w" to write the configuration to the partition and "c" to continue booting. Another configuration can be set similarly using a string found in Config.Mod or in OberonDrivers.Text.

Q. Can a Toshiba 205CDS be configured to use the full screen rather than just the VGA subset of pixels?

A. Yes. The specifications at http://www.toshiba.com/ mention that the internal resolution is 800 x 600 x 64K/64K colors. 64K = 2^16. According to OberonDrivers.Text this is VESA mode 276(9) = 114H. Configure with the Oberon0 diskette or set these config strings at startup.
Display=Displays.
DDriver=DisplayLinear
Init=b8024fbb1441cd10b8014fb91401cd10268b4d28268b552a
DWidth=800
DHeight=600
DDepth=16

To use Virtual Display Mode 1024 x 768 x 64K properly, DisplayLinear needs work.

Q. I am interested to understand the cryptic Init config strings. Is there any alternative to being an expert in Intel machine code and video programming?

A. When the system is installed with Oberon0, the Init string is provided by Config.Mod. The long VESA string above is built up in sections.

To understand a specific string, apply a disassembler. Then google the Web to understand what is done with the video processor.

For example, the VGA string is the five hex bytes b81200cd10. We want a file Init.o containing these bytes. An obvious if not efficient method is to use Edit or ET to put any 5 characters in Init.o. Then Hex.Open Init.o, replace the characters with B8 12 00 CD 10 and Store. Move Init.o to a Linux system. There apply objdump.

objdump -b binary -m i8086 -D Init.o
Init.o: file format binary
Disassembly of section .data:
0000000000000000 <.data>: 0: b8 12 00 mov $0x12,%ax 3: cd 10 int $0x10

Observe that 0x12 is put into register ax and then interrupt 0x10 is invoked. Googling "vga ax 12h 10h" finds several pages which explain that this sets VGA graphics mode 640 x 480 x 24 colors, the default for PC Native Oberon.

Kees C. prefers libdisasm's x86dis tool.

$ echo -e '\xb8\x12\x00\xcd\x10' | x86dis -r 0 5 -s att 
00000000 B8 12 00             mov     $0x0012, %ax 
00000003 CD 10                int     $0x10

This method can be applied to any of the strings.

Copyright (c) 2004-2008, Peter Lyall Easthope. All rights reserved.

Valid HTML 4.01!
Best viewed with a Web browser.