Oberon

Used Exports

BUILTINS: BOOLEAN CHAR DEC INC INTEGER LED LONGINT NEW ORD SET
Display: CopyPattern Frame FrameDesc.H FrameDesc.W FrameDesc.X FrameDesc.Y FrameDesc.handle FrameMsg Height ReplConst Width arrow black invert replace star white
Files: RestoreList
Fonts: Default Font
Input: Available Mouse Read SetMouseLimits
Kernel: Clock Mark Scan SetClock Time allocated heapLim heapOrg stackOrg
Modules: Command Load ModDesc.name ModDesc.next ModDesc.ptr Module ThisCommand res root
SYSTEM: LDREG
Texts: Text
Viewers: Broadcast InitTrack Locate OpenTrack This Viewer ViewerMsg ViewerMsg.Y ViewerMsg.id curW modify restore

MODULE Oberon; (*JG 6.9.90 / 23.9.93 / 13.8.94 / NW 14.4.2013 / 22.12.2015*)
.MODULE Oberon (KEY A89CCEE2, VERSION 1, SIZE 00001CD4)
.IMPORT Kernel (KEY 97E012DD)
.IMPORT Files (KEY 73F5D686)
.IMPORT Modules (KEY 41C6A19A)
.IMPORT Input (KEY 5DE391A8)
.IMPORT Display (KEY 4C08D3EA)
.IMPORT Viewers (KEY 25ABF199)
.IMPORT Fonts (KEY F4C9F557)
.IMPORT Texts (KEY 0B9E9984)
.TYPEDESC 00000020 FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 00000020 FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 00000040 0002800B FFFFFFFF FFFFFFFF 00000014 FFFFFFFF 00000020 00040006 FFFFFFFF FFFFFFFF 00000004 FFFFFFFF 00000020 00058006 FFFFFFFF FFFFFFFF FFFFFFFF 00000020 0006C005 FFFFFFFF FFFFFFFF 00000000 FFFFFFFF 00000020 FFFFFFFF FFFFFFFF FFFFFFFF 0000000C FFFFFFFF
.DATA 84H
.STRING 120H "System"
.POINTER_REFERENCES E0H E4H F0H ECH E8H F8H 108H 11CH
.FIXUP T 1CH
IMPORT SYSTEM, Kernel, Files, Modules, Input, Display, Viewers, Fonts, Texts;
CONST (*message ids*)
consume* = 0; track* = 1; defocus* = 0; neutralize* = 1; mark* = 2;
off = 0; idle = 1; active = 2; (*task states*)
BasicCycle = 20;
ESC = 1BX; SETSTAR = 1AX;
TYPE Painter* = PROCEDURE (x, y: INTEGER);
Marker* = RECORD Fade*, Draw*: Painter END;
Cursor* = RECORD
marker*: Marker; on*: BOOLEAN; X*, Y*: INTEGER
END;
InputMsg* = RECORD (Display.FrameMsg)
id*: INTEGER;
keys*: SET;
X*, Y*: INTEGER;
ch*: CHAR;
fnt*: Fonts.Font;
col*, voff*: INTEGER
END;
SelectionMsg* = RECORD (Display.FrameMsg)
time*: LONGINT;
text*: Texts.Text;
beg*, end*: LONGINT
END;
ControlMsg* = RECORD (Display.FrameMsg)
id*, X*, Y*: INTEGER
END;
CopyMsg* = RECORD (Display.FrameMsg)
F*: Display.Frame
END;
Task* = POINTER TO TaskDesc;
Handler* = PROCEDURE;
TaskDesc* = RECORD
state, nextTime, period*: INTEGER;
next: Task;
handle: Handler
END;
VAR User*: ARRAY 8 OF CHAR; Password*: LONGINT;
Arrow*, Star*: Marker;
Mouse, Pointer: Cursor;
FocusViewer*: Viewers.Viewer;
Log*: Texts.Text;
Par*: RECORD
vwr*: Viewers.Viewer;
frame*: Display.Frame;
text*: Texts.Text;
pos*: LONGINT
END;
CurFnt*: Fonts.Font;
CurCol*, CurOff*: INTEGER;
NofTasks*: INTEGER;
CurTask: Task;
DW, DH, CL: INTEGER;
ActCnt: INTEGER; (*action count for GC*)
Mod: Modules.Module;
(*user identification*)
PROCEDURE Code(VAR s: ARRAY OF CHAR): LONGINT;
VAR i: INTEGER; a, b, c: LONGINT;
BEGINa
0000a .PROC 1
0000a(4EE9001C): SUB SP, SP, 1CH
0001a(AFE00000): STR LNK, SP, 0H
0002a(A0E00004): STR R0, SP, 4H
0003a(A1E00008): STR R1, SP, 8H
a := 0;b b := 0;c i := 0;d
0004b(40000000): MOV R0, R0, 0H
0005b .PROC 2
0005b(A0E00010): STR R0, SP, 10H
0006c(40000000): MOV R0, R0, 0H
0007c(A0E00014): STR R0, SP, 14H
0008d(40000000): MOV R0, R0, 0H
0009d(A0E0000C): STR R0, SP, CH
WHILE s[i]e # 0X DOf
000Ae .PROC 3
000Ae(80E0000C): LDR R0, SP, CH
000Be(81E00008): LDR R1, SP, 8H
000Ce(01090001): SUB R1, R0, R1
000De(DA072B1C): BLCC MT [trap=1, pos=1835]
000Ee(81E00004): LDR R1, SP, 4H
000Fe(00180000): ADD R0, R1, R0
0010f .PROC 4
0010f(90000000): LDR R0, R0, 0H
0011f(E1000016): BEQ 22 [0028H]
c := b;g b := a;h a := (c MOD 509 +i 1)j * 127 +k ORD(s[i]l);m
0012g(80E00014): LDR R0, SP, 14H
0013g(A0E00018): STR R0, SP, 18H
0014h(80E00010): LDR R0, SP, 10H
0015h(A0E00014): STR R0, SP, 14H
0016i .PROC 5
0016i(80E00018): LDR R0, SP, 18H
0017i(400B01FD): DIV R0, R0, 1FDH
0018i(20000000): MOV' R0, R0, R0
0019j(40080001): ADD R0, R0, 1H
001Ak(400A007F): MUL R0, R0, 7FH
001Bl .PROC 6
001Bl(81E0000C): LDR R1, SP, CH
001Cl(82E00008): LDR R2, SP, 8H
001Dl(02190002): SUB R2, R1, R2
001El(DA076F1C): BLCC MT [trap=1, pos=1903]
001Fl(82E00004): LDR R2, SP, 4H
0020l(01280001): ADD R1, R2, R1
0021m .PROC 7
0021m(91100000): LDR R1, R1, 0H
0022m(00080001): ADD R0, R0, R1
0023m(A0E00010): STR R0, SP, 10H
INC(i)
ENDn;
0024n(80E0000C): LDR R0, SP, CH
0025n(40080001): ADD R0, R0, 1H
0026n(A0E0000C): STR R0, SP, CH
0027n .PROC 8
0027n(E7FFFFE2): B -30 [000AH]
IF b >= 32768 THENo b := b - 65536 ENDp;
0028o(80E00014): LDR R0, SP, 14H
0029o .PROC 9
0029o(40098000): SUB R0, R0, FFFF8000H
002Ao .PROC 10
002Ao(E5000004): BLT 4 [002FH]
002Bp(80E00014): LDR R0, SP, 14H
002Cp .PROC 11
002Cp(61000001): MOV' R1, R0, 1H
002Dp(00090001): SUB R0, R0, R1
002Ep(A0E00014): STR R0, SP, 14H
RETURN b * 65536 +q a
002Fq(80E00014): LDR R0, SP, 14H
0030q(40010010): LSL R0, R0, 10H
ENDr Code;
0031r(81E00010): LDR R1, SP, 10H
0032r(00080001): ADD R0, R0, R1
0033r(8FE00000): LDR LNK, SP, 0H
0034r(4EE8001C): ADD SP, SP, 1CH
0035r(C700000F): B LNK
PROCEDURE SetUser* (VAR user, password: ARRAY OF CHAR);
BEGINs User := user;t Password := Code(password)u
0036s .PROC 19
0036s(4EE90014): SUB SP, SP, 14H
0037s(AFE00000): STR LNK, SP, 0H
0038s .PROC 12
0038s(A0E00004): STR R0, SP, 4H
0039s .PROC 13
0039s(A1E00008): STR R1, SP, 8H
003As .PROC 14
003As(A2E0000C): STR R2, SP, CH
003Bs(A3E00010): STR R3, SP, 10H
003Ct .FIXUP D
003Ct(8D00003C): LDR SB, MT, MOD0 [Oberon]
003Dt(40D8009C): ADD R0, SB, 9CH [data]
003Et .PROC 15
003Et(81E00004): LDR R1, SP, 4H
003Ft .PROC 16
003Ft(82E00008): LDR R2, SP, 8H
0040t .PROC 17
0040t(E100000B): BEQ 11 [004CH]
0041t .PROC 18
0041t(42280003): ADD R2, R2, 3H
0042t(42220002): ASR R2, R2, 2H
0043t(43000002): MOV R3, R0, 2H
0044t(03290003): SUB R3, R2, R3
0045t(DE08283C): BLGT MT [trap=3, pos=2088]
0046t(83100000): LDR R3, R1, 0H
0047t(41180004): ADD R1, R1, 4H
0048t(A3000000): STR R3, R0, 0H
0049t(40080004): ADD R0, R0, 4H
004At(42290001): SUB R2, R2, 1H
004Bt(E9FFFFFA): BNE -6 [0046H]
004Cu(80E0000C): LDR R0, SP, CH
004Du(81E00010): LDR R1, SP, 10H
ENDv SetUser;
004Ev(F7FFFFB1): BL -79 [0000H]
004Fv .FIXUP D
004Fv(8D000013): LDR SB, MT, MOD0 [Oberon]
0050v(A0D000A4): STR R0, SB, A4H [data]
0051v(8FE00000): LDR LNK, SP, 0H
0052v(4EE80014): ADD SP, SP, 14H
0053v(C700000F): B LNK
PROCEDURE Clock*(): LONGINT;
BEGINw RETURN Kernel.Clock()
0054w .PROC 20
0054w(4EE90004): SUB SP, SP, 4H
0055w(AFE00000): STR LNK, SP, 0H
ENDx Clock;
0056x .FIXUP P
0056x(F7112056): BL MOD1 [Kernel] PROC18
0057x(8FE00000): LDR LNK, SP, 0H
0058x(4EE80004): ADD SP, SP, 4H
0059x(C700000F): B LNK
PROCEDURE SetClock* (d: LONGINT);
BEGINy Kernel.SetClock(d)z
005Ay .PROC 21
005Ay(4EE90008): SUB SP, SP, 8H
005By(AFE00000): STR LNK, SP, 0H
005Cy(A0E00004): STR R0, SP, 4H
005Dz(80E00004): LDR R0, SP, 4H
ENDa SetClock;
005Ea .FIXUP P
005Ea(F7113008): BL MOD1 [Kernel] PROC19
005Fa(8FE00000): LDR LNK, SP, 0H
0060a(4EE80008): ADD SP, SP, 8H
0061a(C700000F): B LNK
PROCEDURE Time*(): LONGINT;
BEGINb RETURN Kernel.Time()
0062b .PROC 22
0062b(4EE90004): SUB SP, SP, 4H
0063b(AFE00000): STR LNK, SP, 0H
ENDc Time;
0064c .FIXUP P
0064c(F7111006): BL MOD1 [Kernel] PROC17
0065c(8FE00000): LDR LNK, SP, 0H
0066c(4EE80004): ADD SP, SP, 4H
0067c(C700000F): B LNK
(*cursor handling*)
PROCEDURE FlipArrow (X, Y: INTEGER);
BEGINd
0068d(4EE9000C): SUB SP, SP, CH
0069d(AFE00000): STR LNK, SP, 0H
006Ad(A0E00004): STR R0, SP, 4H
006Bd(A1E00008): STR R1, SP, 8H
IF X < CL THENe
006Ce(80E00004): LDR R0, SP, 4H
006De .FIXUP D
006De(8D00001E): LDR SB, MT, MOD0 [Oberon]
006Ee(81D00114): LDR R1, SB, 114H [data]
006Fe(00090001): SUB R0, R0, R1
0070e(ED00000B): BGE 11 [007CH]
IF X > DW - 15 THENf X := DW - 15 ENDg
0071f .FIXUP D
0071f(8D000004): LDR SB, MT, MOD0 [Oberon]
0072f(80D0010C): LDR R0, SB, 10CH [data]
0073f(4009000F): SUB R0, R0, FH
0074f(81E00004): LDR R1, SP, 4H
0075f(01190000): SUB R1, R1, R0
0076f(E6000004): BLE 4 [007BH]
0077g .FIXUP D
0077g(8D000006): LDR SB, MT, MOD0 [Oberon]
0078g(80D0010C): LDR R0, SB, 10CH [data]
0079g(4009000F): SUB R0, R0, FH
007Ag(A0E00004): STR R0, SP, 4H
ELSE
IFh X > CL + DW -i 15 THENj X := CL + DW -k 15 ENDl
007Bh(E700000E): B 14 [008AH]
007Ci .FIXUP D
007Ci(8D000005): LDR SB, MT, MOD0 [Oberon]
007Di(80D00114): LDR R0, SB, 114H [data]
007Ei(81D0010C): LDR R1, SB, 10CH
007Fi(00080001): ADD R0, R0, R1
0080j(4009000F): SUB R0, R0, FH
0081j(81E00004): LDR R1, SP, 4H
0082j(01190000): SUB R1, R1, R0
0083j(E6000006): BLE 6 [008AH]
0084k .FIXUP D
0084k(8D000008): LDR SB, MT, MOD0 [Oberon]
0085k(80D00114): LDR R0, SB, 114H [data]
0086k(81D0010C): LDR R1, SB, 10CH
0087k(00080001): ADD R0, R0, R1
0088l(4009000F): SUB R0, R0, FH
0089l(A0E00004): STR R0, SP, 4H
END;
IF Y < 14 THENm Y := 14 ELSIFn Yo > DH THENp Y := DH ENDq;
008Am(80E00008): LDR R0, SP, 8H
008Bm(4009000E): SUB R0, R0, EH
008Cm(ED000003): BGE 3 [0090H]
008Dn(4000000E): MOV R0, R0, EH
008En(A0E00008): STR R0, SP, 8H
008Fo(E7000008): B 8 [0098H]
0090p(80E00008): LDR R0, SP, 8H
0091p .FIXUP D
0091p(8D00000D): LDR SB, MT, MOD0 [Oberon]
0092p(81D00110): LDR R1, SB, 110H [data]
0093p(00090001): SUB R0, R0, R1
0094p(E6000003): BLE 3 [0098H]
0095q .FIXUP D
0095q(8D000004): LDR SB, MT, MOD0 [Oberon]
0096q(80D00110): LDR R0, SB, 110H [data]
0097q(A0E00008): STR R0, SP, 8H
Display.CopyPattern(Display.white,r Display.arrow,s X,t Y - 14,u Display.invert)v
0098r(40000001): MOV R0, R0, 1H
0099s .FIXUP D
0099s(8D500004): LDR SB, MT, MOD5 [Display]
009As(81D00006): LDR R1, SB, VAR6
009Bt(82E00004): LDR R2, SP, 4H
009Cu(83E00008): LDR R3, SP, 8H
009Du(4339000E): SUB R3, R3, EH
009Ev(44000002): MOV R4, R0, 2H
ENDw FlipArrow;
009Fw .FIXUP P
009Fw(F751003B): BL MOD5 [Display] PROC16
00A0w(8FE00000): LDR LNK, SP, 0H
00A1w(4EE8000C): ADD SP, SP, CH
00A2w(C700000F): B LNK
PROCEDURE FlipStar (X, Y: INTEGER);
BEGINx
00A3x(4EE9000C): SUB SP, SP, CH
00A4x(AFE00000): STR LNK, SP, 0H
00A5x(A0E00004): STR R0, SP, 4H
00A6x(A1E00008): STR R1, SP, 8H
IF X < CL THENy
00A7y(80E00004): LDR R0, SP, 4H
00A8y .FIXUP D
00A8y(8D00000F): LDR SB, MT, MOD0 [Oberon]
00A9y(81D00114): LDR R1, SB, 114H [data]
00AAy(00090001): SUB R0, R0, R1
00ABy(ED000011): BGE 17 [00BDH]
IF X < 7 THENz X := 7 ELSIFa Xb > DW - 8 THENc X := DW - 8 ENDd
00ACz(80E00004): LDR R0, SP, 4H
00ADz(40090007): SUB R0, R0, 7H
00AEz(ED000003): BGE 3 [00B2H]
00AFa(40000007): MOV R0, R0, 7H
00B0a(A0E00004): STR R0, SP, 4H
00B1b(E700000A): B 10 [00BCH]
00B2c .FIXUP D
00B2c(8D00000A): LDR SB, MT, MOD0 [Oberon]
00B3c(80D0010C): LDR R0, SB, 10CH [data]
00B4c(40090008): SUB R0, R0, 8H
00B5c(81E00004): LDR R1, SP, 4H
00B6c(01190000): SUB R1, R1, R0
00B7c(E6000004): BLE 4 [00BCH]
00B8d .FIXUP D
00B8d(8D000006): LDR SB, MT, MOD0 [Oberon]
00B9d(80D0010C): LDR R0, SB, 10CH [data]
00BAd(40090008): SUB R0, R0, 8H
00BBd(A0E00004): STR R0, SP, 4H
ELSE
IFe X < CL + 7 THENf X := CL + 7 ELSIFg Xh > CL + DW -i 8 THENj X := CL + DW -k 8 ENDl
00BCe(E7000019): B 25 [00D6H]
00BDf .FIXUP D
00BDf(8D000005): LDR SB, MT, MOD0 [Oberon]
00BEf(80D00114): LDR R0, SB, 114H [data]
00BFf(40080007): ADD R0, R0, 7H
00C0f(81E00004): LDR R1, SP, 4H
00C1f(01190000): SUB R1, R1, R0
00C2f(ED000005): BGE 5 [00C8H]
00C3g .FIXUP D
00C3g(8D000006): LDR SB, MT, MOD0 [Oberon]
00C4g(80D00114): LDR R0, SB, 114H [data]
00C5g(40080007): ADD R0, R0, 7H
00C6g(A0E00004): STR R0, SP, 4H
00C7h(E700000E): B 14 [00D6H]
00C8i .FIXUP D
00C8i(8D000005): LDR SB, MT, MOD0 [Oberon]
00C9i(80D00114): LDR R0, SB, 114H [data]
00CAi(81D0010C): LDR R1, SB, 10CH
00CBi(00080001): ADD R0, R0, R1
00CCj(40090008): SUB R0, R0, 8H
00CDj(81E00004): LDR R1, SP, 4H
00CEj(01190000): SUB R1, R1, R0
00CFj(E6000006): BLE 6 [00D6H]
00D0k .FIXUP D
00D0k(8D000008): LDR SB, MT, MOD0 [Oberon]
00D1k(80D00114): LDR R0, SB, 114H [data]
00D2k(81D0010C): LDR R1, SB, 10CH
00D3k(00080001): ADD R0, R0, R1
00D4l(40090008): SUB R0, R0, 8H
00D5l(A0E00004): STR R0, SP, 4H
END ;
IF Y < 7 THENm Y := 7 ELSIFn Yo > DH - 8 THENp Y := DH - 8 ENDq;
00D6m(80E00008): LDR R0, SP, 8H
00D7m(40090007): SUB R0, R0, 7H
00D8m(ED000003): BGE 3 [00DCH]
00D9n(40000007): MOV R0, R0, 7H
00DAn(A0E00008): STR R0, SP, 8H
00DBo(E700000A): B 10 [00E6H]
00DCp .FIXUP D
00DCp(8D00000C): LDR SB, MT, MOD0 [Oberon]
00DDp(80D00110): LDR R0, SB, 110H [data]
00DEp(40090008): SUB R0, R0, 8H
00DFp(81E00008): LDR R1, SP, 8H
00E0p(01190000): SUB R1, R1, R0
00E1p(E6000004): BLE 4 [00E6H]
00E2q .FIXUP D
00E2q(8D000006): LDR SB, MT, MOD0 [Oberon]
00E3q(80D00110): LDR R0, SB, 110H [data]
00E4q(40090008): SUB R0, R0, 8H
00E5q(A0E00008): STR R0, SP, 8H
Display.CopyPattern(Display.white,r Display.star,s X - 7,t Y - 7,u Display.invert)v
00E6r(40000001): MOV R0, R0, 1H
00E7s .FIXUP D
00E7s(8D500005): LDR SB, MT, MOD5 [Display]
00E8s(81D00007): LDR R1, SB, VAR7
00E9t(82E00004): LDR R2, SP, 4H
00EAt(42290007): SUB R2, R2, 7H
00EBu(83E00008): LDR R3, SP, 8H
00ECu(43390007): SUB R3, R3, 7H
00EDv(44000002): MOV R4, R0, 2H
ENDw FlipStar;
00EEw .FIXUP P
00EEw(F751004F): BL MOD5 [Display] PROC16
00EFw(8FE00000): LDR LNK, SP, 0H
00F0w(4EE8000C): ADD SP, SP, CH
00F1w(C700000F): B LNK
PROCEDURE OpenCursor(VAR c: Cursor);
BEGINx c.on := FALSE;y c.X := 0;z c.Y := 0
00F2x(4EE9000C): SUB SP, SP, CH
00F3x(AFE00000): STR LNK, SP, 0H
00F4x(A0E00004): STR R0, SP, 4H
00F5x(A1E00008): STR R1, SP, 8H
00F6y(40000000): MOV R0, R0, 0H
00F7y(81E00004): LDR R1, SP, 4H
00F8y(B0100008): STR R0, R1, 8H
00F9z(40000000): MOV R0, R0, 0H
00FAz(81E00004): LDR R1, SP, 4H
00FBz(A010000C): STR R0, R1, CH
ENDa OpenCursor;
00FCa(40000000): MOV R0, R0, 0H
00FDa(81E00004): LDR R1, SP, 4H
00FEa(A0100010): STR R0, R1, 10H
00FFa(8FE00000): LDR LNK, SP, 0H
0100a(4EE8000C): ADD SP, SP, CH
0101a(C700000F): B LNK
PROCEDURE FadeCursor(VAR c: Cursor);
BEGINb IF c.on THENc c.marker.Fade(c.X,d c.Y)e;f c.on := FALSE ENDg
0102b(4EE9000C): SUB SP, SP, CH
0103b(AFE00000): STR LNK, SP, 0H
0104b(A0E00004): STR R0, SP, 4H
0105b(A1E00008): STR R1, SP, 8H
0106c(80E00004): LDR R0, SP, 4H
0107c(90000008): LDR R0, R0, 8H
0108c(E100000B): BEQ 11 [0114H]
0109d(80E00004): LDR R0, SP, 4H
010Ad(8000000C): LDR R0, R0, CH
010Be(81E00004): LDR R1, SP, 4H
010Ce(81100010): LDR R1, R1, 10H
010Df(82E00004): LDR R2, SP, 4H
010Ef(82200000): LDR R2, R2, 0H
010Ff(D10CEB5C): BLEQ MT [trap=5, pos=3307]
0110f(D7000002): BL R2
0111g(40000000): MOV R0, R0, 0H
0112g(81E00004): LDR R1, SP, 4H
0113g(B0100008): STR R0, R1, 8H
ENDh FadeCursor;
0114h(8FE00000): LDR LNK, SP, 0H
0115h(4EE8000C): ADD SP, SP, CH
0116h(C700000F): B LNK
PROCEDURE DrawCursor(VAR c: Cursor; m: Marker; x, y: INTEGER);
BEGINi
0117i(4EE9001C): SUB SP, SP, 1CH
0118i(AFE00000): STR LNK, SP, 0H
0119i(A0E00004): STR R0, SP, 4H
011Ai(A1E00008): STR R1, SP, 8H
011Bi(A2E0000C): STR R2, SP, CH
011Ci(A3E00010): STR R3, SP, 10H
011Di(A4E00014): STR R4, SP, 14H
011Ei(A5E00018): STR R5, SP, 18H
IF c.on & (j(x # c.X)k OR (ly # c.Y)m OR (nm.Draw # c.marker.Draw)o) THENp
011Fj(80E00004): LDR R0, SP, 4H
0120j(90000008): LDR R0, R0, 8H
0121j(E100001B): BEQ 27 [013DH]
0122k(80E00014): LDR R0, SP, 14H
0123k(81E00004): LDR R1, SP, 4H
0124k(8110000C): LDR R1, R1, CH
0125k(00090001): SUB R0, R0, R1
0126l(E900000B): BNE 11 [0132H]
0127m(80E00018): LDR R0, SP, 18H
0128m(81E00004): LDR R1, SP, 4H
0129m(81100010): LDR R1, R1, 10H
012Am(00090001): SUB R0, R0, R1
012Bn(E9000006): BNE 6 [0132H]
012Co(80E0000C): LDR R0, SP, CH
012Do(80000004): LDR R0, R0, 4H
012Eo(81E00004): LDR R1, SP, 4H
012Fo(81100004): LDR R1, R1, 4H
0130o(00090001): SUB R0, R0, R1
0131p(E100000B): BEQ 11 [013DH]
c.marker.Fade(c.X,q c.Y)r;s c.on := FALSE
0132q(80E00004): LDR R0, SP, 4H
0133q(8000000C): LDR R0, R0, CH
0134r(81E00004): LDR R1, SP, 4H
0135r(81100010): LDR R1, R1, 10H
0136s(82E00004): LDR R2, SP, 4H
0137s(82200000): LDR R2, R2, 0H
0138s(D10DC05C): BLEQ MT [trap=5, pos=3520]
0139s(D7000002): BL R2
ENDt;
013At(40000000): MOV R0, R0, 0H
013Bt(81E00004): LDR R1, SP, 4H
013Ct(B0100008): STR R0, R1, 8H
IF ~c.on THENu
013Du(80E00004): LDR R0, SP, 4H
013Eu(90000008): LDR R0, R0, 8H
013Fu(E9000018): BNE 24 [0158H]
m.Draw(x,v y)w;x c.marker := m;y c.X := x;z c.Y := y;a c.on := TRUE
0140v(80E00014): LDR R0, SP, 14H
0141w(81E00018): LDR R1, SP, 18H
0142x(82E0000C): LDR R2, SP, CH
0143x(82200004): LDR R2, R2, 4H
0144x(D10DFD5C): BLEQ MT [trap=5, pos=3581]
0145x(D7000002): BL R2
0146y(80E00004): LDR R0, SP, 4H
0147y(81E0000C): LDR R1, SP, CH
0148y(42000002): MOV R2, R0, 2H
0149y(83100000): LDR R3, R1, 0H
014Ay(41180004): ADD R1, R1, 4H
014By(A3000000): STR R3, R0, 0H
014Cy(40080004): ADD R0, R0, 4H
014Dy(42290001): SUB R2, R2, 1H
014Ey(E9FFFFFA): BNE -6 [0149H]
014Fz(80E00014): LDR R0, SP, 14H
0150z(81E00004): LDR R1, SP, 4H
0151z(A010000C): STR R0, R1, CH
0152a(80E00018): LDR R0, SP, 18H
0153a(81E00004): LDR R1, SP, 4H
0154a(A0100010): STR R0, R1, 10H
ENDb
0155b(40000001): MOV R0, R0, 1H
0156b(81E00004): LDR R1, SP, 4H
0157b(B0100008): STR R0, R1, 8H
ENDc DrawCursor;
0158c(8FE00000): LDR LNK, SP, 0H
0159c(4EE8001C): ADD SP, SP, 1CH
015Ac(C700000F): B LNK
PROCEDURE DrawMouse*(m: Marker; x, y: INTEGER);
BEGINd DrawCursor(Mouse,e m,f x,g y)h
015Bd .PROC 23
015Bd(4EE90014): SUB SP, SP, 14H
015Cd(AFE00000): STR LNK, SP, 0H
015Dd(A0E00004): STR R0, SP, 4H
015Ed(A1E00008): STR R1, SP, 8H
015Fd(A2E0000C): STR R2, SP, CH
0160d(A3E00010): STR R3, SP, 10H
0161e .FIXUP D
0161e(8D00007A): LDR SB, MT, MOD0 [Oberon]
0162e(40D800B8): ADD R0, SB, B8H [data]
0163e(41D80014): ADD R1, SB, 14H
0164f(82E00004): LDR R2, SP, 4H
0165f(83E00008): LDR R3, SP, 8H
0166g(84E0000C): LDR R4, SP, CH
0167h(85E00010): LDR R5, SP, 10H
ENDi DrawMouse;
0168i(F7FFFFAE): BL -82 [0117H]
0169i(8FE00000): LDR LNK, SP, 0H
016Ai(4EE80014): ADD SP, SP, 14H
016Bi(C700000F): B LNK
PROCEDURE DrawMouseArrow*(x, y: INTEGER);
BEGINj DrawCursor(Mouse,k Arrow,l x,m y)n
016Cj .PROC 24
016Cj(4EE9000C): SUB SP, SP, CH
016Dj(AFE00000): STR LNK, SP, 0H
016Ej(A0E00004): STR R0, SP, 4H
016Fj(A1E00008): STR R1, SP, 8H
0170k .FIXUP D
0170k(8D00000F): LDR SB, MT, MOD0 [Oberon]
0171k(40D800B8): ADD R0, SB, B8H [data]
0172k(41D80014): ADD R1, SB, 14H
0173l(42D800A8): ADD R2, SB, A8H
0174l(43D80000): ADD R3, SB, 0H
0175m(84E00004): LDR R4, SP, 4H
0176n(85E00008): LDR R5, SP, 8H
ENDo DrawMouseArrow;
0177o(F7FFFF9F): BL -97 [0117H]
0178o(8FE00000): LDR LNK, SP, 0H
0179o(4EE8000C): ADD SP, SP, CH
017Ao(C700000F): B LNK
PROCEDURE FadeMouse*;
BEGINp FadeCursor(Mouse)q
017Bp .PROC 25
017Bp .COMMAND FadeMouse
017Bp(4EE90004): SUB SP, SP, 4H
017Cp(AFE00000): STR LNK, SP, 0H
017Dq .FIXUP D
017Dq(8D00000D): LDR SB, MT, MOD0 [Oberon]
017Eq(40D800B8): ADD R0, SB, B8H [data]
017Fq(41D80014): ADD R1, SB, 14H
ENDr FadeMouse;
0180r(F7FFFF81): BL -127 [0102H]
0181r(8FE00000): LDR LNK, SP, 0H
0182r(4EE80004): ADD SP, SP, 4H
0183r(C700000F): B LNK
PROCEDURE DrawPointer*(x, y: INTEGER);
BEGINs DrawCursor(Pointer,t Star,u x,v y)w
0184s .PROC 26
0184s(4EE9000C): SUB SP, SP, CH
0185s(AFE00000): STR LNK, SP, 0H
0186s(A0E00004): STR R0, SP, 4H
0187s(A1E00008): STR R1, SP, 8H
0188t .FIXUP D
0188t(8D00000B): LDR SB, MT, MOD0 [Oberon]
0189t(40D800CC): ADD R0, SB, CCH [data]
018At(41D80014): ADD R1, SB, 14H
018Bu(42D800B0): ADD R2, SB, B0H
018Cu(43D80000): ADD R3, SB, 0H
018Dv(84E00004): LDR R4, SP, 4H
018Ew(85E00008): LDR R5, SP, 8H
ENDx DrawPointer;
018Fx(F7FFFF87): BL -121 [0117H]
0190x(8FE00000): LDR LNK, SP, 0H
0191x(4EE8000C): ADD SP, SP, CH
0192x(C700000F): B LNK
(*display management*)
PROCEDURE RemoveMarks* (X, Y, W, H: INTEGER);
BEGINy
0193y .PROC 27
0193y(4EE90014): SUB SP, SP, 14H
0194y(AFE00000): STR LNK, SP, 0H
0195y(A0E00004): STR R0, SP, 4H
0196y(A1E00008): STR R1, SP, 8H
0197y(A2E0000C): STR R2, SP, CH
0198y(A3E00010): STR R3, SP, 10H
IF (Mouse.X > X - 16)z & (aMouse.X < X + W +b 16)c & (dMouse.Y > Y - 16)e & (fMouse.Y < Y + H +g 16)h THENi
0199z(80E00004): LDR R0, SP, 4H
019Az(40090010): SUB R0, R0, 10H
019Bz .FIXUP D
019Bz(8D000013): LDR SB, MT, MOD0 [Oberon]
019Cz(81D000C4): LDR R1, SB, C4H [data]
019Dz(01190000): SUB R1, R1, R0
019Ea(E600001A): BLE 26 [01B9H]
019Fb(80E00004): LDR R0, SP, 4H
01A0b(81E0000C): LDR R1, SP, CH
01A1b(00080001): ADD R0, R0, R1
01A2c(40080010): ADD R0, R0, 10H
01A3c .FIXUP D
01A3c(8D000008): LDR SB, MT, MOD0 [Oberon]
01A4c(81D000C4): LDR R1, SB, C4H [data]
01A5c(01190000): SUB R1, R1, R0
01A6d(ED000012): BGE 18 [01B9H]
01A7e(80E00008): LDR R0, SP, 8H
01A8e(40090010): SUB R0, R0, 10H
01A9e .FIXUP D
01A9e(8D000006): LDR SB, MT, MOD0 [Oberon]
01AAe(81D000C8): LDR R1, SB, C8H [data]
01ABe(01190000): SUB R1, R1, R0
01ACf(E600000C): BLE 12 [01B9H]
01ADg(80E00008): LDR R0, SP, 8H
01AEg(81E00010): LDR R1, SP, 10H
01AFg(00080001): ADD R0, R0, R1
01B0h(40080010): ADD R0, R0, 10H
01B1h .FIXUP D
01B1h(8D000008): LDR SB, MT, MOD0 [Oberon]
01B2h(81D000C8): LDR R1, SB, C8H [data]
01B3h(01190000): SUB R1, R1, R0
01B4i(ED000004): BGE 4 [01B9H]
FadeCursor(Mouse)j
01B5j .FIXUP D
01B5j(8D000004): LDR SB, MT, MOD0 [Oberon]
01B6j(40D800B8): ADD R0, SB, B8H [data]
01B7j(41D80014): ADD R1, SB, 14H
ENDk;
01B8k(F7FFFF49): BL -183 [0102H]
IF (Pointer.X > X - 8)l & (mPointer.X < X + W +n 8)o & (pPointer.Y > Y - 8)q & (rPointer.Y < Y + H +s 8)t THENu
01B9l(80E00004): LDR R0, SP, 4H
01BAl(40090008): SUB R0, R0, 8H
01BBl .FIXUP D
01BBl(8D000006): LDR SB, MT, MOD0 [Oberon]
01BCl(81D000D8): LDR R1, SB, D8H [data]
01BDl(01190000): SUB R1, R1, R0
01BEm(E600001A): BLE 26 [01D9H]
01BFn(80E00004): LDR R0, SP, 4H
01C0n(81E0000C): LDR R1, SP, CH
01C1n(00080001): ADD R0, R0, R1
01C2o(40080008): ADD R0, R0, 8H
01C3o .FIXUP D
01C3o(8D000008): LDR SB, MT, MOD0 [Oberon]
01C4o(81D000D8): LDR R1, SB, D8H [data]
01C5o(01190000): SUB R1, R1, R0
01C6p(ED000012): BGE 18 [01D9H]
01C7q(80E00008): LDR R0, SP, 8H
01C8q(40090008): SUB R0, R0, 8H
01C9q .FIXUP D
01C9q(8D000006): LDR SB, MT, MOD0 [Oberon]
01CAq(81D000DC): LDR R1, SB, DCH [data]
01CBq(01190000): SUB R1, R1, R0
01CCr(E600000C): BLE 12 [01D9H]
01CDs(80E00008): LDR R0, SP, 8H
01CEs(81E00010): LDR R1, SP, 10H
01CFs(00080001): ADD R0, R0, R1
01D0t(40080008): ADD R0, R0, 8H
01D1t .FIXUP D
01D1t(8D000008): LDR SB, MT, MOD0 [Oberon]
01D2t(81D000DC): LDR R1, SB, DCH [data]
01D3t(01190000): SUB R1, R1, R0
01D4u(ED000004): BGE 4 [01D9H]
FadeCursor(Pointer)v
01D5v .FIXUP D
01D5v(8D000004): LDR SB, MT, MOD0 [Oberon]
01D6v(40D800CC): ADD R0, SB, CCH [data]
01D7v(41D80014): ADD R1, SB, 14H
ENDw
01D8w(F7FFFF29): BL -215 [0102H]
ENDx RemoveMarks;
01D9x(8FE00000): LDR LNK, SP, 0H
01DAx(4EE80014): ADD SP, SP, 14H
01DBx(C700000F): B LNK
PROCEDURE HandleFiller (V: Display.Frame; VAR M: Display.FrameMsg);
BEGINy
01DCy(4EE90010): SUB SP, SP, 10H
01DDy(AFE00000): STR LNK, SP, 0H
01DEy(A0E00004): STR R0, SP, 4H
01DFy(A1E00008): STR R1, SP, 8H
01E0y(A2E0000C): STR R2, SP, CH
CASE M OF
InputMsg:z IF M.id = track THENa DrawCursor(Mouse,b Arrow,c M.X,d M.Y)e ENDf |
01E1z(80E0000C): LDR R0, SP, CH
01E2z(80000004): LDR R0, R0, 4H
01E3z .FIXUP D
01E3z(8D00000E): LDR SB, MT, MOD0 [Oberon]
01E4z(41D80028): ADD R1, SB, 28H [data]
01E5z(01190000): SUB R1, R1, R0
01E6z(E900000F): BNE 15 [01F6H]
01E7a(80E00008): LDR R0, SP, 8H
01E8a(80000000): LDR R0, R0, 0H
01E9a(40090001): SUB R0, R0, 1H
01EAa(E900000A): BNE 10 [01F5H]
01EBb .FIXUP D
01EBb(8D000008): LDR SB, MT, MOD0 [Oberon]
01ECb(40D800B8): ADD R0, SB, B8H [data]
01EDb(41D80014): ADD R1, SB, 14H
01EEc(42D800A8): ADD R2, SB, A8H
01EFc(43D80000): ADD R3, SB, 0H
01F0d(84E00008): LDR R4, SP, 8H
01F1d(84400008): LDR R4, R4, 8H
01F2e(85E00008): LDR R5, SP, 8H
01F3e(8550000C): LDR R5, R5, CH
01F4f(F7FFFF22): BL -222 [0117H]
ControlMsgg:h IF M.id = mark THENi DrawCursor(Pointer,j Star,k M.X,l M.Y)m ENDn |
01F5g(E7000070): B 112 [0266H]
01F6h(80E0000C): LDR R0, SP, CH
01F7h(80000004): LDR R0, R0, 4H
01F8h .FIXUP D
01F8h(8D00000D): LDR SB, MT, MOD0 [Oberon]
01F9h(41D80058): ADD R1, SB, 58H [data]
01FAh(01190000): SUB R1, R1, R0
01FBh(E900000F): BNE 15 [020BH]
01FCi(80E00008): LDR R0, SP, 8H
01FDi(80000000): LDR R0, R0, 0H
01FEi(40090002): SUB R0, R0, 2H
01FFi(E900000A): BNE 10 [020AH]
0200j .FIXUP D
0200j(8D000008): LDR SB, MT, MOD0 [Oberon]
0201j(40D800CC): ADD R0, SB, CCH [data]
0202j(41D80014): ADD R1, SB, 14H
0203k(42D800B0): ADD R2, SB, B0H
0204k(43D80000): ADD R3, SB, 0H
0205l(84E00008): LDR R4, SP, 8H
0206l(84400004): LDR R4, R4, 4H
0207m(85E00008): LDR R5, SP, 8H
0208m(85500008): LDR R5, R5, 8H
0209n(F7FFFF0D): BL -243 [0117H]
Viewerso.ViewerMsg:p
020Ao(E700005B): B 91 [0266H]
020Bp(80E0000C): LDR R0, SP, CH
020Cp(80000004): LDR R0, R0, 4H
020Dp .FIXUP D
020Dp(8D60000D): LDR SB, MT, MOD6 [Viewers]
020Ep(41D80002): ADD R1, SB, VAR2
020Fp(01190000): SUB R1, R1, R0
0210p(E9000055): BNE 85 [0266H]
IF (M.id = Viewers.restore)q & (rV.Ws > 0)t & (uV.Hv > 0)w THENx
0211q(80E00008): LDR R0, SP, 8H
0212q(80000000): LDR R0, R0, 0H
0213r(E9000027): BNE 39 [023BH]
0214s(80E00004): LDR R0, SP, 4H
0215s(D112714C): BLEQ MT [trap=4, pos=4721]
0216t(80000010): LDR R0, R0, 10H
0217t(40090000): SUB R0, R0, 0H
0218u(E6000022): BLE 34 [023BH]
0219v(80E00004): LDR R0, SP, 4H
021Av(D1127D4C): BLEQ MT [trap=4, pos=4733]
021Bw(80000014): LDR R0, R0, 14H
021Cw(40090000): SUB R0, R0, 0H
021Dx(E600001D): BLE 29 [023BH]
RemoveMarks(V.Xy,z V.Ya,b V.Wc,d V.He)f;g
021Ey(80E00004): LDR R0, SP, 4H
021Fy(D1129F4C): BLEQ MT [trap=4, pos=4767]
0220z(80000008): LDR R0, R0, 8H
0221a(81E00004): LDR R1, SP, 4H
0222a(D112A44C): BLEQ MT [trap=4, pos=4772]
0223b(8110000C): LDR R1, R1, CH
0224c(82E00004): LDR R2, SP, 4H
0225c(D112A94C): BLEQ MT [trap=4, pos=4777]
0226d(82200010): LDR R2, R2, 10H
0227e(83E00004): LDR R3, SP, 4H
0228e(D112AE4C): BLEQ MT [trap=4, pos=4782]
0229f(83300014): LDR R3, R3, 14H
022Ag(F7FFFF68): BL -152 [0193H]
Display.ReplConst(Display.black,h V.Xi,j V.Yk,l V.Wm,n V.Ho,p Display.replace)q
022Bh(40000000): MOV R0, R0, 0H
022Ci(81E00004): LDR R1, SP, 4H
022Di(D112DD4C): BLEQ MT [trap=4, pos=4829]
022Ej(81100008): LDR R1, R1, 8H
022Fk(82E00004): LDR R2, SP, 4H
0230k(D112E24C): BLEQ MT [trap=4, pos=4834]
0231l(8220000C): LDR R2, R2, CH
0232m(83E00004): LDR R3, SP, 4H
0233m(D112E74C): BLEQ MT [trap=4, pos=4839]
0234n(83300010): LDR R3, R3, 10H
0235o(84E00004): LDR R4, SP, 4H
0236o(D112EC4C): BLEQ MT [trap=4, pos=4844]
0237p(84400014): LDR R4, R4, 14H
0238q(45000000): MOV R5, R0, 0H
ELSIFr (sM.id = Viewers.modify)t & (uM.Y < V.Yv)w THENx
0239r .FIXUP P
0239r(F750F14B): BL MOD5 [Display] PROC15
023As(E700002B): B 43 [0266H]
023Bt(80E00008): LDR R0, SP, 8H
023Ct(80000000): LDR R0, R0, 0H
023Dt(40090001): SUB R0, R0, 1H
023Eu(E9000027): BNE 39 [0266H]
023Fv(80E00004): LDR R0, SP, 4H
0240v(D1132F4C): BLEQ MT [trap=4, pos=4911]
0241w(81E00008): LDR R1, SP, 8H
0242w(81100008): LDR R1, R1, 8H
0243w(8000000C): LDR R0, R0, CH
0244w(01190000): SUB R1, R1, R0
0245x(ED000020): BGE 32 [0266H]
RemoveMarks(V.Xy,z M.Y,a V.Wb,c V.Yd - M.Y)e;f
0246y(80E00004): LDR R0, SP, 4H
0247y(D1134D4C): BLEQ MT [trap=4, pos=4941]
0248z(80000008): LDR R0, R0, 8H
0249a(81E00008): LDR R1, SP, 8H
024Aa(81100008): LDR R1, R1, 8H
024Bb(82E00004): LDR R2, SP, 4H
024Cb(D113574C): BLEQ MT [trap=4, pos=4951]
024Dc(82200010): LDR R2, R2, 10H
024Ed(83E00004): LDR R3, SP, 4H
024Fd(D1135C4C): BLEQ MT [trap=4, pos=4956]
0250e(8330000C): LDR R3, R3, CH
0251e(84E00008): LDR R4, SP, 8H
0252e(84400008): LDR R4, R4, 8H
0253e(03390004): SUB R3, R3, R4
0254f(F7FFFF3E): BL -194 [0193H]
Display.ReplConst(Display.black,g V.Xh,i M.Y,j V.Wk,l V.Ym - M.Y,n Display.replace)o
0255g(40000000): MOV R0, R0, 0H
0256h(81E00004): LDR R1, SP, 4H
0257h(D113914C): BLEQ MT [trap=4, pos=5009]
0258i(81100008): LDR R1, R1, 8H
0259j(82E00008): LDR R2, SP, 8H
025Aj(82200008): LDR R2, R2, 8H
025Bk(83E00004): LDR R3, SP, 4H
025Ck(D1139B4C): BLEQ MT [trap=4, pos=5019]
025Dl(83300010): LDR R3, R3, 10H
025Em(84E00004): LDR R4, SP, 4H
025Fm(D113A04C): BLEQ MT [trap=4, pos=5024]
0260n(8440000C): LDR R4, R4, CH
0261n(85E00008): LDR R5, SP, 8H
0262n(85500008): LDR R5, R5, 8H
0263n(04490005): SUB R4, R4, R5
0264o(45000000): MOV R5, R0, 0H
ENDp
0265p .FIXUP P
0265p(F750F02C): BL MOD5 [Display] PROC15
END
ENDq HandleFiller;
0266q(8FE00000): LDR LNK, SP, 0H
0267q(4EE80010): ADD SP, SP, 10H
0268q(C700000F): B LNK
PROCEDURE OpenDisplay* (UW, SW, H: INTEGER);
VAR Filler: Viewers.Viewer;
BEGINr
0269r .PROC 28
0269r(4EE90014): SUB SP, SP, 14H
026Ar(AFE00000): STR LNK, SP, 0H
026Br(A0E00004): STR R0, SP, 4H
026Cr(A1E00008): STR R1, SP, 8H
026Dr(A2E0000C): STR R2, SP, CH
Input.SetMouseLimits(Viewers.curW + UW +s SW,t H)u;v
026Es .FIXUP D
026Es(8D600061): LDR SB, MT, MOD6 [Viewers]
026Fs(80D00003): LDR R0, SB, VAR3
0270s(81E00004): LDR R1, SP, 4H
0271s(00080001): ADD R0, R0, R1
0272t(81E00008): LDR R1, SP, 8H
0273t(00080001): ADD R0, R0, R1
0274u(81E0000C): LDR R1, SP, CH
0275v .FIXUP P
0275v(F7404010): BL MOD4 [Input] PROC4
Display.ReplConst(Display.black,w Viewers.curW,x 0,y UW + SW,z H,a Display.replace)b;c
0276w(40000000): MOV R0, R0, 0H
0277x .FIXUP D
0277x(8D600009): LDR SB, MT, MOD6 [Viewers]
0278x(81D00003): LDR R1, SB, VAR3
0279y(42000000): MOV R2, R0, 0H
027Az(83E00004): LDR R3, SP, 4H
027Bz(84E00008): LDR R4, SP, 8H
027Cz(03380004): ADD R3, R3, R4
027Da(84E0000C): LDR R4, SP, CH
027Eb(45000000): MOV R5, R0, 0H
027Fc .FIXUP P
027Fc(F750F00A): BL MOD5 [Display] PROC15
NEW(Filler);d Filler.handlee := HandleFiller;f
0280d(40E80010): ADD R0, SP, 10H
0281d .FIXUP D
0281d(8D60000A): LDR SB, MT, MOD6 [Viewers]
0282d(41D80001): ADD R1, SB, VAR1
0283d(D714D30C): BL MT [trap=0, pos=5331]
0284e(80E00010): LDR R0, SP, 10H
0285e(D114E14C): BLEQ MT [trap=4, pos=5345]
0286f(F7000000): BL 0 [0287H]
0287f(41F902AC): SUB R1, LNK, 2ACH
0288f(A1000018): STR R1, R0, 18H
Viewers.InitTrack(UW,g H,h Filler)i;j (*init user track*)
0289g(80E00004): LDR R0, SP, 4H
028Ah(81E0000C): LDR R1, SP, CH
028Bi(82E00010): LDR R2, SP, 10H
028Cj .FIXUP P
028Cj(F760C00D): BL MOD6 [Viewers] PROC12
NEW(Filler);k Filler.handlel := HandleFiller;m
028Dk(40E80010): ADD R0, SP, 10H
028Ek .FIXUP D
028Ek(8D60000D): LDR SB, MT, MOD6 [Viewers]
028Fk(41D80001): ADD R1, SB, VAR1
0290k(D7153F0C): BL MT [trap=0, pos=5439]
0291l(80E00010): LDR R0, SP, 10H
0292l(D1154D4C): BLEQ MT [trap=4, pos=5453]
0293m(F7000000): BL 0 [0294H]
0294m(41F902E0): SUB R1, LNK, 2E0H
0295m(A1000018): STR R1, R0, 18H
Viewers.InitTrack(SW,n H,o Filler)p (*init system track*)
0296n(80E00008): LDR R0, SP, 8H
0297o(81E0000C): LDR R1, SP, CH
0298p(82E00010): LDR R2, SP, 10H
ENDq OpenDisplay;
0299q .FIXUP P
0299q(F760C00D): BL MOD6 [Viewers] PROC12
029Aq(8FE00000): LDR LNK, SP, 0H
029Bq(4EE80014): ADD SP, SP, 14H
029Cq(C700000F): B LNK
PROCEDURE DisplayWidth* (X: INTEGER): INTEGER;
BEGINr RETURN DW
029Dr .PROC 29
029Dr(4EE90008): SUB SP, SP, 8H
029Er(AFE00000): STR LNK, SP, 0H
029Fr(A0E00004): STR R0, SP, 4H
ENDs DisplayWidth;
02A0s .FIXUP D
02A0s(8D000012): LDR SB, MT, MOD0 [Oberon]
02A1s(80D0010C): LDR R0, SB, 10CH [data]
02A2s(8FE00000): LDR LNK, SP, 0H
02A3s(4EE80008): ADD SP, SP, 8H
02A4s(C700000F): B LNK
PROCEDURE DisplayHeight* (X: INTEGER): INTEGER;
BEGINt RETURN DH
02A5t .PROC 30
02A5t(4EE90008): SUB SP, SP, 8H
02A6t(AFE00000): STR LNK, SP, 0H
02A7t(A0E00004): STR R0, SP, 4H
ENDu DisplayHeight;
02A8u .FIXUP D
02A8u(8D000008): LDR SB, MT, MOD0 [Oberon]
02A9u(80D00110): LDR R0, SB, 110H [data]
02AAu(8FE00000): LDR LNK, SP, 0H
02ABu(4EE80008): ADD SP, SP, 8H
02ACu(C700000F): B LNK
PROCEDURE OpenTrack* (X, W: INTEGER);
VAR Filler: Viewers.Viewer;
BEGINv
02ADv .PROC 31
02ADv(4EE90010): SUB SP, SP, 10H
02AEv(AFE00000): STR LNK, SP, 0H
02AFv(A0E00004): STR R0, SP, 4H
02B0v(A1E00008): STR R1, SP, 8H
NEW(Filler);w Filler.handlex := HandleFiller;y
02B1w(40E8000C): ADD R0, SP, CH
02B2w .FIXUP D
02B2w(8D60000A): LDR SB, MT, MOD6 [Viewers]
02B3w(41D80001): ADD R1, SB, VAR1
02B4w(D716C10C): BL MT [trap=0, pos=5825]
02B5x(80E0000C): LDR R0, SP, CH
02B6x(D116CF4C): BLEQ MT [trap=4, pos=5839]
02B7y(F7000000): BL 0 [02B8H]
02B8y(41F90370): SUB R1, LNK, 370H
02B9y(A1000018): STR R1, R0, 18H
Viewers.OpenTrack(X,z W,a Filler)b
02BAz(80E00004): LDR R0, SP, 4H
02BBa(81E00008): LDR R1, SP, 8H
02BCb(82E0000C): LDR R2, SP, CH
ENDc OpenTrack;
02BDc .FIXUP P
02BDc(F760D024): BL MOD6 [Viewers] PROC13
02BEc(8FE00000): LDR LNK, SP, 0H
02BFc(4EE80010): ADD SP, SP, 10H
02C0c(C700000F): B LNK
PROCEDURE UserTrack* (X: INTEGER): INTEGER;
BEGINd RETURN X DIV DW *e DW
02C1d .PROC 32
02C1d(4EE90008): SUB SP, SP, 8H
02C2d(AFE00000): STR LNK, SP, 0H
02C3d(A0E00004): STR R0, SP, 4H
02C4e .FIXUP D
02C4e(8D000012): LDR SB, MT, MOD0 [Oberon]
02C5e(80D0010C): LDR R0, SB, 10CH [data]
02C6e(D6175E6C): BLLE MT [trap=6, pos=5982]
02C7e(81E00004): LDR R1, SP, 4H
02C8e(001B0000): DIV R0, R1, R0
ENDf UserTrack;
02C9f(81D0010C): LDR R1, SB, 10CH
02CAf(000A0001): MUL R0, R0, R1
02CBf(8FE00000): LDR LNK, SP, 0H
02CCf(4EE80008): ADD SP, SP, 8H
02CDf(C700000F): B LNK
PROCEDURE SystemTrack* (X: INTEGER): INTEGER;
BEGINg RETURN X DIV DW *h DW +i DW DIV 8 *j 5
02CEg .PROC 33
02CEg(4EE90008): SUB SP, SP, 8H
02CFg(AFE00000): STR LNK, SP, 0H
02D0g(A0E00004): STR R0, SP, 4H
02D1h .FIXUP D
02D1h(8D00000D): LDR SB, MT, MOD0 [Oberon]
02D2h(80D0010C): LDR R0, SB, 10CH [data]
02D3h(D617BD6C): BLLE MT [trap=6, pos=6077]
02D4h(81E00004): LDR R1, SP, 4H
02D5h(001B0000): DIV R0, R1, R0
02D6i(81D0010C): LDR R1, SB, 10CH
02D7i(000A0001): MUL R0, R0, R1
02D8j(81D0010C): LDR R1, SB, 10CH
02D9j(41120003): ASR R1, R1, 3H
ENDk SystemTrack;
02DAk(411A0005): MUL R1, R1, 5H
02DBk(00080001): ADD R0, R0, R1
02DCk(8FE00000): LDR LNK, SP, 0H
02DDk(4EE80008): ADD SP, SP, 8H
02DEk(C700000F): B LNK
PROCEDURE UY (X: INTEGER): INTEGER;
VAR h: INTEGER;
fil, bot, alt, max: Display.Frame;
BEGINl
02DFl(4EE9001C): SUB SP, SP, 1CH
02E0l(AFE00000): STR LNK, SP, 0H
02E1l(A0E00004): STR R0, SP, 4H
Viewers.Locate(X,m 0,n fil,o bot,p alt,q max)r;s
02E2m(80E00004): LDR R0, SP, 4H
02E3n(41000000): MOV R1, R0, 0H
02E4o(42E8000C): ADD R2, SP, CH
02E5p(43E80010): ADD R3, SP, 10H
02E6q(44E80014): ADD R4, SP, 14H
02E7r(45E80018): ADD R5, SP, 18H
02E8s .FIXUP P
02E8s(F760B02B): BL MOD6 [Viewers] PROC11
IF fil.Ht >= DH DIV 8 THENu h := DH ELSEv hw := max.Yx + max.Hy DIV 2 ENDz ;
02E9t(80E0000C): LDR R0, SP, CH
02EAt(D118894C): BLEQ MT [trap=4, pos=6281]
02EBu .FIXUP D
02EBu(8D00001A): LDR SB, MT, MOD0 [Oberon]
02ECu(81D00110): LDR R1, SB, 110H [data]
02EDu(41120003): ASR R1, R1, 3H
02EEu(80000014): LDR R0, R0, 14H
02EFu(00090001): SUB R0, R0, R1
02F0u(E5000004): BLT 4 [02F5H]
02F1v .FIXUP D
02F1v(8D000006): LDR SB, MT, MOD0 [Oberon]
02F2v(80D00110): LDR R0, SB, 110H [data]
02F3v(A0E00008): STR R0, SP, 8H
02F4w(E7000009): B 9 [02FEH]
02F5x(80E00018): LDR R0, SP, 18H
02F6x(D118B24C): BLEQ MT [trap=4, pos=6322]
02F7y(81E00018): LDR R1, SP, 18H
02F8y(D118BA4C): BLEQ MT [trap=4, pos=6330]
02F9z(81100014): LDR R1, R1, 14H
02FAz(41120001): ASR R1, R1, 1H
02FBz(8000000C): LDR R0, R0, CH
02FCz(00080001): ADD R0, R0, R1
02FDz(A0E00008): STR R0, SP, 8H
RETURN h
ENDa UY;
02FEa(80E00008): LDR R0, SP, 8H
02FFa(8FE00000): LDR LNK, SP, 0H
0300a(4EE8001C): ADD SP, SP, 1CH
0301a(C700000F): B LNK
PROCEDURE AllocateUserViewer* (DX: INTEGER; VAR X, Y: INTEGER);
BEGINb
0302b .PROC 34
0302b(4EE90010): SUB SP, SP, 10H
0303b(AFE00000): STR LNK, SP, 0H
0304b(A0E00004): STR R0, SP, 4H
0305b(A1E00008): STR R1, SP, 8H
0306b(A2E0000C): STR R2, SP, CH
IF Pointer.on THENc X := Pointer.X;d Y := Pointer.Y
0307c .FIXUP D
0307c(8D000016): LDR SB, MT, MOD0 [Oberon]
0308c(90D000D4): LDR R0, SB, D4H [data]
0309c(E1000008): BEQ 8 [0312H]
030Ad .FIXUP D
030Ad(8D000003): LDR SB, MT, MOD0 [Oberon]
030Bd(80D000D8): LDR R0, SB, D8H [data]
030Cd(81E00008): LDR R1, SP, 8H
030Dd(A0100000): STR R0, R1, 0H
ELSEe Xf := DX DIV DW *g DW;h Y := UY(X)i
030Ee(80D000DC): LDR R0, SB, DCH
030Fe(81E0000C): LDR R1, SP, CH
0310e(A0100000): STR R0, R1, 0H
0311f(E700000E): B 14 [0320H]
0312g .FIXUP D
0312g(8D000008): LDR SB, MT, MOD0 [Oberon]
0313g(80D0010C): LDR R0, SB, 10CH [data]
0314g(D619786C): BLLE MT [trap=6, pos=6520]
0315g(81E00004): LDR R1, SP, 4H
0316g(001B0000): DIV R0, R1, R0
0317h(81D0010C): LDR R1, SB, 10CH
0318h(000A0001): MUL R0, R0, R1
0319h(81E00008): LDR R1, SP, 8H
031Ah(A0100000): STR R0, R1, 0H
031Bi(80E00008): LDR R0, SP, 8H
031Ci(80000000): LDR R0, R0, 0H
ENDj
031Dj(F7FFFFC1): BL -63 [02DFH]
031Ej(81E0000C): LDR R1, SP, CH
031Fj(A0100000): STR R0, R1, 0H
ENDk AllocateUserViewer;
0320k(8FE00000): LDR LNK, SP, 0H
0321k(4EE80010): ADD SP, SP, 10H
0322k(C700000F): B LNK
PROCEDURE SY (X: INTEGER): INTEGER;
VAR H0, H1, H2, H3, y: INTEGER;
fil, bot, alt, max: Display.Frame;
BEGINl H3 := DH - DH DIV 3;m
0323l(4EE9002C): SUB SP, SP, 2CH
0324l(AFE00000): STR LNK, SP, 0H
0325l(A0E00004): STR R0, SP, 4H
0326m .FIXUP D
0326m(8D000014): LDR SB, MT, MOD0 [Oberon]
0327m(80D00110): LDR R0, SB, 110H [data]
0328m(400B0003): DIV R0, R0, 3H
0329m(81D00110): LDR R1, SB, 110H
032Am(00190000): SUB R0, R1, R0
032Bm(A0E00014): STR R0, SP, 14H
H2 := H3 - H3 DIV 2;n H1 := DH DIV 5;o H0 := DH DIV 10;p
032Cn(80E00014): LDR R0, SP, 14H
032Dn(40020001): ASR R0, R0, 1H
032En(81E00014): LDR R1, SP, 14H
032Fn(00190000): SUB R0, R1, R0
0330n(A0E00010): STR R0, SP, 10H
0331o(80D00110): LDR R0, SB, 110H
0332o(400B0005): DIV R0, R0, 5H
0333o(A0E0000C): STR R0, SP, CH
0334p(80D00110): LDR R0, SB, 110H
0335p(400B000A): DIV R0, R0, AH
0336p(A0E00008): STR R0, SP, 8H
Viewers.Locate(X,q DH,r fil,s bot,t alt,u max)v;w
0337q(80E00004): LDR R0, SP, 4H
0338r(81D00110): LDR R1, SB, 110H
0339s(42E8001C): ADD R2, SP, 1CH
033At(43E80020): ADD R3, SP, 20H
033Bu(44E80024): ADD R4, SP, 24H
033Cv(45E80028): ADD R5, SP, 28H
033Dw .FIXUP P
033Dw(F760B055): BL MOD6 [Viewers] PROC11
IF fil.Hx >= DH DIV 8 THENy y := DH
033Ex(80E0001C): LDR R0, SP, 1CH
033Fx(D11AB04C): BLEQ MT [trap=4, pos=6832]
0340y .FIXUP D
0340y(8D00001A): LDR SB, MT, MOD0 [Oberon]
0341y(81D00110): LDR R1, SB, 110H [data]
0342y(41120003): ASR R1, R1, 3H
0343y(80000014): LDR R0, R0, 14H
0344y(00090001): SUB R0, R0, R1
0345y(E5000004): BLT 4 [034AH]
ELSIFz maxa.Hb >= DH - H0 THENc y := max.Yd + H3
0346z .FIXUP D
0346z(8D000006): LDR SB, MT, MOD0 [Oberon]
0347z(80D00110): LDR R0, SB, 110H [data]
0348z(A0E00018): STR R0, SP, 18H
0349a(E7000051): B 81 [039BH]
034Ab(80E00028): LDR R0, SP, 28H
034Bb(D11AD94C): BLEQ MT [trap=4, pos=6873]
034Cc .FIXUP D
034Cc(8D000006): LDR SB, MT, MOD0 [Oberon]
034Dc(81D00110): LDR R1, SB, 110H [data]
034Ec(82E00008): LDR R2, SP, 8H
034Fc(01190002): SUB R1, R1, R2
0350c(80000014): LDR R0, R0, 14H
0351c(00090001): SUB R0, R0, R1
0352c(E5000007): BLT 7 [035AH]
0353d(80E00028): LDR R0, SP, 28H
0354d(D11AF44C): BLEQ MT [trap=4, pos=6900]
ELSIFe maxf.Hg >= H3 - H0 THENh y := max.Yi + H2
0355e(8000000C): LDR R0, R0, CH
0356e(81E00014): LDR R1, SP, 14H
0357e(00080001): ADD R0, R0, R1
0358e(A0E00018): STR R0, SP, 18H
0359f(E7000041): B 65 [039BH]
035Ag(80E00028): LDR R0, SP, 28H
035Bg(D11B094C): BLEQ MT [trap=4, pos=6921]
035Ch(81E00014): LDR R1, SP, 14H
035Dh(82E00008): LDR R2, SP, 8H
035Eh(01190002): SUB R1, R1, R2
035Fh(80000014): LDR R0, R0, 14H
0360h(00090001): SUB R0, R0, R1
0361h(E5000007): BLT 7 [0369H]
0362i(80E00028): LDR R0, SP, 28H
0363i(D11B244C): BLEQ MT [trap=4, pos=6948]
ELSIFj maxk.Hl >= H2 - H0 THENm y := max.Yn + H1
0364j(8000000C): LDR R0, R0, CH
0365j(81E00010): LDR R1, SP, 10H
0366j(00080001): ADD R0, R0, R1
0367j(A0E00018): STR R0, SP, 18H
0368k(E7000032): B 50 [039BH]
0369l(80E00028): LDR R0, SP, 28H
036Al(D11B394C): BLEQ MT [trap=4, pos=6969]
036Bm(81E00010): LDR R1, SP, 10H
036Cm(82E00008): LDR R2, SP, 8H
036Dm(01190002): SUB R1, R1, R2
036Em(80000014): LDR R0, R0, 14H
036Fm(00090001): SUB R0, R0, R1
0370m(E5000007): BLT 7 [0378H]
0371n(80E00028): LDR R0, SP, 28H
0372n(D11B544C): BLEQ MT [trap=4, pos=6996]
ELSIFo maxp # bot THENq y := max.Yr + max.Hs DIV 2
0373o(8000000C): LDR R0, R0, CH
0374o(81E0000C): LDR R1, SP, CH
0375o(00080001): ADD R0, R0, R1
0376o(A0E00018): STR R0, SP, 18H
0377p(E7000023): B 35 [039BH]
0378q(80E00028): LDR R0, SP, 28H
0379q(81E00020): LDR R1, SP, 20H
037Aq(00090001): SUB R0, R0, R1
037Bq(E100000A): BEQ 10 [0386H]
037Cr(80E00028): LDR R0, SP, 28H
037Dr(D11B7D4C): BLEQ MT [trap=4, pos=7037]
037Es(81E00028): LDR R1, SP, 28H
037Fs(D11B854C): BLEQ MT [trap=4, pos=7045]
ELSIFt botu.Hv >= H1 THENw y := bot.Hx DIV 2
0380t(81100014): LDR R1, R1, 14H
0381t(41120001): ASR R1, R1, 1H
0382t(8000000C): LDR R0, R0, CH
0383t(00080001): ADD R0, R0, R1
0384t(A0E00018): STR R0, SP, 18H
0385u(E7000015): B 21 [039BH]
0386v(80E00020): LDR R0, SP, 20H
0387v(D11B9B4C): BLEQ MT [trap=4, pos=7067]
0388w(80000014): LDR R0, R0, 14H
0389w(81E0000C): LDR R1, SP, CH
038Aw(00090001): SUB R0, R0, R1
038Bw(E5000006): BLT 6 [0392H]
038Cx(80E00020): LDR R0, SP, 20H
038Dx(D11BB14C): BLEQ MT [trap=4, pos=7089]
ELSEy yz := alt.Ya + alt.Hb DIV 2
038Ey(80000014): LDR R0, R0, 14H
038Fy(40020001): ASR R0, R0, 1H
0390y(A0E00018): STR R0, SP, 18H
0391z(E7000009): B 9 [039BH]
0392a(80E00024): LDR R0, SP, 24H
0393a(D11BCB4C): BLEQ MT [trap=4, pos=7115]
0394b(81E00024): LDR R1, SP, 24H
0395b(D11BD34C): BLEQ MT [trap=4, pos=7123]
ENDc ;
0396c(81100014): LDR R1, R1, 14H
0397c(41120001): ASR R1, R1, 1H
0398c(8000000C): LDR R0, R0, CH
0399c(00080001): ADD R0, R0, R1
039Ac(A0E00018): STR R0, SP, 18H
RETURN y
ENDd SY;
039Bd(80E00018): LDR R0, SP, 18H
039Cd(8FE00000): LDR LNK, SP, 0H
039Dd(4EE8002C): ADD SP, SP, 2CH
039Ed(C700000F): B LNK
PROCEDURE AllocateSystemViewer* (DX: INTEGER; VAR X, Y: INTEGER);
BEGINe
039Fe .PROC 35
039Fe(4EE90010): SUB SP, SP, 10H
03A0e(AFE00000): STR LNK, SP, 0H
03A1e(A0E00004): STR R0, SP, 4H
03A2e(A1E00008): STR R1, SP, 8H
03A3e(A2E0000C): STR R2, SP, CH
IF Pointer.on THENf X := Pointer.X;g Y := Pointer.Y
03A4f .FIXUP D
03A4f(8D000058): LDR SB, MT, MOD0 [Oberon]
03A5f(90D000D4): LDR R0, SB, D4H [data]
03A6f(E1000008): BEQ 8 [03AFH]
03A7g .FIXUP D
03A7g(8D000003): LDR SB, MT, MOD0 [Oberon]
03A8g(80D000D8): LDR R0, SB, D8H [data]
03A9g(81E00008): LDR R1, SP, 8H
03AAg(A0100000): STR R0, R1, 0H
ELSEh Xi := DX DIV DW *j DW +k DW DIV 8 *l 5;m Y := SY(X)n
03ABh(80D000DC): LDR R0, SB, DCH
03ACh(81E0000C): LDR R1, SP, CH
03ADh(A0100000): STR R0, R1, 0H
03AEi(E7000012): B 18 [03C1H]
03AFj .FIXUP D
03AFj(8D000008): LDR SB, MT, MOD0 [Oberon]
03B0j(80D0010C): LDR R0, SB, 10CH [data]
03B1j(D61C976C): BLLE MT [trap=6, pos=7319]
03B2j(81E00004): LDR R1, SP, 4H
03B3j(001B0000): DIV R0, R1, R0
03B4k(81D0010C): LDR R1, SB, 10CH
03B5k(000A0001): MUL R0, R0, R1
03B6l(81D0010C): LDR R1, SB, 10CH
03B7l(41120003): ASR R1, R1, 3H
03B8m(411A0005): MUL R1, R1, 5H
03B9m(00080001): ADD R0, R0, R1
03BAm(81E00008): LDR R1, SP, 8H
03BBm(A0100000): STR R0, R1, 0H
03BCn(80E00008): LDR R0, SP, 8H
03BDn(80000000): LDR R0, R0, 0H
ENDo
03BEo(F7FFFF64): BL -156 [0323H]
03BFo(81E0000C): LDR R1, SP, CH
03C0o(A0100000): STR R0, R1, 0H
ENDp AllocateSystemViewer;
03C1p(8FE00000): LDR LNK, SP, 0H
03C2p(4EE80010): ADD SP, SP, 10H
03C3p(C700000F): B LNK
PROCEDURE MarkedViewer* (): Viewers.Viewer;
BEGINq RETURN Viewers.This(Pointer.X,r Pointer.Y)s
03C4q .PROC 36
03C4q(4EE90004): SUB SP, SP, 4H
03C5q(AFE00000): STR LNK, SP, 0H
03C6r .FIXUP D
03C6r(8D000017): LDR SB, MT, MOD0 [Oberon]
03C7r(80D000D8): LDR R0, SB, D8H [data]
03C8s(81D000DC): LDR R1, SB, DCH
ENDt MarkedViewer;
03C9t .FIXUP P
03C9t(F760908C): BL MOD6 [Viewers] PROC9
03CAt(8FE00000): LDR LNK, SP, 0H
03CBt(4EE80004): ADD SP, SP, 4H
03CCt(C700000F): B LNK
PROCEDURE PassFocus* (V: Viewers.Viewer);
VAR M: ControlMsg;
BEGINu M.id := defocus;v FocusViewer.handlew(FocusViewerx,y M)z;a FocusViewer := V
03CDu .PROC 37
03CDu(4EE90014): SUB SP, SP, 14H
03CEu(AFE00000): STR LNK, SP, 0H
03CFu(A0E00004): STR R0, SP, 4H
03D0v(40000000): MOV R0, R0, 0H
03D1v(A0E00008): STR R0, SP, 8H
03D2w .FIXUP D
03D2w(8D00000C): LDR SB, MT, MOD0 [Oberon]
03D3w(80D000E0): LDR R0, SB, E0H [data]
03D4w(D11DBE4C): BLEQ MT [trap=4, pos=7614]
03D5x(80000018): LDR R0, R0, 18H
03D6x(4EE90004): SUB SP, SP, 4H
03D7x(A0E00000): STR R0, SP, 0H
03D8y(80D000E0): LDR R0, SB, E0H
03D9z(41E8000C): ADD R1, SP, CH
03DAz(42D80058): ADD R2, SB, 58H
03DBa(83E00000): LDR R3, SP, 0H
03DCa(4EE80004): ADD SP, SP, 4H
03DDa(D11DCF5C): BLEQ MT [trap=5, pos=7631]
03DEa(D7000003): BL R3
ENDb PassFocus;
03DFb(80E00004): LDR R0, SP, 4H
03E0b .FIXUP D
03E0b(8D00000E): LDR SB, MT, MOD0 [Oberon]
03E1b(A0D000E0): STR R0, SB, E0H [data]
03E2b(8FE00000): LDR LNK, SP, 0H
03E3b(4EE80014): ADD SP, SP, 14H
03E4b(C700000F): B LNK
PROCEDURE OpenLog*(T: Texts.Text);
BEGINc Log := T
03E5c .PROC 38
03E5c(4EE90008): SUB SP, SP, 8H
03E6c(AFE00000): STR LNK, SP, 0H
03E7c(A0E00004): STR R0, SP, 4H
ENDd OpenLog;
03E8d(80E00004): LDR R0, SP, 4H
03E9d .FIXUP D
03E9d(8D000009): LDR SB, MT, MOD0 [Oberon]
03EAd(A0D000E4): STR R0, SB, E4H [data]
03EBd(8FE00000): LDR LNK, SP, 0H
03ECd(4EE80008): ADD SP, SP, 8H
03EDd(C700000F): B LNK
(*command interpretation*)
PROCEDURE SetPar*(F: Display.Frame; T: Texts.Text; pos: LONGINT);
BEGINe Par.vwr := Viewers.This(F.Xf,g F.Yh)i;j Par.frame := F;k Par.text := T;l Par.pos := pos
03EEe .PROC 39
03EEe(4EE90010): SUB SP, SP, 10H
03EFe(AFE00000): STR LNK, SP, 0H
03F0e(A0E00004): STR R0, SP, 4H
03F1e(A1E00008): STR R1, SP, 8H
03F2e(A2E0000C): STR R2, SP, CH
03F3f(80E00004): LDR R0, SP, 4H
03F4f(D11EBD4C): BLEQ MT [trap=4, pos=7869]
03F5g(80000008): LDR R0, R0, 8H
03F6h(81E00004): LDR R1, SP, 4H
03F7h(D11EC24C): BLEQ MT [trap=4, pos=7874]
03F8i(8110000C): LDR R1, R1, CH
03F9j .FIXUP P
03F9j(F7609030): BL MOD6 [Viewers] PROC9
03FAj .FIXUP D
03FAj(8D000011): LDR SB, MT, MOD0 [Oberon]
03FBj(A0D000E8): STR R0, SB, E8H [data]
03FCk(80E00004): LDR R0, SP, 4H
03FDk(A0D000EC): STR R0, SB, ECH
03FEl(80E00008): LDR R0, SP, 8H
03FFl(A0D000F0): STR R0, SB, F0H
ENDm SetPar;
0400m(80E0000C): LDR R0, SP, CH
0401m(A0D000F4): STR R0, SB, F4H
0402m(8FE00000): LDR LNK, SP, 0H
0403m(4EE80010): ADD SP, SP, 10H
0404m(C700000F): B LNK
PROCEDURE Call* (name: ARRAY OF CHAR; VAR res: INTEGER);
VAR mod: Modules.Module; P: Modules.Command;
i, j: INTEGER; ch: CHAR;
Mname, Cname: ARRAY 32 OF CHAR;
BEGINn i := 0;o ch := name[0]p;q
0405n .PROC 40
0405n(4EE90064): SUB SP, SP, 64H
0406n(AFE00000): STR LNK, SP, 0H
0407n(A0E00004): STR R0, SP, 4H
0408n(A1E00008): STR R1, SP, 8H
0409n(A2E0000C): STR R2, SP, CH
040Ao(40000000): MOV R0, R0, 0H
040Bo(A0E00018): STR R0, SP, 18H
040Cp(40000000): MOV R0, R0, 0H
040Dp(81E00008): LDR R1, SP, 8H
040Ep(01090001): SUB R1, R0, R1
040Fp(DA1FD01C): BLCC MT [trap=1, pos=8144]
0410p(81E00004): LDR R1, SP, 4H
0411p(00180000): ADD R0, R1, R0
0412q(90000000): LDR R0, R0, 0H
0413q(B0E00020): STR R0, SP, 20H
WHILE (ch # ".")r & (sch # 0X)t DOu Mname[i]v := ch;w INC(i);x ch := name[i]y ENDz ;
0414r(90E00020): LDR R0, SP, 20H
0415r(4009002E): SUB R0, R0, 2EH
0416s(E1000014): BEQ 20 [042BH]
0417t(90E00020): LDR R0, SP, 20H
0418u(E1000012): BEQ 18 [042BH]
0419v(80E00018): LDR R0, SP, 18H
041Av(41090020): SUB R1, R0, 20H
041Bv(DA1FFE1C): BLCC MT [trap=1, pos=8190]
041Cv(00E80000): ADD R0, SP, R0
041Dw(91E00020): LDR R1, SP, 20H
041Ew(B1000024): STR R1, R0, 24H
041Fx(80E00018): LDR R0, SP, 18H
0420x(40080001): ADD R0, R0, 1H
0421x(A0E00018): STR R0, SP, 18H
0422y(80E00018): LDR R0, SP, 18H
0423y(81E00008): LDR R1, SP, 8H
0424y(01090001): SUB R1, R0, R1
0425y(DA201B1C): BLCC MT [trap=1, pos=8219]
0426y(81E00004): LDR R1, SP, 4H
0427y(00180000): ADD R0, R1, R0
0428z(90000000): LDR R0, R0, 0H
0429z(B0E00020): STR R0, SP, 20H
042Az(E7FFFFE9): B -23 [0414H]
IF ch = "." THENa
042Ba(90E00020): LDR R0, SP, 20H
042Ca(4009002E): SUB R0, R0, 2EH
042Da(E900004E): BNE 78 [047CH]
Mname[i]b := 0X;c INC(i);d
042Eb(80E00018): LDR R0, SP, 18H
042Fb(41090020): SUB R1, R0, 20H
0430b(DA20451C): BLCC MT [trap=1, pos=8261]
0431b(00E80000): ADD R0, SP, R0
0432c(41000000): MOV R1, R0, 0H
0433c(B1000024): STR R1, R0, 24H
0434d(80E00018): LDR R0, SP, 18H
0435d(40080001): ADD R0, R0, 1H
0436d(A0E00018): STR R0, SP, 18H
Modules.Load(Mname,e mod)f;g res := Modules.res;h
0437e(40E80024): ADD R0, SP, 24H
0438e(41000020): MOV R1, R0, 20H
0439f(42E80010): ADD R2, SP, 10H
043Ag .FIXUP P
043Ag(F7308041): BL MOD3 [Modules] PROC8
043Bh .FIXUP D
043Bh(8D300041): LDR SB, MT, MOD3 [Modules]
043Ch(80D00005): LDR R0, SB, VAR5
043Dh(81E0000C): LDR R1, SP, CH
043Eh(A0100000): STR R0, R1, 0H
IF Modules.res = 0 THENi
043Fi .FIXUP D
043Fi(8D300004): LDR SB, MT, MOD3 [Modules]
0440i(80D00005): LDR R0, SB, VAR5
0441i(E9000039): BNE 57 [047BH]
j := 0;j ch := name[i]k;l INC(i);m
0442j(40000000): MOV R0, R0, 0H
0443j(A0E0001C): STR R0, SP, 1CH
0444k(80E00018): LDR R0, SP, 18H
0445k(81E00008): LDR R1, SP, 8H
0446k(01090001): SUB R1, R0, R1
0447k(DA20C41C): BLCC MT [trap=1, pos=8388]
0448k(81E00004): LDR R1, SP, 4H
0449k(00180000): ADD R0, R1, R0
044Al(90000000): LDR R0, R0, 0H
044Bl(B0E00020): STR R0, SP, 20H
044Cm(80E00018): LDR R0, SP, 18H
044Dm(40080001): ADD R0, R0, 1H
044Em(A0E00018): STR R0, SP, 18H
WHILE ch # 0X DOn Cname[j]o := ch;p INC(j);q ch := name[i]r;s INC(i) ENDt ;
044Fn(90E00020): LDR R0, SP, 20H
0450n(E1000015): BEQ 21 [0466H]
0451o(80E0001C): LDR R0, SP, 1CH
0452o(41090020): SUB R1, R0, 20H
0453o(DA20EF1C): BLCC MT [trap=1, pos=8431]
0454o(00E80000): ADD R0, SP, R0
0455p(91E00020): LDR R1, SP, 20H
0456p(B1000044): STR R1, R0, 44H
0457q(80E0001C): LDR R0, SP, 1CH
0458q(40080001): ADD R0, R0, 1H
0459q(A0E0001C): STR R0, SP, 1CH
045Ar(80E00018): LDR R0, SP, 18H
045Br(81E00008): LDR R1, SP, 8H
045Cr(01090001): SUB R1, R0, R1
045Dr(DA210C1C): BLCC MT [trap=1, pos=8460]
045Er(81E00004): LDR R1, SP, 4H
045Fr(00180000): ADD R0, R1, R0
0460s(90000000): LDR R0, R0, 0H
0461s(B0E00020): STR R0, SP, 20H
0462t(80E00018): LDR R0, SP, 18H
0463t(40080001): ADD R0, R0, 1H
0464t(A0E00018): STR R0, SP, 18H
0465t(E7FFFFE9): B -23 [044FH]
Cname[j]u := 0X;v
0466u(80E0001C): LDR R0, SP, 1CH
0467u(41090020): SUB R1, R0, 20H
0468u(DA212B1C): BLCC MT [trap=1, pos=8491]
0469u(00E80000): ADD R0, SP, R0
046Av(41000000): MOV R1, R0, 0H
046Bv(B1000044): STR R1, R0, 44H
P := Modules.ThisCommand(mod,w Cname)x;y res := Modules.res;z
046Cw(80E00010): LDR R0, SP, 10H
046Dx(41E80044): ADD R1, SP, 44H
046Ex(42000020): MOV R2, R0, 20H
046Fy .FIXUP P
046Fy(F7309035): BL MOD3 [Modules] PROC9
0470y(A0E00014): STR R0, SP, 14H
0471z .FIXUP D
0471z(8D300032): LDR SB, MT, MOD3 [Modules]
0472z(80D00005): LDR R0, SB, VAR5
0473z(81E0000C): LDR R1, SP, CH
0474z(A0100000): STR R0, R1, 0H
IF Modules.res = 0 THENa P ENDb
0475a .FIXUP D
0475a(8D300004): LDR SB, MT, MOD3 [Modules]
0476a(80D00005): LDR R0, SB, VAR5
0477a(E9000003): BNE 3 [047BH]
0478b(80E00014): LDR R0, SP, 14H
0479b(D1219A5C): BLEQ MT [trap=5, pos=8602]
047Ab(D7000000): BL R0
END
ELSE resc := 5
047Bc(E7000003): B 3 [047FH]
ENDd
047Cd(40000005): MOV R0, R0, 5H
047Dd(81E0000C): LDR R1, SP, CH
047Ed(A0100000): STR R0, R1, 0H
ENDe Call;
047Fe(8FE00000): LDR LNK, SP, 0H
0480e(4EE80064): ADD SP, SP, 64H
0481e(C700000F): B LNK
PROCEDURE GetSelection* (VAR text: Texts.Text; VAR beg, end, time: LONGINT);
VAR M: SelectionMsg;
BEGINf
0482f .PROC 41
0482f(4EE90024): SUB SP, SP, 24H
0483f(AFE00000): STR LNK, SP, 0H
0484f(A0E00004): STR R0, SP, 4H
0485f(A1E00008): STR R1, SP, 8H
0486f(A2E0000C): STR R2, SP, CH
0487f(A3E00010): STR R3, SP, 10H
M.time := -1;g Viewers.Broadcast(M)h;i time := M.time;j
0488g(5000FFFF): MOV R0, R0, FFFFFFFFH
0489g(A0E00014): STR R0, SP, 14H
048Ah(40E80014): ADD R0, SP, 14H
048Bh .FIXUP D
048Bh(8D000016): LDR SB, MT, MOD0 [Oberon]
048Ch(41D80040): ADD R1, SB, 40H [data]
048Di .FIXUP P
048Di(F760F01E): BL MOD6 [Viewers] PROC15
048Ej(80E00014): LDR R0, SP, 14H
048Fj(81E00010): LDR R1, SP, 10H
0490j(A0100000): STR R0, R1, 0H
IF time >= 0 THENk text := M.text;l beg := M.beg;m end := M.end ENDn
0491k(80E00010): LDR R0, SP, 10H
0492k(80000000): LDR R0, R0, 0H
0493k(40090000): SUB R0, R0, 0H
0494k(E5000009): BLT 9 [049EH]
0495l(80E00018): LDR R0, SP, 18H
0496l(81E00004): LDR R1, SP, 4H
0497l(A0100000): STR R0, R1, 0H
0498m(80E0001C): LDR R0, SP, 1CH
0499m(81E00008): LDR R1, SP, 8H
049Am(A0100000): STR R0, R1, 0H
049Bn(80E00020): LDR R0, SP, 20H
049Cn(81E0000C): LDR R1, SP, CH
049Dn(A0100000): STR R0, R1, 0H
ENDo GetSelection;
049Eo(8FE00000): LDR LNK, SP, 0H
049Fo(4EE80024): ADD SP, SP, 24H
04A0o(C700000F): B LNK
PROCEDURE GC;
VAR mod: Modules.Module;
BEGINp
04A1p(4EE90008): SUB SP, SP, 8H
04A2p(AFE00000): STR LNK, SP, 0H
IF (ActCnt <= 0)q OR (rKernel.allocated >= Kernel.heapLim - Kernel.heapOrg -s 10000H)t THENu
04A3q .FIXUP D
04A3q(8D000018): LDR SB, MT, MOD0 [Oberon]
04A4q(80D00118): LDR R0, SB, 118H [data]
04A5q(40090000): SUB R0, R0, 0H
04A6r(E600000B): BLE 11 [04B2H]
04A7s .FIXUP D
04A7s(8D100004): LDR SB, MT, MOD1 [Kernel]
04A8s(80D00004): LDR R0, SB, VAR4
04A9s .FIXUP D
04A9s(8D100002): LDR SB, MT, MOD1 [Kernel]
04AAs(81D00003): LDR R1, SB, VAR3
04ABs(00090001): SUB R0, R0, R1
04ACt(61000001): MOV' R1, R0, 1H
04ADt(00090001): SUB R0, R0, R1
04AEt .FIXUP D
04AEt(8D100005): LDR SB, MT, MOD1 [Kernel]
04AFt(81D00001): LDR R1, SB, VAR1
04B0t(01190000): SUB R1, R1, R0
04B1u(E5000023): BLT 35 [04D5H]
mod := Modules.root;v LED(21H);w
04B2v .FIXUP D
04B2v(8D300004): LDR SB, MT, MOD3 [Modules]
04B3v(80D00002): LDR R0, SB, VAR2
04B4v(A0E00004): STR R0, SP, 4H
04B5w(40000021): MOV R0, R0, 21H
04B6w(5100FFC4): MOV R1, R0, FFFFFFC4H
04B7w(A0100000): STR R0, R1, 0H
WHILE mod # NIL DOx
04B8x(80E00004): LDR R0, SP, 4H
04B9x(E100000D): BEQ 13 [04C7H]
IF mod.namey[0] # 0X THENz Kernel.Mark(mod.ptra)b ENDc ;
04BAy(80E00004): LDR R0, SP, 4H
04BBy(D123B04C): BLEQ MT [trap=4, pos=9136]
04BCz(90000000): LDR R0, R0, 0H
04BDz(E1000004): BEQ 4 [04C2H]
04BEa(80E00004): LDR R0, SP, 4H
04BFa(D123D14C): BLEQ MT [trap=4, pos=9169]
04C0b(80000048): LDR R0, R0, 48H
04C1c .FIXUP P
04C1c(F7109034): BL MOD1 [Kernel] PROC9
mod := mod.nextd
04C2d(80E00004): LDR R0, SP, 4H
04C3d(D123F04C): BLEQ MT [trap=4, pos=9200]
ENDe ;
04C4e(80000020): LDR R0, R0, 20H
04C5e(A0E00004): STR R0, SP, 4H
04C6e(E7FFFFF1): B -15 [04B8H]
LED(23H);f
04C7f(40000023): MOV R0, R0, 23H
04C8f(5100FFC4): MOV R1, R0, FFFFFFC4H
04C9f(A0100000): STR R0, R1, 0H
Files.RestoreList;g LED(27H);h
04CAg .FIXUP P
04CAg(F721F009): BL MOD2 [Files] PROC31
04CBh(40000027): MOV R0, R0, 27H
04CCh(5100FFC4): MOV R1, R0, FFFFFFC4H
04CDh(A0100000): STR R0, R1, 0H
Kernel.Scan;i LED(20H);j
04CEi .FIXUP P
04CEi(F710A004): BL MOD1 [Kernel] PROC10
04CFj(40000020): MOV R0, R0, 20H
04D0j(5100FFC4): MOV R1, R0, FFFFFFC4H
04D1j(A0100000): STR R0, R1, 0H
ActCnt := BasicCycle
ENDk
04D2k(40000014): MOV R0, R0, 14H
04D3k .FIXUP D
04D3k(8D000021): LDR SB, MT, MOD0 [Oberon]
04D4k(A0D00118): STR R0, SB, 118H [data]
ENDl GC;
04D5l(8FE00000): LDR LNK, SP, 0H
04D6l(4EE80008): ADD SP, SP, 8H
04D7l(C700000F): B LNK
PROCEDURE NewTask*(h: Handler; period: INTEGER): Task;
VAR t: Task;
BEGINm NEW(t);n t.stateo := off;p t.nextq := t;r t.handles := h;t t.periodu := period;v RETURN t
04D8m .PROC 42
04D8m(4EE90010): SUB SP, SP, 10H
04D9m(AFE00000): STR LNK, SP, 0H
04DAm(A0E00004): STR R0, SP, 4H
04DBm(A1E00008): STR R1, SP, 8H
04DCn(40E8000C): ADD R0, SP, CH
04DDn .FIXUP D
04DDn(8D00000A): LDR SB, MT, MOD0 [Oberon]
04DEn(41D80084): ADD R1, SB, 84H [data]
04DFn(D724D40C): BL MT [trap=0, pos=9428]
04E0o(80E0000C): LDR R0, SP, CH
04E1o(D124DC4C): BLEQ MT [trap=4, pos=9436]
04E2p(41000000): MOV R1, R0, 0H
04E3p(A1000000): STR R1, R0, 0H
04E4q(80E0000C): LDR R0, SP, CH
04E5q(D124EB4C): BLEQ MT [trap=4, pos=9451]
04E6r(81E0000C): LDR R1, SP, CH
04E7r(A100000C): STR R1, R0, CH
04E8s(80E0000C): LDR R0, SP, CH
04E9s(D124FA4C): BLEQ MT [trap=4, pos=9466]
04EAt(81E00004): LDR R1, SP, 4H
04EBt(A1000010): STR R1, R0, 10H
04ECu(80E0000C): LDR R0, SP, CH
04EDu(D125094C): BLEQ MT [trap=4, pos=9481]
04EEv(81E00008): LDR R1, SP, 8H
04EFv(A1000008): STR R1, R0, 8H
ENDw NewTask;
04F0w(80E0000C): LDR R0, SP, CH
04F1w(8FE00000): LDR LNK, SP, 0H
04F2w(4EE80010): ADD SP, SP, 10H
04F3w(C700000F): B LNK
PROCEDURE Install* (T: Task);
BEGINx
04F4x .PROC 43
04F4x(4EE90008): SUB SP, SP, 8H
04F5x(AFE00000): STR LNK, SP, 0H
04F6x(A0E00004): STR R0, SP, 4H
IF T.statey = off THENz
04F7y(80E00004): LDR R0, SP, 4H
04F8y(D125664C): BLEQ MT [trap=4, pos=9574]
04F9z(80000000): LDR R0, R0, 0H
04FAz(E9000017): BNE 23 [0512H]
T.nexta := CurTask.nextb;c CurTask.nextd := T;e T.statef := idle;g T.nextTimeh := 0;i INC(NofTasks)
04FBa(80E00004): LDR R0, SP, 4H
04FCa(D1257E4C): BLEQ MT [trap=4, pos=9598]
04FDb .FIXUP D
04FDb(8D000020): LDR SB, MT, MOD0 [Oberon]
04FEb(81D00108): LDR R1, SB, 108H [data]
04FFb(D1258E4C): BLEQ MT [trap=4, pos=9614]
0500c(8110000C): LDR R1, R1, CH
0501c(A100000C): STR R1, R0, CH
0502d(80D00108): LDR R0, SB, 108H
0503d(D1259C4C): BLEQ MT [trap=4, pos=9628]
0504e(81E00004): LDR R1, SP, 4H
0505e(A100000C): STR R1, R0, CH
0506f(80E00004): LDR R0, SP, 4H
0507f(D125AA4C): BLEQ MT [trap=4, pos=9642]
0508g(41000001): MOV R1, R0, 1H
0509g(A1000000): STR R1, R0, 0H
050Ah(80E00004): LDR R0, SP, 4H
050Bh(D125BE4C): BLEQ MT [trap=4, pos=9662]
050Ci(41000000): MOV R1, R0, 0H
050Di(A1000004): STR R1, R0, 4H
ENDj
050Ej(40D80104): ADD R0, SB, 104H
050Fj(81000000): LDR R1, R0, 0H
0510j(41180001): ADD R1, R1, 1H
0511j(A1000000): STR R1, R0, 0H
ENDk Install;
0512k(8FE00000): LDR LNK, SP, 0H
0513k(4EE80008): ADD SP, SP, 8H
0514k(C700000F): B LNK
PROCEDURE Remove* (T: Task);
VAR t: Task;
BEGINl
0515l .PROC 44
0515l(4EE9000C): SUB SP, SP, CH
0516l(AFE00000): STR LNK, SP, 0H
0517l(A0E00004): STR R0, SP, 4H
IF T.statem # off THENn t := T;o
0518m(80E00004): LDR R0, SP, 4H
0519m(D126314C): BLEQ MT [trap=4, pos=9777]
051An(80000000): LDR R0, R0, 0H
051Bn(E1000022): BEQ 34 [053EH]
051Co(80E00004): LDR R0, SP, 4H
051Do(A0E00008): STR R0, SP, 8H
WHILE t.nextp # T DOq t := t.nextr ENDs ;
051Ep(80E00008): LDR R0, SP, 8H
051Fp(D126574C): BLEQ MT [trap=4, pos=9815]
0520q(8000000C): LDR R0, R0, CH
0521q(81E00004): LDR R1, SP, 4H
0522q(00090001): SUB R0, R0, R1
0523q(E1000005): BEQ 5 [0529H]
0524r(80E00008): LDR R0, SP, 8H
0525r(D1266A4C): BLEQ MT [trap=4, pos=9834]
0526s(8000000C): LDR R0, R0, CH
0527s(A0E00008): STR R0, SP, 8H
0528s(E7FFFFF5): B -11 [051EH]
t.nextt := T.nextu;v T.statew := off;x T.nexty := NIL;z CurTask := t;a DEC(NofTasks)
0529t(80E00008): LDR R0, SP, 8H
052At(D1267D4C): BLEQ MT [trap=4, pos=9853]
052Bu(81E00004): LDR R1, SP, 4H
052Cu(D126874C): BLEQ MT [trap=4, pos=9863]
052Dv(8110000C): LDR R1, R1, CH
052Ev(A100000C): STR R1, R0, CH
052Fw(80E00004): LDR R0, SP, 4H
0530w(D126904C): BLEQ MT [trap=4, pos=9872]
0531x(41000000): MOV R1, R0, 0H
0532x(A1000000): STR R1, R0, 0H
0533y(80E00004): LDR R0, SP, 4H
0534y(D1269F4C): BLEQ MT [trap=4, pos=9887]
0535z(41000000): MOV R1, R0, 0H
0536z(A100000C): STR R1, R0, CH
0537a(80E00008): LDR R0, SP, 8H
0538a .FIXUP D
0538a(8D00003B): LDR SB, MT, MOD0 [Oberon]
0539a(A0D00108): STR R0, SB, 108H [data]
ENDb
053Ab(40D80104): ADD R0, SB, 104H
053Bb(81000000): LDR R1, R0, 0H
053Cb(41190001): SUB R1, R1, 1H
053Db(A1000000): STR R1, R0, 0H
ENDc Remove;
053Ec(8FE00000): LDR LNK, SP, 0H
053Fc(4EE8000C): ADD SP, SP, CH
0540c(C700000F): B LNK
PROCEDURE Collect* (count: INTEGER);
BEGINd ActCnt := count
0541d .PROC 45
0541d(4EE90008): SUB SP, SP, 8H
0542d(AFE00000): STR LNK, SP, 0H
0543d(A0E00004): STR R0, SP, 4H
ENDe Collect;
0544e(80E00004): LDR R0, SP, 4H
0545e .FIXUP D
0545e(8D00000D): LDR SB, MT, MOD0 [Oberon]
0546e(A0D00118): STR R0, SB, 118H [data]
0547e(8FE00000): LDR LNK, SP, 0H
0548e(4EE80008): ADD SP, SP, 8H
0549e(C700000F): B LNK
PROCEDURE SetFont* (fnt: Fonts.Font);
BEGINf CurFnt := fnt
054Af .PROC 46
054Af(4EE90008): SUB SP, SP, 8H
054Bf(AFE00000): STR LNK, SP, 0H
054Cf(A0E00004): STR R0, SP, 4H
ENDg SetFont;
054Dg(80E00004): LDR R0, SP, 4H
054Eg .FIXUP D
054Eg(8D000009): LDR SB, MT, MOD0 [Oberon]
054Fg(A0D000F8): STR R0, SB, F8H [data]
0550g(8FE00000): LDR LNK, SP, 0H
0551g(4EE80008): ADD SP, SP, 8H
0552g(C700000F): B LNK
PROCEDURE SetColor* (col: INTEGER);
BEGINh CurCol := col
0553h .PROC 47
0553h(4EE90008): SUB SP, SP, 8H
0554h(AFE00000): STR LNK, SP, 0H
0555h(A0E00004): STR R0, SP, 4H
ENDi SetColor;
0556i(80E00004): LDR R0, SP, 4H
0557i .FIXUP D
0557i(8D000009): LDR SB, MT, MOD0 [Oberon]
0558i(A0D000FC): STR R0, SB, FCH [data]
0559i(8FE00000): LDR LNK, SP, 0H
055Ai(4EE80008): ADD SP, SP, 8H
055Bi(C700000F): B LNK
PROCEDURE SetOffset* (voff: INTEGER);
BEGINj CurOff := voff
055Cj .PROC 48
055Cj(4EE90008): SUB SP, SP, 8H
055Dj(AFE00000): STR LNK, SP, 0H
055Ej(A0E00004): STR R0, SP, 4H
ENDk SetOffset;
055Fk(80E00004): LDR R0, SP, 4H
0560k .FIXUP D
0560k(8D000009): LDR SB, MT, MOD0 [Oberon]
0561k(A0D00100): STR R0, SB, 100H [data]
0562k(8FE00000): LDR LNK, SP, 0H
0563k(4EE80008): ADD SP, SP, 8H
0564k(C700000F): B LNK
PROCEDURE Loop*;
VAR V: Viewers.Viewer; M: InputMsg; N: ControlMsg;
prevX, prevY, X, Y, t: INTEGER; keys: SET; ch: CHAR;
BEGINl
0565l .PROC 49
0565l .COMMAND Loop
0565l(4EE90050): SUB SP, SP, 50H
0566l(AFE00000): STR LNK, SP, 0H
REPEAT
Input.Mouse(keys,m X,n Y)o;p
0567m(40E80048): ADD R0, SP, 48H
0568n(41E8003C): ADD R1, SP, 3CH
0569o(42E80040): ADD R2, SP, 40H
056Ap .FIXUP P
056Ap(F740309C): BL MOD4 [Input] PROC3
IF Input.Available() >q 0 THENr Input.Read(ch)s;t
056Bq .FIXUP P
056Bq(F7401001): BL MOD4 [Input] PROC1
056Cr(40090000): SUB R0, R0, 0H
056Dr(E600004B): BLE 75 [05B9H]
056Es(40E8004C): ADD R0, SP, 4CH
056Ft .FIXUP P
056Ft(F7402004): BL MOD4 [Input] PROC2
IF ch = ESC THENu
0570u(90E0004C): LDR R0, SP, 4CH
0571u(4009001B): SUB R0, R0, 1BH
0572u(E900000E): BNE 14 [0581H]
N.id := neutralize;v Viewers.Broadcast(N)w;x FadeCursor(Pointer)y;z LED(0)
0573v(40000001): MOV R0, R0, 1H
0574v(A0E00028): STR R0, SP, 28H
0575w(40E80028): ADD R0, SP, 28H
0576w .FIXUP D
0576w(8D000016): LDR SB, MT, MOD0 [Oberon]
0577w(41D80058): ADD R1, SB, 58H [data]
0578x .FIXUP P
0578x(F760F009): BL MOD6 [Viewers] PROC15
0579y .FIXUP D
0579y(8D000003): LDR SB, MT, MOD0 [Oberon]
057Ay(40D800CC): ADD R0, SB, CCH [data]
057By(41D80014): ADD R1, SB, 14H
057Cz(F7FFFB85): BL -1147 [0102H]
ELSIFa chb = SETSTAR THENc
057Da(40000000): MOV R0, R0, 0H
057Ea(5100FFC4): MOV R1, R0, FFFFFFC4H
057Fa(A0100000): STR R0, R1, 0H
0580b(E7000037): B 55 [05B8H]
0581c(90E0004C): LDR R0, SP, 4CH
0582c(4009001A): SUB R0, R0, 1AH
0583c(E9000018): BNE 24 [059CH]
N.id := mark;d N.X := X;e N.Y := Y;f V := Viewers.This(X,g Y)h;i V.handlej(Vk,l N)m
0584d(40000002): MOV R0, R0, 2H
0585d(A0E00028): STR R0, SP, 28H
0586e(80E0003C): LDR R0, SP, 3CH
0587e(A0E0002C): STR R0, SP, 2CH
0588f(80E00040): LDR R0, SP, 40H
0589f(A0E00030): STR R0, SP, 30H
058Ag(80E0003C): LDR R0, SP, 3CH
058Bh(81E00040): LDR R1, SP, 40H
058Ci .FIXUP P
058Ci(F7609014): BL MOD6 [Viewers] PROC9
058Di(A0E00004): STR R0, SP, 4H
058Ej(80E00004): LDR R0, SP, 4H
058Fj(D129D84C): BLEQ MT [trap=4, pos=10712]
0590k(80000018): LDR R0, R0, 18H
0591k(4EE90004): SUB SP, SP, 4H
0592k(A0E00000): STR R0, SP, 0H
0593l(80E00008): LDR R0, SP, 8H
0594m(41E8002C): ADD R1, SP, 2CH
0595m .FIXUP D
0595m(8D00001C): LDR SB, MT, MOD0 [Oberon]
0596m(42D80058): ADD R2, SB, 58H [data]
ELSEn Mo.id := consume;p M.ch := ch;q M.fnt := CurFnt;r M.col := CurCol;s M.voff := CurOff;t
0597n(83E00000): LDR R3, SP, 0H
0598n(4EE80004): ADD SP, SP, 4H
0599n(D129EB5C): BLEQ MT [trap=5, pos=10731]
059An(D7000003): BL R3
059Bo(E700001C): B 28 [05B8H]
059Cp(40000000): MOV R0, R0, 0H
059Dp(A0E00008): STR R0, SP, 8H
059Eq(90E0004C): LDR R0, SP, 4CH
059Fq(B0E00018): STR R0, SP, 18H
05A0r .FIXUP D
05A0r(8D00000B): LDR SB, MT, MOD0 [Oberon]
05A1r(80D000F8): LDR R0, SB, F8H [data]
05A2r(A0E0001C): STR R0, SP, 1CH
05A3s(80D000FC): LDR R0, SB, FCH
05A4s(A0E00020): STR R0, SP, 20H
05A5t(80D00100): LDR R0, SB, 100H
05A6t(A0E00024): STR R0, SP, 24H
FocusViewer.handleu(FocusViewerv,w M)x;y DEC(ActCnt)
05A7u(80D000E0): LDR R0, SB, E0H
05A8u(D12A594C): BLEQ MT [trap=4, pos=10841]
05A9v(80000018): LDR R0, R0, 18H
05AAv(4EE90004): SUB SP, SP, 4H
05ABv(A0E00000): STR R0, SP, 0H
05ACw(80D000E0): LDR R0, SB, E0H
05ADx(41E8000C): ADD R1, SP, CH
05AEx(42D80028): ADD R2, SB, 28H
05AFy(83E00000): LDR R3, SP, 0H
05B0y(4EE80004): ADD SP, SP, 4H
05B1y(D12A6A5C): BLEQ MT [trap=5, pos=10858]
05B2y(D7000003): BL R3
ENDz
05B3z .FIXUP D
05B3z(8D000013): LDR SB, MT, MOD0 [Oberon]
05B4z(40D80118): ADD R0, SB, 118H [data]
05B5z(81000000): LDR R1, R0, 0H
05B6z(41190001): SUB R1, R1, 1H
05B7z(A1000000): STR R1, R0, 0H
ELSIF keysa # {} THENb
05B8a(E7000080): B 128 [0639H]
05B9b(80E00048): LDR R0, SP, 48H
05BAb(E1000025): BEQ 37 [05E0H]
M.id := track;c M.X := X;d M.Y := Y;e M.keys := keys;f
05BBc(40000001): MOV R0, R0, 1H
05BCc(A0E00008): STR R0, SP, 8H
05BDd(80E0003C): LDR R0, SP, 3CH
05BEd(A0E00010): STR R0, SP, 10H
05BFe(80E00040): LDR R0, SP, 40H
05C0e(A0E00014): STR R0, SP, 14H
05C1f(80E00048): LDR R0, SP, 48H
05C2f(A0E0000C): STR R0, SP, CH
REPEAT V := Viewers.This(M.X,g M.Y)h;i V.handlej(Vk,l M)m;n Input.Mouse(M.keys,o M.X,p M.Y)q
05C3g(80E00010): LDR R0, SP, 10H
05C4h(81E00014): LDR R1, SP, 14H
05C5i .FIXUP P
05C5i(F7609039): BL MOD6 [Viewers] PROC9
05C6i(A0E00004): STR R0, SP, 4H
05C7j(80E00004): LDR R0, SP, 4H
05C8j(D12B0D4C): BLEQ MT [trap=4, pos=11021]
05C9k(80000018): LDR R0, R0, 18H
05CAk(4EE90004): SUB SP, SP, 4H
05CBk(A0E00000): STR R0, SP, 0H
05CCl(80E00008): LDR R0, SP, 8H
05CDm(41E8000C): ADD R1, SP, CH
05CEm .FIXUP D
05CEm(8D00001B): LDR SB, MT, MOD0 [Oberon]
05CFm(42D80028): ADD R2, SB, 28H [data]
05D0n(83E00000): LDR R3, SP, 0H
05D1n(4EE80004): ADD SP, SP, 4H
05D2n(D12B145C): BLEQ MT [trap=5, pos=11028]
05D3n(D7000003): BL R3
05D4o(40E8000C): ADD R0, SP, CH
05D5p(41E80010): ADD R1, SP, 10H
05D6q(42E80014): ADD R2, SP, 14H
UNTILr M.keys = {};s
05D7r .FIXUP P
05D7r(F7403012): BL MOD4 [Input] PROC3
05D8s(80E0000C): LDR R0, SP, CH
05D9s(E9FFFFE9): BNE -23 [05C3H]
DEC(ActCnt)
ELSEt
05DAt .FIXUP D
05DAt(8D00000C): LDR SB, MT, MOD0 [Oberon]
05DBt(40D80118): ADD R0, SB, 118H [data]
05DCt(81000000): LDR R1, R0, 0H
05DDt(41190001): SUB R1, R1, 1H
05DEt(A1000000): STR R1, R0, 0H
IFu (X # prevX)v OR (wY # prevY)x OR ~yMouse.on THENz
05DFu(E7000059): B 89 [0639H]
05E0v(80E0003C): LDR R0, SP, 3CH
05E1v(81E00034): LDR R1, SP, 34H
05E2v(00090001): SUB R0, R0, R1
05E3w(E9000007): BNE 7 [05EBH]
05E4x(80E00040): LDR R0, SP, 40H
05E5x(81E00038): LDR R1, SP, 38H
05E6x(00090001): SUB R0, R0, R1
05E7y(E9000003): BNE 3 [05EBH]
05E8z .FIXUP D
05E8z(8D00000E): LDR SB, MT, MOD0 [Oberon]
05E9z(90D000C0): LDR R0, SB, C0H [data]
05EAz(E9000025): BNE 37 [0610H]
M.id := track;a M.X := X;b
05EBa(40000001): MOV R0, R0, 1H
05ECa(A0E00008): STR R0, SP, 8H
05EDb(80E0003C): LDR R0, SP, 3CH
05EEb(A0E00010): STR R0, SP, 10H
IF Y >= Display.Height THENc Y := Display.Height ENDd ;
05EFc(80E00040): LDR R0, SP, 40H
05F0c .FIXUP D
05F0c(8D500008): LDR SB, MT, MOD5 [Display]
05F1c(81D00005): LDR R1, SB, VAR5
05F2c(00090001): SUB R0, R0, R1
05F3c(E5000003): BLT 3 [05F7H]
05F4d .FIXUP D
05F4d(8D500004): LDR SB, MT, MOD5 [Display]
05F5d(80D00005): LDR R0, SB, VAR5
05F6d(A0E00040): STR R0, SP, 40H
M.Y := Y;e M.keys := keys;f V := Viewers.This(X,g Y)h;i V.handlej(Vk,l M)m;n prevX := X;o prevY := Y
05F7e(80E00040): LDR R0, SP, 40H
05F8e(A0E00014): STR R0, SP, 14H
05F9f(80E00048): LDR R0, SP, 48H
05FAf(A0E0000C): STR R0, SP, CH
05FBg(80E0003C): LDR R0, SP, 3CH
05FCh(81E00040): LDR R1, SP, 40H
05FDi .FIXUP P
05FDi(F7609026): BL MOD6 [Viewers] PROC9
05FEi(A0E00004): STR R0, SP, 4H
05FFj(80E00004): LDR R0, SP, 4H
0600j(D12C4E4C): BLEQ MT [trap=4, pos=11342]
0601k(80000018): LDR R0, R0, 18H
0602k(4EE90004): SUB SP, SP, 4H
0603k(A0E00000): STR R0, SP, 0H
0604l(80E00008): LDR R0, SP, 8H
0605m(41E8000C): ADD R1, SP, CH
0606m .FIXUP D
0606m(8D000012): LDR SB, MT, MOD0 [Oberon]
0607m(42D80028): ADD R2, SB, 28H [data]
0608n(83E00000): LDR R3, SP, 0H
0609n(4EE80004): ADD SP, SP, 4H
060An(D12C555C): BLEQ MT [trap=5, pos=11349]
060Bn(D7000003): BL R3
060Co(80E0003C): LDR R0, SP, 3CH
060Do(A0E00034): STR R0, SP, 34H
ENDp;
060Ep(80E00040): LDR R0, SP, 40H
060Fp(A0E00038): STR R0, SP, 38H
CurTask := CurTask.nextq;r t := Kernel.Time();s
0610q .FIXUP D
0610q(8D00000A): LDR SB, MT, MOD0 [Oberon]
0611q(80D00108): LDR R0, SB, 108H [data]
0612q(D12C994C): BLEQ MT [trap=4, pos=11417]
0613r(8000000C): LDR R0, R0, CH
0614r(A0D00108): STR R0, SB, 108H
0615s .FIXUP P
0615s(F7111018): BL MOD1 [Kernel] PROC17
0616s(A0E00044): STR R0, SP, 44H
IF t >= CurTask.nextTimet THENu
0617t .FIXUP D
0617t(8D000007): LDR SB, MT, MOD0 [Oberon]
0618t(80D00108): LDR R0, SB, 108H [data]
0619t(D12CCF4C): BLEQ MT [trap=4, pos=11471]
061Au(81E00044): LDR R1, SP, 44H
061Bu(80000004): LDR R0, R0, 4H
061Cu(01190000): SUB R1, R1, R0
061Du(E500001B): BLT 27 [0639H]
CurTask.nextTimev := t + CurTask.periodw;x CurTask.statey := active;z CurTask.handlea;b CurTask.statec := idle
061Ev .FIXUP D
061Ev(8D000007): LDR SB, MT, MOD0 [Oberon]
061Fv(80D00108): LDR R0, SB, 108H [data]
0620v(D12CEF4C): BLEQ MT [trap=4, pos=11503]
0621w(81D00108): LDR R1, SB, 108H
0622w(D12D054C): BLEQ MT [trap=4, pos=11525]
0623x(82E00044): LDR R2, SP, 44H
0624x(81100008): LDR R1, R1, 8H
0625x(01280001): ADD R1, R2, R1
0626x(A1000004): STR R1, R0, 4H
0627y(80D00108): LDR R0, SB, 108H
0628y(D12D144C): BLEQ MT [trap=4, pos=11540]
0629z(41000002): MOV R1, R0, 2H
062Az(A1000000): STR R1, R0, 0H
062Ba(80D00108): LDR R0, SB, 108H
062Ca(D12D2E4C): BLEQ MT [trap=4, pos=11566]
062Db(80000010): LDR R0, R0, 10H
062Eb(4EE90004): SUB SP, SP, 4H
062Fb(A0E00000): STR R0, SP, 0H
0630b(80E00000): LDR R0, SP, 0H
0631b(4EE80004): ADD SP, SP, 4H
0632b(D12D2F5C): BLEQ MT [trap=5, pos=11567]
0633b(D7000000): BL R0
0634c .FIXUP D
0634c(8D000016): LDR SB, MT, MOD0 [Oberon]
0635c(80D00108): LDR R0, SB, 108H [data]
0636c(D12D3D4C): BLEQ MT [trap=4, pos=11581]
ENDd
0637d(41000001): MOV R1, R0, 1H
0638d(A1000000): STR R1, R0, 0H
END
UNTIL FALSE
ENDe Loop;
0639e(E7FFFF2D): B -211 [0567H]
063Ae(8FE00000): LDR LNK, SP, 0H
063Be(4EE80050): ADD SP, SP, 50H
063Ce(C700000F): B LNK
PROCEDURE Reset*;
BEGINf
063Df .PROC 50
063Df .COMMAND Reset
063Df(4EE90004): SUB SP, SP, 4H
063Ef(AFE00000): STR LNK, SP, 0H
IF CurTask.stateg = active THENh Remove(CurTask)i ENDj ;
063Fg .FIXUP D
063Fg(8D00000B): LDR SB, MT, MOD0 [Oberon]
0640g(80D00108): LDR R0, SB, 108H [data]
0641g(D12DA94C): BLEQ MT [trap=4, pos=11689]
0642h(80000000): LDR R0, R0, 0H
0643h(40090002): SUB R0, R0, 2H
0644h(E9000003): BNE 3 [0648H]
0645i .FIXUP D
0645i(8D000006): LDR SB, MT, MOD0 [Oberon]
0646i(80D00108): LDR R0, SB, 108H [data]
0647j(F7FFFECD): BL -307 [0515H]
SYSTEM.LDREG(14, Kernel.stackOrg);k (*reset stack pointer*) Loop
0648k .FIXUP D
0648k(8D100003): LDR SB, MT, MOD1 [Kernel]
0649k(80D00005): LDR R0, SB, VAR5
064Ak(0E000000): MOV SP, R0, R0
ENDl Reset;
064Bl(F7FFFF19): BL -231 [0565H]
064Cl(8FE00000): LDR LNK, SP, 0H
064Dl(4EE80004): ADD SP, SP, 4H
064El(C700000F): B LNK
BEGINm User[0] := 0X;n
064Fm .PROC 0
064Fm .ENTRYPOINT
064Fm(4EE90004): SUB SP, SP, 4H
0650m(AFE00000): STR LNK, SP, 0H
0651n(40000000): MOV R0, R0, 0H
0652n .FIXUP D
0652n(8D00000A): LDR SB, MT, MOD0 [Oberon]
0653n(B0D0009C): STR R0, SB, 9CH [data]
Arrow.Fade := FlipArrow;o Arrow.Draw := FlipArrow;p
0654o(F7000000): BL 0 [0655H]
0655o(40F917B4): SUB R0, LNK, 17B4H
0656o(A0D000A8): STR R0, SB, A8H
0657p(F7000000): BL 0 [0658H]
0658p(40F917C0): SUB R0, LNK, 17C0H
0659p(A0D000AC): STR R0, SB, ACH
Star.Fade := FlipStar;q Star.Draw := FlipStar;r
065Aq(F7000000): BL 0 [065BH]
065Bq(40F916E0): SUB R0, LNK, 16E0H
065Cq(A0D000B0): STR R0, SB, B0H
065Dr(F7000000): BL 0 [065EH]
065Er(40F916EC): SUB R0, LNK, 16ECH
065Fr(A0D000B4): STR R0, SB, B4H
OpenCursor(Mouse)s;t OpenCursor(Pointer)u;v
0660s(40D800B8): ADD R0, SB, B8H
0661s(41D80014): ADD R1, SB, 14H
0662t(F7FFFA8F): BL -1393 [00F2H]
0663u .FIXUP D
0663u(8D000011): LDR SB, MT, MOD0 [Oberon]
0664u(40D800CC): ADD R0, SB, CCH [data]
0665u(41D80014): ADD R1, SB, 14H
0666v(F7FFFA8B): BL -1397 [00F2H]
DW := Display.Width;w DH := Display.Height;x CL := DW;y
0667w .FIXUP D
0667w(8D500004): LDR SB, MT, MOD5 [Display]
0668w(80D00004): LDR R0, SB, VAR4
0669w .FIXUP D
0669w(8D000002): LDR SB, MT, MOD0 [Oberon]
066Aw(A0D0010C): STR R0, SB, 10CH [data]
066Bx .FIXUP D
066Bx(8D500002): LDR SB, MT, MOD5 [Display]
066Cx(80D00005): LDR R0, SB, VAR5
066Dx .FIXUP D
066Dx(8D000002): LDR SB, MT, MOD0 [Oberon]
066Ex(A0D00110): STR R0, SB, 110H [data]
066Fy(80D0010C): LDR R0, SB, 10CH
0670y(A0D00114): STR R0, SB, 114H
OpenDisplay(DW DIV 8 *z 5,a DW DIV 8 *b 3,c DH)d;e
0671z(80D0010C): LDR R0, SB, 10CH
0672z(40020003): ASR R0, R0, 3H
0673a(400A0005): MUL R0, R0, 5H
0674b(81D0010C): LDR R1, SB, 10CH
0675b(41120003): ASR R1, R1, 3H
0676c(411A0003): MUL R1, R1, 3H
0677d(82D00110): LDR R2, SB, 110H
0678e(F7FFFBF0): BL -1040 [0269H]
FocusViewer := Viewers.This(0,f 0)g;h
0679f(40000000): MOV R0, R0, 0H
067Ag(41000000): MOV R1, R0, 0H
067Bh .FIXUP P
067Bh(F7609066): BL MOD6 [Viewers] PROC9
067Ch .FIXUP D
067Ch(8D00000F): LDR SB, MT, MOD0 [Oberon]
067Dh(A0D000E0): STR R0, SB, E0H [data]
CurFnt := Fonts.Default;i CurCol := Display.white;j CurOff := 0;k
067Ei .FIXUP D
067Ei(8D700002): LDR SB, MT, MOD7 [Fonts]
067Fi(80D00002): LDR R0, SB, VAR2
0680i .FIXUP D
0680i(8D000002): LDR SB, MT, MOD0 [Oberon]
0681i(A0D000F8): STR R0, SB, F8H [data]
0682j(40000001): MOV R0, R0, 1H
0683j(A0D000FC): STR R0, SB, FCH
0684k(40000000): MOV R0, R0, 0H
0685k(A0D00100): STR R0, SB, 100H
ActCnt := 0;l CurTask := NewTask(GC,m 1000)n;o Install(CurTask)p;q
0686l(40000000): MOV R0, R0, 0H
0687l(A0D00118): STR R0, SB, 118H
0688m(F7000000): BL 0 [0689H]
0689m(40F907A0): SUB R0, LNK, 7A0H
068An(410003E8): MOV R1, R0, 3E8H
068Bo(F7FFFE4C): BL -436 [04D8H]
068Co .FIXUP D
068Co(8D00000C): LDR SB, MT, MOD0 [Oberon]
068Do(A0D00108): STR R0, SB, 108H [data]
068Ep(80D00108): LDR R0, SB, 108H
068Fq(F7FFFE64): BL -412 [04F4H]
Modules.Load("System",r Mod)s;t Mod := NIL;u Loop
0690r .FIXUP D
0690r(8D000004): LDR SB, MT, MOD0 [Oberon]
0691r(40D80120): ADD R0, SB, 120H ["System"]
0692r(41000007): MOV R1, R0, 7H
0693s(42D8011C): ADD R2, SB, 11CH
0694t .FIXUP P
0694t(F7308019): BL MOD3 [Modules] PROC8
0695u(40000000): MOV R0, R0, 0H
0696u .FIXUP D
0696u(8D000006): LDR SB, MT, MOD0 [Oberon]
0697u(A0D0011C): STR R0, SB, 11CH [data]
ENDv Oberon.w
0698v(F7FFFECC): BL -308 [0565H]
0699w(8FE00000): LDR LNK, SP, 0H
069Aw(4EE80004): ADD SP, SP, 4H
069Bw(C700000F): B LNK