Fonts

Used Exports

BUILTINS: BYTE CHAR DEC INC INTEGER NEW ORD
Files: File Old ReadByte Rider Set
SYSTEM: ADR GET PUT

MODULE Fonts; (*JG 18.11.90; PDR 8.6.12; NW 25.3.2013*)
.MODULE Fonts (KEY F4C9F557, VERSION 1, SIZE 00000A58)
.IMPORT Files (KEY 73F5D686)
.TYPEDESC 00000C00 FFFFFFFF FFFFFFFF FFFFFFFF 00000034 FFFFFFFF 00001600 00018007 FFFFFFFF FFFFFFFF 00000034 FFFFFFFF
.DATA 8H
.STRING 38H "Oberon10.Scn.Fnt"
.POINTER_REFERENCES 30H 34H
.FIXUP T 7H
IMPORT SYSTEM, Files;
CONST FontFileId = 0DBH;
TYPE Font* = POINTER TO FontDesc;
FontDesc* = RECORD
name*: ARRAY 32 OF CHAR;
height*, minX*, maxX*, minY*, maxY*: INTEGER;
next*: Font;
T: ARRAY 128 OF INTEGER;
raster: ARRAY 2360 OF BYTE
END ;
LargeFontDesc = RECORD (FontDesc) ext: ARRAY 2560 OF BYTE END ;
LargeFont = POINTER TO LargeFontDesc;
(* raster sizes: Syntax8 1367, Syntax10 1628, Syntax12 1688, Syntax14 1843, Syntax14b 1983,
Syntax16 2271, Syntax20 3034, Syntac24 4274, Syntax24b 4302 *)
VAR Default*, root*: Font;
PROCEDURE GetPat*(fnt: Font; ch: CHAR; VAR dx, x, y, w, h, patadr: INTEGER);
VAR pa: INTEGER; dxb, xb, yb, wb, hb: BYTE;
BEGINa pa := fnt.Tb[ORD(ch) MODc 80H]d;e patadr := pa;f
0000a .PROC 1
0000a .PROC 4
0000a(4EE90030): SUB SP, SP, 30H
0001a(AFE00000): STR LNK, SP, 0H
0002a(A0E00004): STR R0, SP, 4H
0003a(A1E00008): STR R1, SP, 8H
0004a(A2E0000C): STR R2, SP, CH
0005a(A3E00010): STR R3, SP, 10H
0006a(A4E00014): STR R4, SP, 14H
0007a(A5E00018): STR R5, SP, 18H
0008a(A6E0001C): STR R6, SP, 1CH
0009a(A7E00020): STR R7, SP, 20H
000Ab(80E00004): LDR R0, SP, 4H
000Bb(D103164C): BLEQ MT [trap=4, pos=790]
000Cc .PROC 2
000Cc(91E00008): LDR R1, SP, 8H
000Dd .PROC 3
000Dd(4114007F): AND R1, R1, 7FH
000Ed(42190080): SUB R2, R1, 80H
000Fd(DA03271C): BLCC MT [trap=1, pos=807]
0010d(41110002): LSL R1, R1, 2H
0011d(00080001): ADD R0, R0, R1
0012e(80000038): LDR R0, R0, 38H
0013e(A0E00024): STR R0, SP, 24H
0014f(80E00024): LDR R0, SP, 24H
0015f(81E00020): LDR R1, SP, 20H
0016f(A0100000): STR R0, R1, 0H
SYSTEM.GET(pa-3,g dxb);h SYSTEM.GET(pa-2,i xb);j SYSTEM.GET(pa-1,k yb);l SYSTEM.GET(pa, wb);m SYSTEM.GET(pa+1,n hb);o
0017g(80E00024): LDR R0, SP, 24H
0018g(40090003): SUB R0, R0, 3H
0019h(90000000): LDR R0, R0, 0H
001Ah(B0E00028): STR R0, SP, 28H
001Bi(80E00024): LDR R0, SP, 24H
001Ci(40090002): SUB R0, R0, 2H
001Dj(90000000): LDR R0, R0, 0H
001Ej(B0E00029): STR R0, SP, 29H
001Fk(80E00024): LDR R0, SP, 24H
0020k(40090001): SUB R0, R0, 1H
0021l(90000000): LDR R0, R0, 0H
0022l(B0E0002A): STR R0, SP, 2AH
0023m(80E00024): LDR R0, SP, 24H
0024m(90000000): LDR R0, R0, 0H
0025m(B0E0002B): STR R0, SP, 2BH
0026n(80E00024): LDR R0, SP, 24H
0027n(40080001): ADD R0, R0, 1H
0028o(90000000): LDR R0, R0, 0H
0029o(B0E0002C): STR R0, SP, 2CH
dx := dxb;p x := xb;q y := yb;r w := wb;s h := hb;t
002Ap(90E00028): LDR R0, SP, 28H
002Bp(81E0000C): LDR R1, SP, CH
002Cp(A0100000): STR R0, R1, 0H
002Dq(90E00029): LDR R0, SP, 29H
002Eq(81E00010): LDR R1, SP, 10H
002Fq(A0100000): STR R0, R1, 0H
0030r(90E0002A): LDR R0, SP, 2AH
0031r(81E00014): LDR R1, SP, 14H
0032r(A0100000): STR R0, R1, 0H
0033s(90E0002B): LDR R0, SP, 2BH
0034s(81E00018): LDR R1, SP, 18H
0035s(A0100000): STR R0, R1, 0H
0036t(90E0002C): LDR R0, SP, 2CH
0037t(81E0001C): LDR R1, SP, 1CH
0038t(A0100000): STR R0, R1, 0H
IF yb < 128 THENu y := yb ELSEv yw := yb - 256 ENDx
0039u(90E0002A): LDR R0, SP, 2AH
003Au(40090080): SUB R0, R0, 80H
003Bu(ED000004): BGE 4 [0040H]
003Cv(90E0002A): LDR R0, SP, 2AH
003Dv(81E00014): LDR R1, SP, 14H
003Ev(A0100000): STR R0, R1, 0H
003Fw(E7000004): B 4 [0044H]
0040x(90E0002A): LDR R0, SP, 2AH
0041x(40090100): SUB R0, R0, 100H
0042x(81E00014): LDR R1, SP, 14H
0043x(A0100000): STR R0, R1, 0H
ENDy GetPat;
0044y(8FE00000): LDR LNK, SP, 0H
0045y(4EE80030): ADD SP, SP, 30H
0046y(C700000F): B LNK
PROCEDURE This*(name: ARRAY OF CHAR): Font;
TYPE RunRec = RECORD beg, end: BYTE END ;
BoxRec = RECORD dx, x, y, w, h: BYTE END ;
VAR F: Font; LF: LargeFont;
f: Files.File; R: Files.Rider;
NofRuns, NofBoxes: BYTE;
NofBytes: INTEGER;
height, minX, maxX, minY, maxY: BYTE;
i, j, k, m, n: INTEGER;
a, a0: INTEGER;
b, beg, end: BYTE;
run: ARRAY 16 OF RunRec;
box: ARRAY 512 OF BoxRec;
PROCEDUREz RdInt16(VAR R: Files.Rider; VAR b0: BYTE);
0047z(E7000010): B 16 [0058H]
VAR b1: BYTE;
BEGINa Files.ReadByte(R,b b0)c;d Files.ReadByte(R,e b1)f
0048a(4EE90014): SUB SP, SP, 14H
0049a(AFE00000): STR LNK, SP, 0H
004Aa(A0E00004): STR R0, SP, 4H
004Ba(A1E00008): STR R1, SP, 8H
004Ca(A2E0000C): STR R2, SP, CH
004Db(80E00004): LDR R0, SP, 4H
004Eb(81E00008): LDR R1, SP, 8H
004Fc(82E0000C): LDR R2, SP, CH
0050d .FIXUP P
0050d(F710E050): BL MOD1 [Files] PROC14
0051e(80E00004): LDR R0, SP, 4H
0052e(81E00008): LDR R1, SP, 8H
0053f(42E80010): ADD R2, SP, 10H
ENDg RdInt16;
0054g .FIXUP P
0054g(F710E004): BL MOD1 [Files] PROC14
0055g(8FE00000): LDR LNK, SP, 0H
0056g(4EE80014): ADD SP, SP, 14H
0057g(C700000F): B LNK
BEGINh F := root;i
0058h .PROC 5
0058h(4EE910A0): SUB SP, SP, 10A0H
0059h(AFE00000): STR LNK, SP, 0H
005Ah(A0E00004): STR R0, SP, 4H
005Bh(A1E00008): STR R1, SP, 8H
005Ci .FIXUP D
005Ci(8D00005C): LDR SB, MT, MOD0 [Fonts]
005Di(80D00034): LDR R0, SB, 34H [data]
005Ei(A0E0000C): STR R0, SP, CH
WHILE (F # NIL)j & (kname # F.namel)m DOn F := F.nexto ENDp;
005Fj(80E0000C): LDR R0, SP, CH
0060k(E1000011): BEQ 17 [0072H]
0061l(80E0000C): LDR R0, SP, CH
0062l(D106864C): BLEQ MT [trap=4, pos=1670]
0063m(81E00004): LDR R1, SP, 4H
0064m(92100000): LDR R2, R1, 0H
0065m(41180001): ADD R1, R1, 1H
0066m(93000000): LDR R3, R0, 0H
0067m(40080001): ADD R0, R0, 1H
0068m(04290003): SUB R4, R2, R3
0069m(E9000002): BNE 2 [006CH]
006Am(44290000): SUB R4, R2, 0H
006Bm(E9FFFFF8): BNE -8 [0064H]
006Cn(E1000005): BEQ 5 [0072H]
006Do(80E0000C): LDR R0, SP, CH
006Eo(D106964C): BLEQ MT [trap=4, pos=1686]
006Fp(80000034): LDR R0, R0, 34H
0070p(A0E0000C): STR R0, SP, CH
0071p(E7FFFFED): B -19 [005FH]
IF F = NIL THENq
0072q(80E0000C): LDR R0, SP, CH
0073q(E90001DB): BNE 475 [024FH]
f := Files.Old(name)r;s
0074r(80E00004): LDR R0, SP, 4H
0075r(81E00008): LDR R1, SP, 8H
0076s .FIXUP P
0076s(F7102022): BL MOD1 [Files] PROC2
0077s(A0E00014): STR R0, SP, 14H
IF f # NIL THENt
0078t(80E00014): LDR R0, SP, 14H
0079t(E10001D2): BEQ 466 [024CH]
Files.Set(R,u f,v 0)w;x Files.ReadByte(R,y b)z;a
007Au(40E80018): ADD R0, SP, 18H
007Bu .FIXUP D
007Bu(8D10001F): LDR SB, MT, MOD1 [Files]
007Cu(41D80001): ADD R1, SB, VAR1
007Dv(82E00014): LDR R2, SP, 14H
007Ew(43000000): MOV R3, R0, 0H
007Fx .FIXUP P
007Fx(F710B009): BL MOD1 [Files] PROC11
0080y(40E80018): ADD R0, SP, 18H
0081y .FIXUP D
0081y(8D100006): LDR SB, MT, MOD1 [Files]
0082y(41D80001): ADD R1, SB, VAR1
0083z(42E8005C): ADD R2, SP, 5CH
0084a .FIXUP P
0084a(F710E005): BL MOD1 [Files] PROC14
IF b = FontFileId THENb
0085b(90E0005C): LDR R0, SP, 5CH
0086b(400900DB): SUB R0, R0, DBH
0087b(E90001C0): BNE 448 [0248H]
Files.ReadByte(R,c b)d;e (*abstraction*)
0088c(40E80018): ADD R0, SP, 18H
0089c .FIXUP D
0089c(8D100008): LDR SB, MT, MOD1 [Files]
008Ac(41D80001): ADD R1, SB, VAR1
008Bd(42E8005C): ADD R2, SP, 5CH
008Ce .FIXUP P
008Ce(F710E008): BL MOD1 [Files] PROC14
Files.ReadByte(R,f b)g;h (*family*)
008Df(40E80018): ADD R0, SP, 18H
008Ef .FIXUP D
008Ef(8D100005): LDR SB, MT, MOD1 [Files]
008Ff(41D80001): ADD R1, SB, VAR1
0090g(42E8005C): ADD R2, SP, 5CH
0091h .FIXUP P
0091h(F710E005): BL MOD1 [Files] PROC14
Files.ReadByte(R,i b)j;k (*variant*)
0092i(40E80018): ADD R0, SP, 18H
0093i .FIXUP D
0093i(8D100005): LDR SB, MT, MOD1 [Files]
0094i(41D80001): ADD R1, SB, VAR1
0095j(42E8005C): ADD R2, SP, 5CH
0096k .FIXUP P
0096k(F710E005): BL MOD1 [Files] PROC14
NEW(F);l F.namem := name;n
0097l(40E8000C): ADD R0, SP, CH
0098l .FIXUP D
0098l(8D000005): LDR SB, MT, MOD0 [Fonts]
0099l(41D80000): ADD R1, SB, 0H [data]
009Al(D707B90C): BL MT [trap=0, pos=1977]
009Bm(80E0000C): LDR R0, SP, CH
009Cm(D107C04C): BLEQ MT [trap=4, pos=1984]
009Dn(81E00004): LDR R1, SP, 4H
009En(82E00008): LDR R2, SP, 8H
009Fn(E100000B): BEQ 11 [00ABH]
00A0n(42280003): ADD R2, R2, 3H
00A1n(42220002): ASR R2, R2, 2H
00A2n(43000008): MOV R3, R0, 8H
00A3n(03290003): SUB R3, R2, R3
00A4n(DE07C93C): BLGT MT [trap=3, pos=1993]
00A5n(83100000): LDR R3, R1, 0H
00A6n(41180004): ADD R1, R1, 4H
00A7n(A3000000): STR R3, R0, 0H
00A8n(40080004): ADD R0, R0, 4H
00A9n(42290001): SUB R2, R2, 1H
00AAn(E9FFFFFA): BNE -6 [00A5H]
RdInt16(R,o height)p;q RdInt16(R,r minX)s;t RdInt16(R,u maxX)v;w RdInt16(R,x minY)y;z RdInt16(R,a maxY)b;c RdInt16(R,d NofRuns)e;f
00ABo(40E80018): ADD R0, SP, 18H
00ACo .FIXUP D
00ACo(8D100014): LDR SB, MT, MOD1 [Files]
00ADo(41D80001): ADD R1, SB, VAR1
00AEp(42E80038): ADD R2, SP, 38H
00AFq(F7FFFF98): BL -104 [0048H]
00B0r(40E80018): ADD R0, SP, 18H
00B1r .FIXUP D
00B1r(8D100005): LDR SB, MT, MOD1 [Files]
00B2r(41D80001): ADD R1, SB, VAR1
00B3s(42E80039): ADD R2, SP, 39H
00B4t(F7FFFF93): BL -109 [0048H]
00B5u(40E80018): ADD R0, SP, 18H
00B6u .FIXUP D
00B6u(8D100005): LDR SB, MT, MOD1 [Files]
00B7u(41D80001): ADD R1, SB, VAR1
00B8v(42E8003A): ADD R2, SP, 3AH
00B9w(F7FFFF8E): BL -114 [0048H]
00BAx(40E80018): ADD R0, SP, 18H
00BBx .FIXUP D
00BBx(8D100005): LDR SB, MT, MOD1 [Files]
00BCx(41D80001): ADD R1, SB, VAR1
00BDy(42E8003B): ADD R2, SP, 3BH
00BEz(F7FFFF89): BL -119 [0048H]
00BFa(40E80018): ADD R0, SP, 18H
00C0a .FIXUP D
00C0a(8D100005): LDR SB, MT, MOD1 [Files]
00C1a(41D80001): ADD R1, SB, VAR1
00C2b(42E8003C): ADD R2, SP, 3CH
00C3c(F7FFFF84): BL -124 [0048H]
00C4d(40E80018): ADD R0, SP, 18H
00C5d .FIXUP D
00C5d(8D100005): LDR SB, MT, MOD1 [Files]
00C6d(41D80001): ADD R1, SB, VAR1
00C7e(42E80030): ADD R2, SP, 30H
00C8f(F7FFFF7F): BL -129 [0048H]
NofBoxes := 0;g k := 0;h
00C9g(40000000): MOV R0, R0, 0H
00CAg(B0E00031): STR R0, SP, 31H
00CBh(40000000): MOV R0, R0, 0H
00CCh(A0E00048): STR R0, SP, 48H
WHILE k # NofRuns DOi
00CDi(80E00048): LDR R0, SP, 48H
00CEi(91E00030): LDR R1, SP, 30H
00CFi(00090001): SUB R0, R0, R1
00D0i(E1000022): BEQ 34 [00F3H]
RdInt16(R,j beg)k;l
00D1j(40E80018): ADD R0, SP, 18H
00D2j .FIXUP D
00D2j(8D10000D): LDR SB, MT, MOD1 [Files]
00D3j(41D80001): ADD R1, SB, VAR1
00D4k(42E8005D): ADD R2, SP, 5DH
00D5l(F7FFFF72): BL -142 [0048H]
run[k]m.beg := beg;n RdInt16(R,o end)p;q
00D6m(80E00048): LDR R0, SP, 48H
00D7m(41090010): SUB R1, R0, 10H
00D8m(DA08AA1C): BLCC MT [trap=1, pos=2218]
00D9m(40010002): LSL R0, R0, 2H
00DAm(00E80000): ADD R0, SP, R0
00DBn(91E0005D): LDR R1, SP, 5DH
00DCn(B1000060): STR R1, R0, 60H
00DDo(40E80018): ADD R0, SP, 18H
00DEo .FIXUP D
00DEo(8D10000C): LDR SB, MT, MOD1 [Files]
00DFo(41D80001): ADD R1, SB, VAR1
00E0p(42E8005E): ADD R2, SP, 5EH
00E1q(F7FFFF66): BL -154 [0048H]
run[k]r.end := end;s NofBoxes := NofBoxes + end -t beg;u INC(k)
00E2r(80E00048): LDR R0, SP, 48H
00E3r(41090010): SUB R1, R0, 10H
00E4r(DA08D81C): BLCC MT [trap=1, pos=2264]
00E5r(40010002): LSL R0, R0, 2H
00E6r(00E80000): ADD R0, SP, R0
00E7s(91E0005E): LDR R1, SP, 5EH
00E8s(B1000061): STR R1, R0, 61H
00E9t(90E00031): LDR R0, SP, 31H
00EAt(91E0005E): LDR R1, SP, 5EH
00EBt(00080001): ADD R0, R0, R1
00ECu(91E0005D): LDR R1, SP, 5DH
00EDu(00090001): SUB R0, R0, R1
00EEu(B0E00031): STR R0, SP, 31H
ENDv;
00EFv(80E00048): LDR R0, SP, 48H
00F0v(40080001): ADD R0, R0, 1H
00F1v(A0E00048): STR R0, SP, 48H
00F2v(E7FFFFDA): B -38 [00CDH]
NofBytes := 5;w j := 0;x
00F3w(40000005): MOV R0, R0, 5H
00F4w(A0E00034): STR R0, SP, 34H
00F5x(40000000): MOV R0, R0, 0H
00F6x(A0E00044): STR R0, SP, 44H
WHILE j # NofBoxes DOy
00F7y(80E00044): LDR R0, SP, 44H
00F8y(91E00031): LDR R1, SP, 31H
00F9y(00090001): SUB R0, R0, R1
00FAy(E1000049): BEQ 73 [0144H]
RdInt16(R,z box[j]a.dx)b;c RdInt16(R,d box[j]e.x)f;g RdInt16(R,h box[j]i.y)j;k
00FBz(40E80018): ADD R0, SP, 18H
00FCz .FIXUP D
00FCz(8D10001E): LDR SB, MT, MOD1 [Files]
00FDz(41D80001): ADD R1, SB, VAR1
00FEa(82E00044): LDR R2, SP, 44H
00FFa(43290200): SUB R3, R2, 200H
0100a(DA09731C): BLCC MT [trap=1, pos=2419]
0101a(422A0008): MUL R2, R2, 8H
0102a(02E80002): ADD R2, SP, R2
0103b(422800A0): ADD R2, R2, A0H
0104c(F7FFFF43): BL -189 [0048H]
0105d(40E80018): ADD R0, SP, 18H
0106d .FIXUP D
0106d(8D10000A): LDR SB, MT, MOD1 [Files]
0107d(41D80001): ADD R1, SB, VAR1
0108e(82E00044): LDR R2, SP, 44H
0109e(43290200): SUB R3, R2, 200H
010Ae(DA098A1C): BLCC MT [trap=1, pos=2442]
010Be(422A0008): MUL R2, R2, 8H
010Ce(02E80002): ADD R2, SP, R2
010Df(422800A1): ADD R2, R2, A1H
010Eg(F7FFFF39): BL -199 [0048H]
010Fh(40E80018): ADD R0, SP, 18H
0110h .FIXUP D
0110h(8D10000A): LDR SB, MT, MOD1 [Files]
0111h(41D80001): ADD R1, SB, VAR1
0112i(82E00044): LDR R2, SP, 44H
0113i(43290200): SUB R3, R2, 200H
0114i(DA09A01C): BLCC MT [trap=1, pos=2464]
0115i(422A0008): MUL R2, R2, 8H
0116i(02E80002): ADD R2, SP, R2
0117j(422800A2): ADD R2, R2, A2H
0118k(F7FFFF2F): BL -209 [0048H]
RdInt16(R,l box[j]m.w)n;o RdInt16(R,p box[j]q.h)r;s
0119l(40E80018): ADD R0, SP, 18H
011Al .FIXUP D
011Al(8D10000A): LDR SB, MT, MOD1 [Files]
011Bl(41D80001): ADD R1, SB, VAR1
011Cm(82E00044): LDR R2, SP, 44H
011Dm(43290200): SUB R3, R2, 200H
011Em(DA09C01C): BLCC MT [trap=1, pos=2496]
011Fm(422A0008): MUL R2, R2, 8H
0120m(02E80002): ADD R2, SP, R2
0121n(422800A3): ADD R2, R2, A3H
0122o(F7FFFF25): BL -219 [0048H]
0123p(40E80018): ADD R0, SP, 18H
0124p .FIXUP D
0124p(8D10000A): LDR SB, MT, MOD1 [Files]
0125p(41D80001): ADD R1, SB, VAR1
0126q(82E00044): LDR R2, SP, 44H
0127q(43290200): SUB R3, R2, 200H
0128q(DA09D61C): BLCC MT [trap=1, pos=2518]
0129q(422A0008): MUL R2, R2, 8H
012Aq(02E80002): ADD R2, SP, R2
012Br(422800A4): ADD R2, R2, A4H
012Cs(F7FFFF1B): BL -229 [0048H]
NofBytes := NofBytes + 5 +t (box[j]u.w + 7)v DIV 8 *w box[j]x.h;y
012Dt(80E00034): LDR R0, SP, 34H
012Et(40080005): ADD R0, R0, 5H
012Fu(81E00044): LDR R1, SP, 44H
0130u(42190200): SUB R2, R1, 200H
0131u(DA0A071C): BLCC MT [trap=1, pos=2567]
0132u(411A0008): MUL R1, R1, 8H
0133u(01E80001): ADD R1, SP, R1
0134v(911000A3): LDR R1, R1, A3H
0135v(41180007): ADD R1, R1, 7H
0136w(41120003): ASR R1, R1, 3H
0137x(82E00044): LDR R2, SP, 44H
0138x(43290200): SUB R3, R2, 200H
0139x(DA0A1D1C): BLCC MT [trap=1, pos=2589]
013Ax(422A0008): MUL R2, R2, 8H
013Bx(02E80002): ADD R2, SP, R2
013Cy(922000A4): LDR R2, R2, A4H
013Dy(011A0002): MUL R1, R1, R2
013Ey(00080001): ADD R0, R0, R1
013Fy(A0E00034): STR R0, SP, 34H
INC(j)
ENDz;
0140z(80E00044): LDR R0, SP, 44H
0141z(40080001): ADD R0, R0, 1H
0142z(A0E00044): STR R0, SP, 44H
0143z(E7FFFFB3): B -77 [00F7H]
IF NofBytes < 2300 THENa NEW(F) ELSEb NEWc(LF);d F := LF ENDe ;
0144a(80E00034): LDR R0, SP, 34H
0145a(400908FC): SUB R0, R0, 8FCH
0146a(ED000005): BGE 5 [014CH]
0147b(40E8000C): ADD R0, SP, CH
0148b .FIXUP D
0148b(8D000024): LDR SB, MT, MOD0 [Fonts]
0149b(41D80000): ADD R1, SB, 0H [data]
014Ab(D70A6A0C): BL MT [trap=0, pos=2666]
014Bc(E7000006): B 6 [0152H]
014Cd(40E80010): ADD R0, SP, 10H
014Dd .FIXUP D
014Dd(8D000005): LDR SB, MT, MOD0 [Fonts]
014Ed(41D80018): ADD R1, SB, 18H [data]
014Fd(D70A730C): BL MT [trap=0, pos=2675]
0150e(80E00010): LDR R0, SP, 10H
0151e(A0E0000C): STR R0, SP, CH
F.namef := name;g
0152f(80E0000C): LDR R0, SP, CH
0153f(D10A904C): BLEQ MT [trap=4, pos=2704]
0154g(81E00004): LDR R1, SP, 4H
0155g(82E00008): LDR R2, SP, 8H
0156g(E100000B): BEQ 11 [0162H]
0157g(42280003): ADD R2, R2, 3H
0158g(42220002): ASR R2, R2, 2H
0159g(43000008): MOV R3, R0, 8H
015Ag(03290003): SUB R3, R2, R3
015Bg(DE0A993C): BLGT MT [trap=3, pos=2713]
015Cg(83100000): LDR R3, R1, 0H
015Dg(41180004): ADD R1, R1, 4H
015Eg(A3000000): STR R3, R0, 0H
015Fg(40080004): ADD R0, R0, 4H
0160g(42290001): SUB R2, R2, 1H
0161g(E9FFFFFA): BNE -6 [015CH]
F.heighth := height;i F.minXj := minX;k F.maxXl := maxX;m F.maxYn := maxY;o
0162h(80E0000C): LDR R0, SP, CH
0163h(D10AAA4C): BLEQ MT [trap=4, pos=2730]
0164i(91E00038): LDR R1, SP, 38H
0165i(A1000020): STR R1, R0, 20H
0166j(80E0000C): LDR R0, SP, CH
0167j(D10ABC4C): BLEQ MT [trap=4, pos=2748]
0168k(91E00039): LDR R1, SP, 39H
0169k(A1000024): STR R1, R0, 24H
016Al(80E0000C): LDR R0, SP, CH
016Bl(D10ACC4C): BLEQ MT [trap=4, pos=2764]
016Cm(91E0003A): LDR R1, SP, 3AH
016Dm(A1000028): STR R1, R0, 28H
016En(80E0000C): LDR R0, SP, CH
016Fn(D10ADC4C): BLEQ MT [trap=4, pos=2780]
0170o(91E0003C): LDR R1, SP, 3CH
0171o(A1000030): STR R1, R0, 30H
IF minY >= 80H THENp F.minYq := minY - 100H ELSEr Fs.minYt := minY ENDu ;
0172p(90E0003B): LDR R0, SP, 3BH
0173p(40090080): SUB R0, R0, 80H
0174p(E5000006): BLT 6 [017BH]
0175q(80E0000C): LDR R0, SP, CH
0176q(D10B084C): BLEQ MT [trap=4, pos=2824]
0177r(91E0003B): LDR R1, SP, 3BH
0178r(41190100): SUB R1, R1, 100H
0179r(A100002C): STR R1, R0, 2CH
017As(E7000004): B 4 [017FH]
017Bt(80E0000C): LDR R0, SP, CH
017Ct(D10B234C): BLEQ MT [trap=4, pos=2851]
017Du(91E0003B): LDR R1, SP, 3BH
017Eu(A100002C): STR R1, R0, 2CH
a0 := SYSTEM.ADR(F.rasterv);w
017Fv(80E0000C): LDR R0, SP, CH
0180v(D10B534C): BLEQ MT [trap=4, pos=2899]
0181w(40080238): ADD R0, R0, 238H
0182w(A0E00058): STR R0, SP, 58H
SYSTEM.PUT(a0, 0X);x SYSTEM.PUT(a0+1,y 0X);z SYSTEM.PUT(a0+2,a 0X);b SYSTEM.PUT(a0+3,c 0X);d SYSTEM.PUT(a0+4,e 0X);f
0183x(80E00058): LDR R0, SP, 58H
0184x(41000000): MOV R1, R0, 0H
0185x(B1000000): STR R1, R0, 0H
0186y(80E00058): LDR R0, SP, 58H
0187y(40080001): ADD R0, R0, 1H
0188z(41000000): MOV R1, R0, 0H
0189z(B1000000): STR R1, R0, 0H
018Aa(80E00058): LDR R0, SP, 58H
018Ba(40080002): ADD R0, R0, 2H
018Cb(41000000): MOV R1, R0, 0H
018Db(B1000000): STR R1, R0, 0H
018Ec(80E00058): LDR R0, SP, 58H
018Fc(40080003): ADD R0, R0, 3H
0190d(41000000): MOV R1, R0, 0H
0191d(B1000000): STR R1, R0, 0H
0192e(80E00058): LDR R0, SP, 58H
0193e(40080004): ADD R0, R0, 4H
0194f(41000000): MOV R1, R0, 0H
0195f(B1000000): STR R1, R0, 0H
(*null pattern for characters not in a run*)
INC(a0, 2);g a := a0+3;h j := 0;i k := 0;j m := 0;k
0196g(80E00058): LDR R0, SP, 58H
0197g(40080002): ADD R0, R0, 2H
0198g(A0E00058): STR R0, SP, 58H
0199h(80E00058): LDR R0, SP, 58H
019Ah(40080003): ADD R0, R0, 3H
019Bh(A0E00054): STR R0, SP, 54H
019Ci(40000000): MOV R0, R0, 0H
019Di(A0E00044): STR R0, SP, 44H
019Ej(40000000): MOV R0, R0, 0H
019Fj(A0E00048): STR R0, SP, 48H
01A0k(40000000): MOV R0, R0, 0H
01A1k(A0E0004C): STR R0, SP, 4CH
WHILE k < NofRuns DOl
01A2l(80E00048): LDR R0, SP, 48H
01A3l(91E00030): LDR R1, SP, 30H
01A4l(00090001): SUB R0, R0, R1
01A5l(ED00008A): BGE 138 [0230H]
WHILE (m < run[k]m.beg)n & (om < 128)p DOq F.Tr[m]s := a0;t INC(m) ENDu;
01A6m(80E00048): LDR R0, SP, 48H
01A7m(41090010): SUB R1, R0, 10H
01A8m(DA0C6E1C): BLCC MT [trap=1, pos=3182]
01A9m(40010002): LSL R0, R0, 2H
01AAm(00E80000): ADD R0, SP, R0
01ABn(81E0004C): LDR R1, SP, 4CH
01ACn(90000060): LDR R0, R0, 60H
01ADn(01190000): SUB R1, R1, R0
01AEo(ED000010): BGE 16 [01BFH]
01AFp(80E0004C): LDR R0, SP, 4CH
01B0p(40090080): SUB R0, R0, 80H
01B1q(ED00000D): BGE 13 [01BFH]
01B2r(80E0000C): LDR R0, SP, CH
01B3r(D10C864C): BLEQ MT [trap=4, pos=3206]
01B4s(81E0004C): LDR R1, SP, 4CH
01B5s(42190080): SUB R2, R1, 80H
01B6s(DA0C891C): BLCC MT [trap=1, pos=3209]
01B7s(41110002): LSL R1, R1, 2H
01B8s(00080001): ADD R0, R0, R1
01B9t(81E00058): LDR R1, SP, 58H
01BAt(A1000038): STR R1, R0, 38H
01BBu(80E0004C): LDR R0, SP, 4CH
01BCu(40080001): ADD R0, R0, 1H
01BDu(A0E0004C): STR R0, SP, 4CH
01BEu(E7FFFFE7): B -25 [01A6H]
WHILE (m < run[k]v.end)w & (xm < 128)y DOz
01BFv(80E00048): LDR R0, SP, 48H
01C0v(41090010): SUB R1, R0, 10H
01C1v(DA0CB81C): BLCC MT [trap=1, pos=3256]
01C2v(40010002): LSL R0, R0, 2H
01C3v(00E80000): ADD R0, SP, R0
01C4w(81E0004C): LDR R1, SP, 4CH
01C5w(90000061): LDR R0, R0, 61H
01C6w(01190000): SUB R1, R1, R0
01C7x(ED000064): BGE 100 [022CH]
01C8y(80E0004C): LDR R0, SP, 4CH
01C9y(40090080): SUB R0, R0, 80H
01CAz(ED000061): BGE 97 [022CH]
F.Ta[m]b := a+3;c
01CBa(80E0000C): LDR R0, SP, CH
01CCa(D10CDC4C): BLEQ MT [trap=4, pos=3292]
01CDb(81E0004C): LDR R1, SP, 4CH
01CEb(42190080): SUB R2, R1, 80H
01CFb(DA0CDF1C): BLCC MT [trap=1, pos=3295]
01D0b(41110002): LSL R1, R1, 2H
01D1b(00080001): ADD R0, R0, R1
01D2c(81E00054): LDR R1, SP, 54H
01D3c(41180003): ADD R1, R1, 3H
01D4c(A1000038): STR R1, R0, 38H
SYSTEM.PUT(a, box[j]d.dx);e SYSTEM.PUT(a+1,f box[j]g.x);h SYSTEM.PUT(a+2,i box[j]j.y);k
01D5d(80E00044): LDR R0, SP, 44H
01D6d(41090200): SUB R1, R0, 200H
01D7d(DA0D081C): BLCC MT [trap=1, pos=3336]
01D8d(400A0008): MUL R0, R0, 8H
01D9d(00E80000): ADD R0, SP, R0
01DAe(81E00054): LDR R1, SP, 54H
01DBe(900000A0): LDR R0, R0, A0H
01DCe(B0100000): STR R0, R1, 0H
01DDf(80E00054): LDR R0, SP, 54H
01DEf(40080001): ADD R0, R0, 1H
01DFg(81E00044): LDR R1, SP, 44H
01E0g(42190200): SUB R2, R1, 200H
01E1g(DA0D241C): BLCC MT [trap=1, pos=3364]
01E2g(411A0008): MUL R1, R1, 8H
01E3g(01E80001): ADD R1, SP, R1
01E4h(911000A1): LDR R1, R1, A1H
01E5h(B1000000): STR R1, R0, 0H
01E6i(80E00054): LDR R0, SP, 54H
01E7i(40080002): ADD R0, R0, 2H
01E8j(81E00044): LDR R1, SP, 44H
01E9j(42190200): SUB R2, R1, 200H
01EAj(DA0D3F1C): BLCC MT [trap=1, pos=3391]
01EBj(411A0008): MUL R1, R1, 8H
01ECj(01E80001): ADD R1, SP, R1
01EDk(911000A2): LDR R1, R1, A2H
01EEk(B1000000): STR R1, R0, 0H
SYSTEM.PUT(a+3,l box[j]m.w);n SYSTEM.PUT(a+4,o box[j]p.h);q INC(a, 5);r
01EFl(80E00054): LDR R0, SP, 54H
01F0l(40080003): ADD R0, R0, 3H
01F1m(81E00044): LDR R1, SP, 44H
01F2m(42190200): SUB R2, R1, 200H
01F3m(DA0D661C): BLCC MT [trap=1, pos=3430]
01F4m(411A0008): MUL R1, R1, 8H
01F5m(01E80001): ADD R1, SP, R1
01F6n(911000A3): LDR R1, R1, A3H
01F7n(B1000000): STR R1, R0, 0H
01F8o(80E00054): LDR R0, SP, 54H
01F9o(40080004): ADD R0, R0, 4H
01FAp(81E00044): LDR R1, SP, 44H
01FBp(42190200): SUB R2, R1, 200H
01FCp(DA0D811C): BLCC MT [trap=1, pos=3457]
01FDp(411A0008): MUL R1, R1, 8H
01FEp(01E80001): ADD R1, SP, R1
01FFq(911000A4): LDR R1, R1, A4H
0200q(B1000000): STR R1, R0, 0H
0201r(80E00054): LDR R0, SP, 54H
0202r(40080005): ADD R0, R0, 5H
0203r(A0E00054): STR R0, SP, 54H
n := (box[j]s.w + 7)t DIV 8 *u box[j]v.h;w
0204s(80E00044): LDR R0, SP, 44H
0205s(41090200): SUB R1, R0, 200H
0206s(DA0DA91C): BLCC MT [trap=1, pos=3497]
0207s(400A0008): MUL R0, R0, 8H
0208s(00E80000): ADD R0, SP, R0
0209t(900000A3): LDR R0, R0, A3H
020At(40080007): ADD R0, R0, 7H
020Bu(40020003): ASR R0, R0, 3H
020Cv(81E00044): LDR R1, SP, 44H
020Dv(42190200): SUB R2, R1, 200H
020Ev(DA0DBF1C): BLCC MT [trap=1, pos=3519]
020Fv(411A0008): MUL R1, R1, 8H
0210v(01E80001): ADD R1, SP, R1
0211w(911000A4): LDR R1, R1, A4H
0212w(000A0001): MUL R0, R0, R1
0213w(A0E00050): STR R0, SP, 50H
WHILE n # 0 DOx DEC(n);y Files.ReadByte(R,z b)a;b SYSTEM.PUT(a, b);c INC(a) ENDd ;
0214x(80E00050): LDR R0, SP, 50H
0215x(E100000F): BEQ 15 [0225H]
0216y(80E00050): LDR R0, SP, 50H
0217y(40090001): SUB R0, R0, 1H
0218y(A0E00050): STR R0, SP, 50H
0219z(40E80018): ADD R0, SP, 18H
021Az .FIXUP D
021Az(8D1000CD): LDR SB, MT, MOD1 [Files]
021Bz(41D80001): ADD R1, SB, VAR1
021Ca(42E8005C): ADD R2, SP, 5CH
021Db .FIXUP P
021Db(F710E187): BL MOD1 [Files] PROC14
021Ec(80E00054): LDR R0, SP, 54H
021Fc(91E0005C): LDR R1, SP, 5CH
0220c(B1000000): STR R1, R0, 0H
0221d(80E00054): LDR R0, SP, 54H
0222d(40080001): ADD R0, R0, 1H
0223d(A0E00054): STR R0, SP, 54H
0224d(E7FFFFEF): B -17 [0214H]
INC(j);e INC(m)
0225e(80E00044): LDR R0, SP, 44H
0226e(40080001): ADD R0, R0, 1H
0227e(A0E00044): STR R0, SP, 44H
ENDf;
0228f(80E0004C): LDR R0, SP, 4CH
0229f(40080001): ADD R0, R0, 1H
022Af(A0E0004C): STR R0, SP, 4CH
022Bf(E7FFFF93): B -109 [01BFH]
INC(k)
ENDg;
022Cg(80E00048): LDR R0, SP, 48H
022Dg(40080001): ADD R0, R0, 1H
022Eg(A0E00048): STR R0, SP, 48H
022Fg(E7FFFF72): B -142 [01A2H]
WHILE m < 128 DOh F.Ti[m]j := a0;k INC(m) ENDl ;
0230h(80E0004C): LDR R0, SP, 4CH
0231h(40090080): SUB R0, R0, 80H
0232h(ED00000D): BGE 13 [0240H]
0233i(80E0000C): LDR R0, SP, CH
0234i(D10E7F4C): BLEQ MT [trap=4, pos=3711]
0235j(81E0004C): LDR R1, SP, 4CH
0236j(42190080): SUB R2, R1, 80H
0237j(DA0E821C): BLCC MT [trap=1, pos=3714]
0238j(41110002): LSL R1, R1, 2H
0239j(00080001): ADD R0, R0, R1
023Ak(81E00058): LDR R1, SP, 58H
023Bk(A1000038): STR R1, R0, 38H
023Cl(80E0004C): LDR R0, SP, 4CH
023Dl(40080001): ADD R0, R0, 1H
023El(A0E0004C): STR R0, SP, 4CH
023Fl(E7FFFFF0): B -16 [0230H]
F.nextm := root;n root := F
0240m(80E0000C): LDR R0, SP, CH
0241m(D10EA54C): BLEQ MT [trap=4, pos=3749]
0242n .FIXUP D
0242n(8D000028): LDR SB, MT, MOD0 [Fonts]
0243n(81D00034): LDR R1, SB, 34H [data]
0244n(A1000034): STR R1, R0, 34H
ELSEo (*bad file id*) Fp := Default
0245o(80E0000C): LDR R0, SP, CH
0246o(A0D00034): STR R0, SB, 34H
0247p(E7000003): B 3 [024BH]
ENDq
0248q .FIXUP D
0248q(8D000006): LDR SB, MT, MOD0 [Fonts]
0249q(80D00030): LDR R0, SB, 30H [data]
024Aq(A0E0000C): STR R0, SP, CH
ELSE (*font file not available*) Fr := Default
024Br(E7000003): B 3 [024FH]
ENDs
024Cs .FIXUP D
024Cs(8D000004): LDR SB, MT, MOD0 [Fonts]
024Ds(80D00030): LDR R0, SB, 30H [data]
024Es(A0E0000C): STR R0, SP, CH
END;
RETURN F
ENDt This;
024Ft(80E0000C): LDR R0, SP, CH
0250t(8FE00000): LDR LNK, SP, 0H
0251t(4EE810A0): ADD SP, SP, 10A0H
0252t(C700000F): B LNK
PROCEDURE Free*; (*remove all but first two from font list*)
VAR f: Font;
BEGINu f := root.nextv;w
0253u .PROC 6
0253u .COMMAND Free
0253u(4EE90008): SUB SP, SP, 8H
0254u(AFE00000): STR LNK, SP, 0H
0255v .FIXUP D
0255v(8D000009): LDR SB, MT, MOD0 [Fonts]
0256v(80D00034): LDR R0, SB, 34H [data]
0257v(D10FA34C): BLEQ MT [trap=4, pos=4003]
0258w(80000034): LDR R0, R0, 34H
0259w(A0E00004): STR R0, SP, 4H
IF f # NIL THENx f := f.nexty ENDz ;
025Ax(80E00004): LDR R0, SP, 4H
025Bx(E1000004): BEQ 4 [0260H]
025Cy(80E00004): LDR R0, SP, 4H
025Dy(D10FC24C): BLEQ MT [trap=4, pos=4034]
025Ez(80000034): LDR R0, R0, 34H
025Fz(A0E00004): STR R0, SP, 4H
f.nexta := NIL
0260a(80E00004): LDR R0, SP, 4H
0261a(D10FD14C): BLEQ MT [trap=4, pos=4049]
ENDb Free;
0262b(41000000): MOV R1, R0, 0H
0263b(A1000034): STR R1, R0, 34H
0264b(8FE00000): LDR LNK, SP, 0H
0265b(4EE80008): ADD SP, SP, 8H
0266b(C700000F): B LNK
BEGINc root := NIL;d Default := This("Oberon10.Scn.Fnt")e
0267c .PROC 0
0267c .ENTRYPOINT
0267c(4EE90004): SUB SP, SP, 4H
0268c(AFE00000): STR LNK, SP, 0H
0269d(40000000): MOV R0, R0, 0H
026Ad .FIXUP D
026Ad(8D000015): LDR SB, MT, MOD0 [Fonts]
026Bd(A0D00034): STR R0, SB, 34H [data]
026Ce(40D80038): ADD R0, SB, 38H
026De(41000011): MOV R1, R0, 11H
ENDf Fonts.g
026Ef(F7FFFDE9): BL -535 [0058H]
026Ff .FIXUP D
026Ff(8D000005): LDR SB, MT, MOD0 [Fonts]
0270f(A0D00030): STR R0, SB, 30H [data]
0271g(8FE00000): LDR LNK, SP, 0H
0272g(4EE80004): ADD SP, SP, 4H
0273g(C700000F): B LNK