Net

Used Exports

BUILTINS: ABS BOOLEAN BYTE CHAR CHR DEC INC INTEGER LONGINT ORD
Files: File New Old ReadByte Register Rider Rider.eof Set WriteByte
Oberon: Clock GetSelection Install Log NewTask Par Par.pos Par.text Password Remove SetClock Task Time User
SCC: Available Header Header.dadr Header.len Header.sadr Header.typ Header.valid Receive ReceiveHead SendPacket Skip Start
Texts: Append Char Name OpenScanner OpenWriter Pos Read Scan Scanner Scanner.c Scanner.class Scanner.nextCh Scanner.s Text TextDesc.len Write WriteClock WriteInt WriteLn WriteString Writer Writer.buf

MODULE Net; (*NW 3.7.88 / 25.8.91 / PR 7.8.13 / 9.12.13*)
.MODULE Net (KEY 09ABD39E, VERSION 1, SIZE 00001B8C)
.IMPORT SCC (KEY BC919698)
.IMPORT Files (KEY 73F5D686)
.IMPORT Viewers (KEY 25ABF199)
.IMPORT Display (KEY 4C08D3EA)
.IMPORT Texts (KEY 0B9E9984)
.IMPORT Fonts (KEY F4C9F557)
.IMPORT TextFrames (KEY 650813D5)
.IMPORT MenuViewers (KEY 245ACC30)
.IMPORT Oberon (KEY A89CCEE2)
.DATA 50H
.STRING 50H " failed"
.STRING 58H " failed"
.STRING 60H " no link"
.STRING 6CH " no permission"
.STRING 7CH " not done"
.STRING 88H " not found"
.STRING 94H " no response"
.STRING A4H " time set"
.STRING B0H " sending"
.STRING BCH " receiving"
.STRING C8H " changedSystem.Date"
.STRING DCH " sending"
.STRING E8H " receiving"
.STRING F4H " Server started as "
.STRING 108H " Server stopped"
.STRING 118H "SCC.Available() "
.POINTER_REFERENCES 0H 4H 24H 18H 28H
.FIXUP T 0H
IMPORT SYSTEM, SCC, Files, Viewers, Texts, TextFrames, MenuViewers, Oberon;
CONST PakSize = 512;
(*T0 = 300; T1 = 1000; (*timeouts*)*)
T0 = 1000; T1 = 3000; (*timeouts*)
ACK = 10H; NAK = 25H; NPR = 26H; (*acknowledgements*)
NRQ = 34H; NRS = 35H; (*name request, response*)
SND = 41H; REC = 42H; MSG = 44H;
TRQ = 46H; TIM = 47H; (*time requests*)
VAR W: Texts.Writer;
Server: Oberon.Task;
head0, head1: SCC.Header;
partner: ARRAY 8 OF CHAR;
dmy: ARRAY 8 OF BYTE;
protected: BOOLEAN; (*write-protection*)
PROCEDURE SetPartner(name: ARRAY OF CHAR);
BEGINa head0.dadr := head1.sadr;b partner := name
0000a(4EE9000C): SUB SP, SP, CH
0001a(AFE00000): STR LNK, SP, 0H
0002a(A0E00004): STR R0, SP, 4H
0003a(A1E00008): STR R1, SP, 8H
0004b .FIXUP D
0004b(8D000004): LDR SB, MT, MOD0 [Net]
0005b(90D00036): LDR R0, SB, 36H [data]
0006b(B0D0002D): STR R0, SB, 2DH
ENDc SetPartner;
0007c(40D8003C): ADD R0, SB, 3CH
0008c(81E00004): LDR R1, SP, 4H
0009c(82E00008): LDR R2, SP, 8H
000Ac(E100000B): BEQ 11 [0016H]
000Bc(42280003): ADD R2, R2, 3H
000Cc(42220002): ASR R2, R2, 2H
000Dc(43000002): MOV R3, R0, 2H
000Ec(03290003): SUB R3, R2, R3
000Fc(DE02CF3C): BLGT MT [trap=3, pos=719]
0010c(83100000): LDR R3, R1, 0H
0011c(41180004): ADD R1, R1, 4H
0012c(A3000000): STR R3, R0, 0H
0013c(40080004): ADD R0, R0, 4H
0014c(42290001): SUB R2, R2, 1H
0015c(E9FFFFFA): BNE -6 [0010H]
0016c(8FE00000): LDR LNK, SP, 0H
0017c(4EE8000C): ADD SP, SP, CH
0018c(C700000F): B LNK
PROCEDURE Send(t: BYTE; L: INTEGER; data: ARRAY OF BYTE);
BEGINd head0.typ := t;e head0.len := L;f SCC.SendPacket(head0,g data)h
0019d(4EE90014): SUB SP, SP, 14H
001Ad(AFE00000): STR LNK, SP, 0H
001Bd(A0E00004): STR R0, SP, 4H
001Cd(A1E00008): STR R1, SP, 8H
001Dd(A2E0000C): STR R2, SP, CH
001Ed(A3E00010): STR R3, SP, 10H
001Fe(90E00004): LDR R0, SP, 4H
0020e .FIXUP D
0020e(8D00001C): LDR SB, MT, MOD0 [Net]
0021e(B0D0002F): STR R0, SB, 2FH [data]
0022f(80E00008): LDR R0, SP, 8H
0023f(A0D00030): STR R0, SB, 30H
0024g(40D8002C): ADD R0, SB, 2CH
0025g .FIXUP D
0025g(8D100005): LDR SB, MT, MOD1 [SCC]
0026g(41D80001): ADD R1, SB, VAR1
0027h(82E0000C): LDR R2, SP, CH
0028h(83E00010): LDR R3, SP, 10H
ENDi Send;
0029i .FIXUP P
0029i(F7105029): BL MOD1 [SCC] PROC5
002Ai(8FE00000): LDR LNK, SP, 0H
002Bi(4EE80014): ADD SP, SP, 14H
002Ci(C700000F): B LNK
PROCEDURE ReceiveHead(timeout: LONGINT);
VAR time: LONGINT;
BEGINj time := Oberon.Time() +k timeout;l
002Dj(4EE9000C): SUB SP, SP, CH
002Ej(AFE00000): STR LNK, SP, 0H
002Fj(A0E00004): STR R0, SP, 4H
0030k .FIXUP P
0030k(F7916007): BL MOD9 [Oberon] PROC22
0031l(81E00004): LDR R1, SP, 4H
0032l(00080001): ADD R0, R0, R1
0033l(A0E00008): STR R0, SP, 8H
REPEAT
SCC.ReceiveHead(head1)m;n
0034m .FIXUP D
0034m(8D00000F): LDR SB, MT, MOD0 [Net]
0035m(40D80034): ADD R0, SB, 34H [data]
0036m .FIXUP D
0036m(8D100002): LDR SB, MT, MOD1 [SCC]
0037m(41D80001): ADD R1, SB, VAR1
0038n .FIXUP P
0038n(F7108008): BL MOD1 [SCC] PROC8
IF head1.valid & (ohead1.sadr # head0.dadr)p THENq
0039o .FIXUP D
0039o(8D000003): LDR SB, MT, MOD0 [Net]
003Ao(90D00034): LDR R0, SB, 34H [data]
003Bo(E100000B): BEQ 11 [0047H]
003Cp .FIXUP D
003Cp(8D000003): LDR SB, MT, MOD0 [Net]
003Dp(90D00036): LDR R0, SB, 36H [data]
003Ep(91D0002D): LDR R1, SB, 2DH
003Fp(00090001): SUB R0, R0, R1
0040q(E1000006): BEQ 6 [0047H]
SCC.Skip(head1.len)r;s head1.valid := FALSE
0041r .FIXUP D
0041r(8D000005): LDR SB, MT, MOD0 [Net]
0042r(80D00038): LDR R0, SB, 38H [data]
0043s .FIXUP P
0043s(F710900B): BL MOD1 [SCC] PROC9
ENDt;
0044t(40000000): MOV R0, R0, 0H
0045t .FIXUP D
0045t(8D000004): LDR SB, MT, MOD0 [Net]
0046t(B0D00034): STR R0, SB, 34H [data]
IF ~head1.valid &u (vOberon.Time() >=w time)x THENy head1.typ := 0FFH ENDz
0047u .FIXUP D
0047u(8D000002): LDR SB, MT, MOD0 [Net]
0048u(90D00034): LDR R0, SB, 34H [data]
0049v(E9000007): BNE 7 [0051H]
004Aw .FIXUP P
004Aw(F7916007): BL MOD9 [Oberon] PROC22
004Bx(81E00008): LDR R1, SP, 8H
004Cx(00090001): SUB R0, R0, R1
004Dy(E5000003): BLT 3 [0051H]
004Ez(400000FF): MOV R0, R0, FFH
004Fz .FIXUP D
004Fz(8D000008): LDR SB, MT, MOD0 [Net]
0050z(B0D00037): STR R0, SB, 37H [data]
UNTIL head1.valid OR (ahead1.typ = 0FFH)b
0051a .FIXUP D
0051a(8D000002): LDR SB, MT, MOD0 [Net]
0052a(90D00034): LDR R0, SB, 34H [data]
0053a(E9000004): BNE 4 [0058H]
0054b .FIXUP D
0054b(8D000003): LDR SB, MT, MOD0 [Net]
0055b(90D00037): LDR R0, SB, 37H [data]
0056b(400900FF): SUB R0, R0, FFH
ENDc ReceiveHead;
0057c(E9FFFFDC): BNE -36 [0034H]
0058c(8FE00000): LDR LNK, SP, 0H
0059c(4EE8000C): ADD SP, SP, CH
005Ac(C700000F): B LNK
PROCEDURE FindPartner(name: ARRAY OF CHAR; VAR res: INTEGER);
VAR time: LONGINT; k: INTEGER;
Id: ARRAY 8 OF CHAR; IdB: ARRAY 8 OF BYTE;
BEGINd SCC.Skip(SCC.Available())e;f res := 0;g k := 0;h
005Bd(4EE90028): SUB SP, SP, 28H
005Cd(AFE00000): STR LNK, SP, 0H
005Dd(A0E00004): STR R0, SP, 4H
005Ed(A1E00008): STR R1, SP, 8H
005Fd(A2E0000C): STR R2, SP, CH
0060e .FIXUP P
0060e(F7106016): BL MOD1 [SCC] PROC6
0061f .FIXUP P
0061f(F7109001): BL MOD1 [SCC] PROC9
0062g(40000000): MOV R0, R0, 0H
0063g(81E0000C): LDR R1, SP, CH
0064g(A0100000): STR R0, R1, 0H
0065h(40000000): MOV R0, R0, 0H
0066h(A0E00014): STR R0, SP, 14H
WHILE (k < 7)i & (jname[k]k # 0X)l DOm Id[k]n := name[k]o;p IdB[k]q := ORD(Id[k]r);s INC(k) ENDt;
0067i(80E00014): LDR R0, SP, 14H
0068i(40090007): SUB R0, R0, 7H
0069j(ED000022): BGE 34 [008CH]
006Ak(80E00014): LDR R0, SP, 14H
006Bk(81E00008): LDR R1, SP, 8H
006Ck(01090001): SUB R1, R0, R1
006Dk(DA05E11C): BLCC MT [trap=1, pos=1505]
006Ek(81E00004): LDR R1, SP, 4H
006Fk(00180000): ADD R0, R1, R0
0070l(90000000): LDR R0, R0, 0H
0071m(E100001A): BEQ 26 [008CH]
0072n(80E00014): LDR R0, SP, 14H
0073n(41090008): SUB R1, R0, 8H
0074n(DA05F01C): BLCC MT [trap=1, pos=1520]
0075n(00E80000): ADD R0, SP, R0
0076o(81E00014): LDR R1, SP, 14H
0077o(82E00008): LDR R2, SP, 8H
0078o(02190002): SUB R2, R1, R2
0079o(DA05FB1C): BLCC MT [trap=1, pos=1531]
007Ao(82E00004): LDR R2, SP, 4H
007Bo(01280001): ADD R1, R2, R1
007Cp(91100000): LDR R1, R1, 0H
007Dp(B1000018): STR R1, R0, 18H
007Eq(80E00014): LDR R0, SP, 14H
007Fq(41090008): SUB R1, R0, 8H
0080q(DA06031C): BLCC MT [trap=1, pos=1539]
0081q(00E80000): ADD R0, SP, R0
0082r(81E00014): LDR R1, SP, 14H
0083r(42190008): SUB R2, R1, 8H
0084r(DA06101C): BLCC MT [trap=1, pos=1552]
0085r(01E80001): ADD R1, SP, R1
0086s(91100018): LDR R1, R1, 18H
0087s(B1000020): STR R1, R0, 20H
0088t(80E00014): LDR R0, SP, 14H
0089t(40080001): ADD R0, R0, 1H
008At(A0E00014): STR R0, SP, 14H
008Bt(E7FFFFDB): B -37 [0067H]
Id[k]u := 0X;v IdB[k]w := 0;x (* <-- also terminate IdB *)
008Cu(80E00014): LDR R0, SP, 14H
008Du(41090008): SUB R1, R0, 8H
008Eu(DA06281C): BLCC MT [trap=1, pos=1576]
008Fu(00E80000): ADD R0, SP, R0
0090v(41000000): MOV R1, R0, 0H
0091v(B1000018): STR R1, R0, 18H
0092w(80E00014): LDR R0, SP, 14H
0093w(41090008): SUB R1, R0, 8H
0094w(DA06361C): BLCC MT [trap=1, pos=1590]
0095w(00E80000): ADD R0, SP, R0
0096x(41000000): MOV R1, R0, 0H
0097x(B1000020): STR R1, R0, 20H
IF Id # partner THENy
0098y(40E80018): ADD R0, SP, 18H
0099y .FIXUP D
0099y(8D000045): LDR SB, MT, MOD0 [Net]
009Ay(41D8003C): ADD R1, SB, 3CH [data]
009By(92000000): LDR R2, R0, 0H
009Cy(40080001): ADD R0, R0, 1H
009Dy(93100000): LDR R3, R1, 0H
009Ey(41180001): ADD R1, R1, 1H
009Fy(04290003): SUB R4, R2, R3
00A0y(E9000002): BNE 2 [00A3H]
00A1y(44290000): SUB R4, R2, 0H
00A2y(E9FFFFF8): BNE -8 [009BH]
00A3y(E1000033): BEQ 51 [00D7H]
head0.dadr := 0FFH;z Send(NRQ,a k+1,b IdB)c;d time := Oberon.Time() +e T1;f
00A4z(400000FF): MOV R0, R0, FFH
00A5z .FIXUP D
00A5z(8D00000C): LDR SB, MT, MOD0 [Net]
00A6z(B0D0002D): STR R0, SB, 2DH [data]
00A7a(40000034): MOV R0, R0, 34H
00A8b(81E00014): LDR R1, SP, 14H
00A9b(41180001): ADD R1, R1, 1H
00AAc(42E80020): ADD R2, SP, 20H
00ABc(43000008): MOV R3, R0, 8H
00ACd(F7FFFF6C): BL -148 [0019H]
00ADe .FIXUP P
00ADe(F791604C): BL MOD9 [Oberon] PROC22
00AEf(40080BB8): ADD R0, R0, BB8H
00AFf(A0E00010): STR R0, SP, 10H
REPEAT
SCC.ReceiveHead(head1)g;h
00B0g .FIXUP D
00B0g(8D00000B): LDR SB, MT, MOD0 [Net]
00B1g(40D80034): ADD R0, SB, 34H [data]
00B2g .FIXUP D
00B2g(8D100002): LDR SB, MT, MOD1 [SCC]
00B3g(41D80001): ADD R1, SB, VAR1
00B4h .FIXUP P
00B4h(F7108007): BL MOD1 [SCC] PROC8
IF head1.valid THENi
00B5i .FIXUP D
00B5i(8D000003): LDR SB, MT, MOD0 [Net]
00B6i(90D00034): LDR R0, SB, 34H [data]
00B7i(E100000F): BEQ 15 [00C7H]
IF head1.typ = NRS THENj SetPartner(Id)k
00B8j .FIXUP D
00B8j(8D000003): LDR SB, MT, MOD0 [Net]
00B9j(90D00037): LDR R0, SB, 37H [data]
00BAj(40090035): SUB R0, R0, 35H
00BBj(E9000004): BNE 4 [00C0H]
00BCk(40E80018): ADD R0, SP, 18H
00BDk(41000008): MOV R1, R0, 8H
ELSEl SCCm.Skip(head1.len)n;o head1.valid := FALSE
00BEl(F7FFFF41): BL -191 [0000H]
00BFm(E7000006): B 6 [00C6H]
00C0n .FIXUP D
00C0n(8D000008): LDR SB, MT, MOD0 [Net]
00C1n(80D00038): LDR R0, SB, 38H [data]
00C2o .FIXUP P
00C2o(F710900E): BL MOD1 [SCC] PROC9
ENDp
00C3p(40000000): MOV R0, R0, 0H
00C4p .FIXUP D
00C4p(8D000004): LDR SB, MT, MOD0 [Net]
00C5p(B0D00034): STR R0, SB, 34H [data]
ELSIF Oberonq.Time() >=r time THENs res := 1;t partner[0] := 0X
00C6q(E700000A): B 10 [00D1H]
00C7r .FIXUP P
00C7r(F7916005): BL MOD9 [Oberon] PROC22
00C8s(81E00010): LDR R1, SP, 10H
00C9s(00090001): SUB R0, R0, R1
00CAs(E5000006): BLT 6 [00D1H]
00CBt(40000001): MOV R0, R0, 1H
00CCt(81E0000C): LDR R1, SP, CH
00CDt(A0100000): STR R0, R1, 0H
ENDu
00CEu(40000000): MOV R0, R0, 0H
00CFu .FIXUP D
00CFu(8D00000B): LDR SB, MT, MOD0 [Net]
00D0u(B0D0003C): STR R0, SB, 3CH [data]
UNTIL head1.valid OR (vres # 0)w
00D1v .FIXUP D
00D1v(8D000002): LDR SB, MT, MOD0 [Net]
00D2v(90D00034): LDR R0, SB, 34H [data]
00D3v(E9000003): BNE 3 [00D7H]
00D4w(80E0000C): LDR R0, SP, CH
00D5w(80000000): LDR R0, R0, 0H
ENDx
00D6x(E1FFFFD9): BEQ -39 [00B0H]
ENDy FindPartner;
00D7y(8FE00000): LDR LNK, SP, 0H
00D8y(4EE80028): ADD SP, SP, 28H
00D9y(C700000F): B LNK
PROCEDURE AppendS(s: ARRAY OF CHAR; VAR d: ARRAY OF BYTE; VAR k: INTEGER);
VAR i: INTEGER; ch: CHAR;
BEGINz i := 0;a
00DAz(4EE90020): SUB SP, SP, 20H
00DBz(AFE00000): STR LNK, SP, 0H
00DCz(A0E00004): STR R0, SP, 4H
00DDz(A1E00008): STR R1, SP, 8H
00DEz(A2E0000C): STR R2, SP, CH
00DFz(A3E00010): STR R3, SP, 10H
00E0z(A4E00014): STR R4, SP, 14H
00E1a(40000000): MOV R0, R0, 0H
00E2a(A0E00018): STR R0, SP, 18H
REPEAT ch := s[i]b;c d[k]d := ORD(ch);e INC(i);f INC(k) UNTILg ch = 0X
00E3b(80E00018): LDR R0, SP, 18H
00E4b(81E00008): LDR R1, SP, 8H
00E5b(01090001): SUB R1, R0, R1
00E6b(DA08A01C): BLCC MT [trap=1, pos=2208]
00E7b(81E00004): LDR R1, SP, 4H
00E8b(00180000): ADD R0, R1, R0
00E9c(90000000): LDR R0, R0, 0H
00EAc(B0E0001C): STR R0, SP, 1CH
00EBd(80E00014): LDR R0, SP, 14H
00ECd(80000000): LDR R0, R0, 0H
00EDd(81E00010): LDR R1, SP, 10H
00EEd(01090001): SUB R1, R0, R1
00EFd(DA08A61C): BLCC MT [trap=1, pos=2214]
00F0d(81E0000C): LDR R1, SP, CH
00F1d(00180000): ADD R0, R1, R0
00F2e(91E0001C): LDR R1, SP, 1CH
00F3e(B1000000): STR R1, R0, 0H
00F4f(80E00018): LDR R0, SP, 18H
00F5f(40080001): ADD R0, R0, 1H
00F6f(A0E00018): STR R0, SP, 18H
00F7g(80E00014): LDR R0, SP, 14H
00F8g(81000000): LDR R1, R0, 0H
00F9g(41180001): ADD R1, R1, 1H
00FAg(A1000000): STR R1, R0, 0H
ENDh AppendS;
00FBh(90E0001C): LDR R0, SP, 1CH
00FCh(E9FFFFE6): BNE -26 [00E3H]
00FDh(8FE00000): LDR LNK, SP, 0H
00FEh(4EE80020): ADD SP, SP, 20H
00FFh(C700000F): B LNK
PROCEDURE AppendW(s: LONGINT; VAR d: ARRAY OF BYTE;
n: INTEGER; VAR k: INTEGER);
VAR i: INTEGER;
BEGINi i := 0;j
0100i(4EE9001C): SUB SP, SP, 1CH
0101i(AFE00000): STR LNK, SP, 0H
0102i(A0E00004): STR R0, SP, 4H
0103i(A1E00008): STR R1, SP, 8H
0104i(A2E0000C): STR R2, SP, CH
0105i(A3E00010): STR R3, SP, 10H
0106i(A4E00014): STR R4, SP, 14H
0107j(40000000): MOV R0, R0, 0H
0108j(A0E00018): STR R0, SP, 18H
REPEAT d[k]k := s MOD 100H;l s := s DIV 100H;m INC(i);n INC(k) UNTILo i = n
0109k(80E00014): LDR R0, SP, 14H
010Ak(80000000): LDR R0, R0, 0H
010Bk(81E0000C): LDR R1, SP, CH
010Ck(01090001): SUB R1, R0, R1
010Dk(DA096C1C): BLCC MT [trap=1, pos=2412]
010Ek(81E00008): LDR R1, SP, 8H
010Fk(00180000): ADD R0, R1, R0
0110l(81E00004): LDR R1, SP, 4H
0111l(411400FF): AND R1, R1, FFH
0112l(B1000000): STR R1, R0, 0H
0113m(80E00004): LDR R0, SP, 4H
0114m(40020008): ASR R0, R0, 8H
0115m(A0E00004): STR R0, SP, 4H
0116n(80E00018): LDR R0, SP, 18H
0117n(40080001): ADD R0, R0, 1H
0118n(A0E00018): STR R0, SP, 18H
0119o(80E00014): LDR R0, SP, 14H
011Ao(81000000): LDR R1, R0, 0H
011Bo(41180001): ADD R1, R1, 1H
011Co(A1000000): STR R1, R0, 0H
ENDp AppendW;
011Dp(80E00018): LDR R0, SP, 18H
011Ep(81E00010): LDR R1, SP, 10H
011Fp(00090001): SUB R0, R0, R1
0120p(E9FFFFE8): BNE -24 [0109H]
0121p(8FE00000): LDR LNK, SP, 0H
0122p(4EE8001C): ADD SP, SP, 1CH
0123p(C700000F): B LNK
PROCEDURE PickS(VAR s: ARRAY OF CHAR);
VAR i: INTEGER; x: BYTE;
BEGINq i := 0;r
0124q(4EE90014): SUB SP, SP, 14H
0125q(AFE00000): STR LNK, SP, 0H
0126q(A0E00004): STR R0, SP, 4H
0127q(A1E00008): STR R1, SP, 8H
0128r(40000000): MOV R0, R0, 0H
0129r(A0E0000C): STR R0, SP, CH
REPEAT SCC.Receive(x)s;t s[i]u := CHR(x);v INC(i) UNTILw x = 0
012As(40E80010): ADD R0, SP, 10H
012Bt .FIXUP P
012Bt(F7107064): BL MOD1 [SCC] PROC7
012Cu(80E0000C): LDR R0, SP, CH
012Du(81E00008): LDR R1, SP, 8H
012Eu(01090001): SUB R1, R0, R1
012Fu(DA0A2D1C): BLCC MT [trap=1, pos=2605]
0130u(81E00004): LDR R1, SP, 4H
0131u(00180000): ADD R0, R1, R0
0132v(91E00010): LDR R1, SP, 10H
0133v(B1000000): STR R1, R0, 0H
0134w(80E0000C): LDR R0, SP, CH
0135w(40080001): ADD R0, R0, 1H
0136w(A0E0000C): STR R0, SP, CH
ENDx PickS;
0137x(90E00010): LDR R0, SP, 10H
0138x(E9FFFFF1): BNE -15 [012AH]
0139x(8FE00000): LDR LNK, SP, 0H
013Ax(4EE80014): ADD SP, SP, 14H
013Bx(C700000F): B LNK
PROCEDURE PickQ(VAR w: LONGINT);
VAR x0, x1, x2, x3: BYTE;
BEGINy SCC.Receive(x0)z;a SCC.Receive(x1)b;c SCC.Receive(x2)d;e SCC.Receive(x3)f;g
013Cy(4EE9000C): SUB SP, SP, CH
013Dy(AFE00000): STR LNK, SP, 0H
013Ey(A0E00004): STR R0, SP, 4H
013Fz(40E80008): ADD R0, SP, 8H
0140a .FIXUP P
0140a(F7107015): BL MOD1 [SCC] PROC7
0141b(40E80009): ADD R0, SP, 9H
0142c .FIXUP P
0142c(F7107002): BL MOD1 [SCC] PROC7
0143d(40E8000A): ADD R0, SP, AH
0144e .FIXUP P
0144e(F7107002): BL MOD1 [SCC] PROC7
0145f(40E8000B): ADD R0, SP, BH
0146g .FIXUP P
0146g(F7107002): BL MOD1 [SCC] PROC7
w := x0 + 100H * (x1 + 100H * (x2 + 100H * x3)h)i
0147h(90E0000B): LDR R0, SP, BH
0148h(40010008): LSL R0, R0, 8H
0149h(91E0000A): LDR R1, SP, AH
014Ah(00180000): ADD R0, R1, R0
014Bi(40010008): LSL R0, R0, 8H
014Ci(91E00009): LDR R1, SP, 9H
014Di(00180000): ADD R0, R1, R0
ENDj PickQ;
014Ej(40010008): LSL R0, R0, 8H
014Fj(91E00008): LDR R1, SP, 8H
0150j(00180000): ADD R0, R1, R0
0151j(81E00004): LDR R1, SP, 4H
0152j(A0100000): STR R0, R1, 0H
0153j(8FE00000): LDR LNK, SP, 0H
0154j(4EE8000C): ADD SP, SP, CH
0155j(C700000F): B LNK
PROCEDURE SendData(F: Files.File);
VAR k, seqno: INTEGER;
x: BYTE;
len: LONGINT;
R: Files.Rider;
buf: ARRAY PakSize OF BYTE;
BEGINk Files.Set(R,l F,m 0)n;o len := 0;p seqno := 0;q
0156k(4EE90230): SUB SP, SP, 230H
0157k(AFE00000): STR LNK, SP, 0H
0158k(A0E00004): STR R0, SP, 4H
0159l(40E80018): ADD R0, SP, 18H
015Al .FIXUP D
015Al(8D200089): LDR SB, MT, MOD2 [Files]
015Bl(41D80001): ADD R1, SB, VAR1
015Cm(82E00004): LDR R2, SP, 4H
015Dn(43000000): MOV R3, R0, 0H
015Eo .FIXUP P
015Eo(F720B018): BL MOD2 [Files] PROC11
015Fp(40000000): MOV R0, R0, 0H
0160p(A0E00014): STR R0, SP, 14H
0161q(40000000): MOV R0, R0, 0H
0162q(A0E0000C): STR R0, SP, CH
REPEAT k := 0;r
0163r(40000000): MOV R0, R0, 0H
0164r(A0E00008): STR R0, SP, 8H
REPEAT Files.ReadByte(R,s x)t;u
0165s(40E80018): ADD R0, SP, 18H
0166s .FIXUP D
0166s(8D20000C): LDR SB, MT, MOD2 [Files]
0167s(41D80001): ADD R1, SB, VAR1
0168t(42E80010): ADD R2, SP, 10H
0169u .FIXUP P
0169u(F720E00B): BL MOD2 [Files] PROC14
IF ~R.eof THENv buf[k]w := x;x INC(k) ENDy
016Av(90E00018): LDR R0, SP, 18H
016Bv(E9000009): BNE 9 [0175H]
016Cw(80E00008): LDR R0, SP, 8H
016Dw(41090200): SUB R1, R0, 200H
016Ew(DA0C491C): BLCC MT [trap=1, pos=3145]
016Fw(00E80000): ADD R0, SP, R0
0170x(91E00010): LDR R1, SP, 10H
0171x(B1000030): STR R1, R0, 30H
0172y(80E00008): LDR R0, SP, 8H
0173y(40080001): ADD R0, R0, 1H
0174y(A0E00008): STR R0, SP, 8H
UNTIL R.eof OR (zk = PakSize)a;b
0175z(90E00018): LDR R0, SP, 18H
0176z(E9000003): BNE 3 [017AH]
0177a(80E00008): LDR R0, SP, 8H
0178a(40090200): SUB R0, R0, 200H
0179b(E9FFFFEB): BNE -21 [0165H]
REPEAT Send(seqno,c k,d buf)e;f ReceiveHead(T1)g
017Ac(80E0000C): LDR R0, SP, CH
017Bd(81E00008): LDR R1, SP, 8H
017Ce(42E80030): ADD R2, SP, 30H
017De(43000200): MOV R3, R0, 200H
017Ef(F7FFFE9A): BL -358 [0019H]
017Fg(40000BB8): MOV R0, R0, BB8H
UNTILh head1.typ # seqno + ACK;i
0180h(F7FFFEAC): BL -340 [002DH]
0181i(80E0000C): LDR R0, SP, CH
0182i(40080010): ADD R0, R0, 10H
0183i .FIXUP D
0183i(8D00001D): LDR SB, MT, MOD0 [Net]
0184i(91D00037): LDR R1, SB, 37H [data]
0185i(01190000): SUB R1, R1, R0
0186i(E1FFFFF3): BEQ -13 [017AH]
seqno := (seqno + 1)j MOD 8;k len := len + k;l
0187j(80E0000C): LDR R0, SP, CH
0188j(40080001): ADD R0, R0, 1H
0189k(40040007): AND R0, R0, 7H
018Ak(A0E0000C): STR R0, SP, CH
018Bl(80E00014): LDR R0, SP, 14H
018Cl(81E00008): LDR R1, SP, 8H
018Dl(00080001): ADD R0, R0, R1
018El(A0E00014): STR R0, SP, 14H
IF head1.typ # seqno + ACK THENm
018Fm(80E0000C): LDR R0, SP, CH
0190m(40080010): ADD R0, R0, 10H
0191m .FIXUP D
0191m(8D00000E): LDR SB, MT, MOD0 [Net]
0192m(91D00037): LDR R1, SB, 37H [data]
0193m(01190000): SUB R1, R1, R0
0194m(E100000A): BEQ 10 [019FH]
Texts.WriteString(W,n " failed")o;p k := 0
0195n .FIXUP D
0195n(8D000004): LDR SB, MT, MOD0 [Net]
0196n(40D80000): ADD R0, SB, 0H [data]
0197n .FIXUP D
0197n(8D500002): LDR SB, MT, MOD5 [Texts]
0198n(41D80005): ADD R1, SB, VAR5
0199o .FIXUP D
0199o(8D000002): LDR SB, MT, MOD0 [Net]
019Ao(42D80050): ADD R2, SB, 50H [" failed"]
019Bo(43000008): MOV R3, R0, 8H
019Cp .FIXUP P
019Cp(F751D033): BL MOD5 [Texts] PROC29
ENDq
019Dq(40000000): MOV R0, R0, 0H
019Eq(A0E00008): STR R0, SP, 8H
UNTIL k < PakSize;r
019Fr(80E00008): LDR R0, SP, 8H
01A0r(40090200): SUB R0, R0, 200H
01A1r(EDFFFFC1): BGE -63 [0163H]
Texts.WriteInt(W,s len,t 7)u
01A2s .FIXUP D
01A2s(8D000009): LDR SB, MT, MOD0 [Net]
01A3s(40D80000): ADD R0, SB, 0H [data]
01A4s .FIXUP D
01A4s(8D500002): LDR SB, MT, MOD5 [Texts]
01A5s(41D80005): ADD R1, SB, VAR5
01A6t(82E00014): LDR R2, SP, 14H
01A7u(43000007): MOV R3, R0, 7H
ENDv SendData;
01A8v .FIXUP P
01A8v(F751E00C): BL MOD5 [Texts] PROC30
01A9v(8FE00000): LDR LNK, SP, 0H
01AAv(4EE80230): ADD SP, SP, 230H
01ABv(C700000F): B LNK
PROCEDURE ReceiveData(F: Files.File; VAR done: BOOLEAN);
VAR k, retry, seqno: INTEGER;
x: BYTE;
len: LONGINT;
R: Files.Rider;
BEGINw Files.Set(R,x F,y 0)z;a seqno := 0;b len := 0;c retry := 2;d k := PakSize;e
01ACw(4EE90038): SUB SP, SP, 38H
01ADw(AFE00000): STR LNK, SP, 0H
01AEw(A0E00004): STR R0, SP, 4H
01AFw(A1E00008): STR R1, SP, 8H
01B0x(40E80020): ADD R0, SP, 20H
01B1x .FIXUP D
01B1x(8D20000D): LDR SB, MT, MOD2 [Files]
01B2x(41D80001): ADD R1, SB, VAR1
01B3y(82E00004): LDR R2, SP, 4H
01B4z(43000000): MOV R3, R0, 0H
01B5a .FIXUP P
01B5a(F720B00D): BL MOD2 [Files] PROC11
01B6b(40000000): MOV R0, R0, 0H
01B7b(A0E00014): STR R0, SP, 14H
01B8c(40000000): MOV R0, R0, 0H
01B9c(A0E0001C): STR R0, SP, 1CH
01BAd(40000002): MOV R0, R0, 2H
01BBd(A0E00010): STR R0, SP, 10H
01BCe(40000200): MOV R0, R0, 200H
01BDe(A0E0000C): STR R0, SP, CH
REPEAT
IF head1.typ = seqno THENf
01BEf .FIXUP D
01BEf(8D00000D): LDR SB, MT, MOD0 [Net]
01BFf(90D00037): LDR R0, SB, 37H [data]
01C0f(81E00014): LDR R1, SP, 14H
01C1f(00090001): SUB R0, R0, R1
01C2f(E900002A): BNE 42 [01EDH]
seqno := (seqno + 1)g MOD 8;h len := len + head1.len;i retry := 2;j
01C3g(80E00014): LDR R0, SP, 14H
01C4g(40080001): ADD R0, R0, 1H
01C5h(40040007): AND R0, R0, 7H
01C6h(A0E00014): STR R0, SP, 14H
01C7i(80E0001C): LDR R0, SP, 1CH
01C8i .FIXUP D
01C8i(8D00000A): LDR SB, MT, MOD0 [Net]
01C9i(81D00038): LDR R1, SB, 38H [data]
01CAi(00080001): ADD R0, R0, R1
01CBi(A0E0001C): STR R0, SP, 1CH
01CCj(40000002): MOV R0, R0, 2H
01CDj(A0E00010): STR R0, SP, 10H
Send(seqno + ACK,k 0,l dmy)m;n k := 0;o
01CEk(80E00014): LDR R0, SP, 14H
01CFk(40080010): ADD R0, R0, 10H
01D0l(41000000): MOV R1, R0, 0H
01D1m(42D80044): ADD R2, SB, 44H
01D2m(43000008): MOV R3, R0, 8H
01D3n(F7FFFE45): BL -443 [0019H]
01D4o(40000000): MOV R0, R0, 0H
01D5o(A0E0000C): STR R0, SP, CH
WHILE k < head1.len DOp
01D6p(80E0000C): LDR R0, SP, CH
01D7p .FIXUP D
01D7p(8D00000F): LDR SB, MT, MOD0 [Net]
01D8p(81D00038): LDR R1, SB, 38H [data]
01D9p(00090001): SUB R0, R0, R1
01DAp(ED00000B): BGE 11 [01E6H]
SCC.Receive(x)q;r Files.WriteByte(R,s x)t;u INC(k)
01DBq(40E80018): ADD R0, SP, 18H
01DCr .FIXUP P
01DCr(F7107027): BL MOD1 [SCC] PROC7
01DDs(40E80020): ADD R0, SP, 20H
01DEs .FIXUP D
01DEs(8D200007): LDR SB, MT, MOD2 [Files]
01DFs(41D80001): ADD R1, SB, VAR1
01E0t(92E00018): LDR R2, SP, 18H
01E1u .FIXUP P
01E1u(F7216005): BL MOD2 [Files] PROC22
ENDv ;
01E2v(80E0000C): LDR R0, SP, CH
01E3v(40080001): ADD R0, R0, 1H
01E4v(A0E0000C): STR R0, SP, CH
01E5v(E7FFFFF0): B -16 [01D6H]
IF k < PakSize THENw done := TRUE ENDx
01E6w(80E0000C): LDR R0, SP, CH
01E7w(40090200): SUB R0, R0, 200H
01E8w(ED000003): BGE 3 [01ECH]
01E9x(40000001): MOV R0, R0, 1H
01EAx(81E00008): LDR R1, SP, 8H
01EBx(B0100000): STR R0, R1, 0H
ELSE DECy(retry);z
01ECy(E7000019): B 25 [0206H]
01EDz(80E00010): LDR R0, SP, 10H
01EEz(40090001): SUB R0, R0, 1H
01EFz(A0E00010): STR R0, SP, 10H
IF retry = 0 THENa
01F0a(80E00010): LDR R0, SP, 10H
01F1a(E900000D): BNE 13 [01FFH]
Texts.WriteString(W,b " failed")c;d done := FALSE;e k := 0
01F2b .FIXUP D
01F2b(8D000014): LDR SB, MT, MOD0 [Net]
01F3b(40D80000): ADD R0, SB, 0H [data]
01F4b .FIXUP D
01F4b(8D500002): LDR SB, MT, MOD5 [Texts]
01F5b(41D80005): ADD R1, SB, VAR5
01F6c .FIXUP D
01F6c(8D000002): LDR SB, MT, MOD0 [Net]
01F7c(42D80058): ADD R2, SB, 58H [" failed"]
01F8c(43000008): MOV R3, R0, 8H
01F9d .FIXUP P
01F9d(F751D018): BL MOD5 [Texts] PROC29
01FAe(40000000): MOV R0, R0, 0H
01FBe(81E00008): LDR R1, SP, 8H
01FCe(B0100000): STR R0, R1, 0H
ENDf ;
01FDf(40000000): MOV R0, R0, 0H
01FEf(A0E0000C): STR R0, SP, CH
Send(seqno + ACK,g 0,h dmy)i
01FFg(80E00014): LDR R0, SP, 14H
0200g(40080010): ADD R0, R0, 10H
0201h(41000000): MOV R1, R0, 0H
0202i .FIXUP D
0202i(8D00000C): LDR SB, MT, MOD0 [Net]
0203i(42D80044): ADD R2, SB, 44H [data]
0204i(43000008): MOV R3, R0, 8H
ENDj ;
0205j(F7FFFE13): BL -493 [0019H]
ReceiveHead(T0)k
0206k(400003E8): MOV R0, R0, 3E8H
UNTILl k < PakSize;m
0207l(F7FFFE25): BL -475 [002DH]
0208m(80E0000C): LDR R0, SP, CH
0209m(40090200): SUB R0, R0, 200H
020Am(EDFFFFB3): BGE -77 [01BEH]
Texts.WriteInt(W,n len,o 7)p
020Bn .FIXUP D
020Bn(8D000009): LDR SB, MT, MOD0 [Net]
020Cn(40D80000): ADD R0, SB, 0H [data]
020Dn .FIXUP D
020Dn(8D500002): LDR SB, MT, MOD5 [Texts]
020En(41D80005): ADD R1, SB, VAR5
020Fo(82E0001C): LDR R2, SP, 1CH
0210p(43000007): MOV R3, R0, 7H
ENDq ReceiveData;
0211q .FIXUP P
0211q(F751E018): BL MOD5 [Texts] PROC30
0212q(8FE00000): LDR LNK, SP, 0H
0213q(4EE80038): ADD SP, SP, 38H
0214q(C700000F): B LNK
PROCEDURE reply(msg: INTEGER);
BEGINr
0215r(4EE90008): SUB SP, SP, 8H
0216r(AFE00000): STR LNK, SP, 0H
0217r(A0E00004): STR R0, SP, 4H
IF msg = 1 THENs Texts.WriteString(W,t " no link")u
0218s(80E00004): LDR R0, SP, 4H
0219s(40090001): SUB R0, R0, 1H
021As(E9000009): BNE 9 [0224H]
021Bt .FIXUP D
021Bt(8D00000E): LDR SB, MT, MOD0 [Net]
021Ct(40D80000): ADD R0, SB, 0H [data]
021Dt .FIXUP D
021Dt(8D500002): LDR SB, MT, MOD5 [Texts]
021Et(41D80005): ADD R1, SB, VAR5
021Fu .FIXUP D
021Fu(8D000002): LDR SB, MT, MOD0 [Net]
0220u(42D80060): ADD R2, SB, 60H [" no link"]
0221u(43000009): MOV R3, R0, 9H
ELSIFv msgw = 2 THENx Texts.WriteString(W,y " no permission")z
0222v .FIXUP P
0222v(F751D011): BL MOD5 [Texts] PROC29
0223w(E700003B): B 59 [025FH]
0224x(80E00004): LDR R0, SP, 4H
0225x(40090002): SUB R0, R0, 2H
0226x(E9000009): BNE 9 [0230H]
0227y .FIXUP D
0227y(8D000008): LDR SB, MT, MOD0 [Net]
0228y(40D80000): ADD R0, SB, 0H [data]
0229y .FIXUP D
0229y(8D500002): LDR SB, MT, MOD5 [Texts]
022Ay(41D80005): ADD R1, SB, VAR5
022Bz .FIXUP D
022Bz(8D000002): LDR SB, MT, MOD0 [Net]
022Cz(42D8006C): ADD R2, SB, 6CH [" no permission"]
022Dz(4300000F): MOV R3, R0, FH
ELSIFa msgb = 3 THENc Texts.WriteString(W,d " not done")e
022Ea .FIXUP P
022Ea(F751D00C): BL MOD5 [Texts] PROC29
022Fb(E700002F): B 47 [025FH]
0230c(80E00004): LDR R0, SP, 4H
0231c(40090003): SUB R0, R0, 3H
0232c(E9000009): BNE 9 [023CH]
0233d .FIXUP D
0233d(8D000008): LDR SB, MT, MOD0 [Net]
0234d(40D80000): ADD R0, SB, 0H [data]
0235d .FIXUP D
0235d(8D500002): LDR SB, MT, MOD5 [Texts]
0236d(41D80005): ADD R1, SB, VAR5
0237e .FIXUP D
0237e(8D000002): LDR SB, MT, MOD0 [Net]
0238e(42D8007C): ADD R2, SB, 7CH [" not done"]
0239e(4300000A): MOV R3, R0, AH
ELSIFf msgg = 4 THENh Texts.WriteString(W,i " not found")j
023Af .FIXUP P
023Af(F751D00C): BL MOD5 [Texts] PROC29
023Bg(E7000023): B 35 [025FH]
023Ch(80E00004): LDR R0, SP, 4H
023Dh(40090004): SUB R0, R0, 4H
023Eh(E9000009): BNE 9 [0248H]
023Fi .FIXUP D
023Fi(8D000008): LDR SB, MT, MOD0 [Net]
0240i(40D80000): ADD R0, SB, 0H [data]
0241i .FIXUP D
0241i(8D500002): LDR SB, MT, MOD5 [Texts]
0242i(41D80005): ADD R1, SB, VAR5
0243j .FIXUP D
0243j(8D000002): LDR SB, MT, MOD0 [Net]
0244j(42D80088): ADD R2, SB, 88H [" not found"]
0245j(4300000B): MOV R3, R0, BH
ELSIFk msgl = 5 THENm Texts.WriteString(W,n " no response")o
0246k .FIXUP P
0246k(F751D00C): BL MOD5 [Texts] PROC29
0247l(E7000017): B 23 [025FH]
0248m(80E00004): LDR R0, SP, 4H
0249m(40090005): SUB R0, R0, 5H
024Am(E9000009): BNE 9 [0254H]
024Bn .FIXUP D
024Bn(8D000008): LDR SB, MT, MOD0 [Net]
024Cn(40D80000): ADD R0, SB, 0H [data]
024Dn .FIXUP D
024Dn(8D500002): LDR SB, MT, MOD5 [Texts]
024En(41D80005): ADD R1, SB, VAR5
024Fo .FIXUP D
024Fo(8D000002): LDR SB, MT, MOD0 [Net]
0250o(42D80094): ADD R2, SB, 94H [" no response"]
0251o(4300000D): MOV R3, R0, DH
ELSIFp msgq = 6 THENr Texts.WriteString(W,s " time set")t
0252p .FIXUP P
0252p(F751D00C): BL MOD5 [Texts] PROC29
0253q(E700000B): B 11 [025FH]
0254r(80E00004): LDR R0, SP, 4H
0255r(40090006): SUB R0, R0, 6H
0256r(E9000008): BNE 8 [025FH]
0257s .FIXUP D
0257s(8D000008): LDR SB, MT, MOD0 [Net]
0258s(40D80000): ADD R0, SB, 0H [data]
0259s .FIXUP D
0259s(8D500002): LDR SB, MT, MOD5 [Texts]
025As(41D80005): ADD R1, SB, VAR5
025Bt .FIXUP D
025Bt(8D000002): LDR SB, MT, MOD0 [Net]
025Ct(42D800A4): ADD R2, SB, A4H [" time set"]
025Dt(4300000A): MOV R3, R0, AH
ENDu ;
025Eu .FIXUP P
025Eu(F751D00C): BL MOD5 [Texts] PROC29
Texts.WriteLn(W)v;w Texts.Append(Oberon.Log,x W.buf)y
025Fv .FIXUP D
025Fv(8D000004): LDR SB, MT, MOD0 [Net]
0260v(40D80000): ADD R0, SB, 0H [data]
0261v .FIXUP D
0261v(8D500002): LDR SB, MT, MOD5 [Texts]
0262v(41D80005): ADD R1, SB, VAR5
0263w .FIXUP P
0263w(F751C005): BL MOD5 [Texts] PROC28
0264x .FIXUP D
0264x(8D900003): LDR SB, MT, MOD9 [Oberon]
0265x(80D0000D): LDR R0, SB, VAR13
0266y .FIXUP D
0266y(8D000002): LDR SB, MT, MOD0 [Net]
0267y(81D00000): LDR R1, SB, 0H [data]
ENDz reply;
0268z .FIXUP P
0268z(F750E005): BL MOD5 [Texts] PROC14
0269z(8FE00000): LDR LNK, SP, 0H
026Az(4EE80008): ADD SP, SP, 8H
026Bz(C700000F): B LNK
PROCEDURE Serve;
VAR i: INTEGER;
done: BOOLEAN; x: BYTE;
F: Files.File;
pw, clock, newclock: LONGINT;
Id: ARRAY 8 OF CHAR;
IdB: ARRAY 8 OF BYTE;
FileName: ARRAY 32 OF CHAR;
BEGINa
026Ca(4EE9004C): SUB SP, SP, 4CH
026Da(AFE00000): STR LNK, SP, 0H
SCC.ReceiveHead(head1)b;c
026Eb .FIXUP D
026Eb(8D000008): LDR SB, MT, MOD0 [Net]
026Fb(40D80034): ADD R0, SB, 34H [data]
0270b .FIXUP D
0270b(8D100002): LDR SB, MT, MOD1 [SCC]
0271b(41D80001): ADD R1, SB, VAR1
0272c .FIXUP P
0272c(F710800A): BL MOD1 [SCC] PROC8
IF head1.valid THENd
0273d .FIXUP D
0273d(8D000003): LDR SB, MT, MOD0 [Net]
0274d(90D00034): LDR R0, SB, 34H [data]
0275d(E100014C): BEQ 332 [03C2H]
IF head1.typ = SND THENe
0276e .FIXUP D
0276e(8D000003): LDR SB, MT, MOD0 [Net]
0277e(90D00037): LDR R0, SB, 37H [data]
0278e(40090041): SUB R0, R0, 41H
0279e(E9000044): BNE 68 [02BEH]
PickS(Id)f;g PickQ(pw)h;i PickS(FileName)j;k
027Af(40E8001C): ADD R0, SP, 1CH
027Bf(41000008): MOV R1, R0, 8H
027Cg(F7FFFEA7): BL -345 [0124H]
027Dh(40E80010): ADD R0, SP, 10H
027Ei(F7FFFEBD): BL -323 [013CH]
027Fj(40E8002C): ADD R0, SP, 2CH
0280j(41000020): MOV R1, R0, 20H
0281k(F7FFFEA2): BL -350 [0124H]
Texts.WriteString(W,l Id)m;n Texts.Write(W,o " ")p;q
0282l .FIXUP D
0282l(8D00000C): LDR SB, MT, MOD0 [Net]
0283l(40D80000): ADD R0, SB, 0H [data]
0284l .FIXUP D
0284l(8D500002): LDR SB, MT, MOD5 [Texts]
0285l(41D80005): ADD R1, SB, VAR5
0286m(42E8001C): ADD R2, SP, 1CH
0287m(43000008): MOV R3, R0, 8H
0288n .FIXUP P
0288n(F751D016): BL MOD5 [Texts] PROC29
0289o .FIXUP D
0289o(8D000005): LDR SB, MT, MOD0 [Net]
028Ao(40D80000): ADD R0, SB, 0H [data]
028Bo .FIXUP D
028Bo(8D500002): LDR SB, MT, MOD5 [Texts]
028Co(41D80005): ADD R1, SB, VAR5
028Dp(42000020): MOV R2, R0, 20H
028Eq .FIXUP P
028Eq(F751B006): BL MOD5 [Texts] PROC27
Texts.WriteString(W,r FileName)s;t
028Fr .FIXUP D
028Fr(8D000004): LDR SB, MT, MOD0 [Net]
0290r(40D80000): ADD R0, SB, 0H [data]
0291r .FIXUP D
0291r(8D500002): LDR SB, MT, MOD5 [Texts]
0292r(41D80005): ADD R1, SB, VAR5
0293s(42E8002C): ADD R2, SP, 2CH
0294s(43000020): MOV R3, R0, 20H
0295t .FIXUP P
0295t(F751D007): BL MOD5 [Texts] PROC29
F := Files.Old(FileName)u;v
0296u(40E8002C): ADD R0, SP, 2CH
0297u(41000020): MOV R1, R0, 20H
0298v .FIXUP P
0298v(F7202003): BL MOD2 [Files] PROC2
0299v(A0E0000C): STR R0, SP, CH
IF F # NIL THENw
029Aw(80E0000C): LDR R0, SP, CH
029Bw(E1000013): BEQ 19 [02AFH]
Texts.WriteString(W,x " sending")y;z SetPartner(Id)a;b
029Cx .FIXUP D
029Cx(8D00000B): LDR SB, MT, MOD0 [Net]
029Dx(40D80000): ADD R0, SB, 0H [data]
029Ex .FIXUP D
029Ex(8D500002): LDR SB, MT, MOD5 [Texts]
029Fx(41D80005): ADD R1, SB, VAR5
02A0y .FIXUP D
02A0y(8D000002): LDR SB, MT, MOD0 [Net]
02A1y(42D800B0): ADD R2, SB, B0H [" sending"]
02A2y(43000009): MOV R3, R0, 9H
02A3z .FIXUP P
02A3z(F751D00B): BL MOD5 [Texts] PROC29
02A4a(40E8001C): ADD R0, SP, 1CH
02A5a(41000008): MOV R1, R0, 8H
02A6b(F7FFFD59): BL -679 [0000H]
Texts.Append(Oberon.Log,c W.buf)d;e SendData(F)f
02A7c .FIXUP D
02A7c(8D900007): LDR SB, MT, MOD9 [Oberon]
02A8c(80D0000D): LDR R0, SB, VAR13
02A9d .FIXUP D
02A9d(8D000002): LDR SB, MT, MOD0 [Net]
02AAd(81D00000): LDR R1, SB, 0H [data]
02ABe .FIXUP P
02ABe(F750E008): BL MOD5 [Texts] PROC14
02ACf(80E0000C): LDR R0, SP, CH
ELSEg Sendh(NAK,i 0,j dmy)k;l Texts.Write(W,m "~")n
02ADg(F7FFFEA8): BL -344 [0156H]
02AEh(E700000C): B 12 [02BBH]
02AFi(40000025): MOV R0, R0, 25H
02B0j(41000000): MOV R1, R0, 0H
02B1k .FIXUP D
02B1k(8D000008): LDR SB, MT, MOD0 [Net]
02B2k(42D80044): ADD R2, SB, 44H [data]
02B3k(43000008): MOV R3, R0, 8H
02B4l(F7FFFD64): BL -668 [0019H]
02B5m .FIXUP D
02B5m(8D000004): LDR SB, MT, MOD0 [Net]
02B6m(40D80000): ADD R0, SB, 0H [data]
02B7m .FIXUP D
02B7m(8D500002): LDR SB, MT, MOD5 [Texts]
02B8m(41D80005): ADD R1, SB, VAR5
02B9n(4200007E): MOV R2, R0, 7EH
ENDo ;
02BAo .FIXUP P
02BAo(F751B00F): BL MOD5 [Texts] PROC27
reply(0)p
02BBp(40000000): MOV R0, R0, 0H
ELSIFq head1r.typ = REC THENs
02BCq(F7FFFF58): BL -168 [0215H]
02BDr(E7000104): B 260 [03C2H]
02BEs .FIXUP D
02BEs(8D000007): LDR SB, MT, MOD0 [Net]
02BFs(90D00037): LDR R0, SB, 37H [data]
02C0s(40090042): SUB R0, R0, 42H
02C1s(E900005B): BNE 91 [031DH]
PickS(Id)t;u PickQ(pw)v;w PickS(FileName)x;y
02C2t(40E8001C): ADD R0, SP, 1CH
02C3t(41000008): MOV R1, R0, 8H
02C4u(F7FFFE5F): BL -417 [0124H]
02C5v(40E80010): ADD R0, SP, 10H
02C6w(F7FFFE75): BL -395 [013CH]
02C7x(40E8002C): ADD R0, SP, 2CH
02C8x(41000020): MOV R1, R0, 20H
02C9y(F7FFFE5A): BL -422 [0124H]
IF ~protected THENz
02CAz .FIXUP D
02CAz(8D00000C): LDR SB, MT, MOD0 [Net]
02CBz(90D0004C): LDR R0, SB, 4CH [data]
02CCz(E9000049): BNE 73 [0316H]
Texts.WriteString(W,a Id)b;c Texts.Write(W,d " ")e;f
02CDa .FIXUP D
02CDa(8D000003): LDR SB, MT, MOD0 [Net]
02CEa(40D80000): ADD R0, SB, 0H [data]
02CFa .FIXUP D
02CFa(8D500002): LDR SB, MT, MOD5 [Texts]
02D0a(41D80005): ADD R1, SB, VAR5
02D1b(42E8001C): ADD R2, SP, 1CH
02D2b(43000008): MOV R3, R0, 8H
02D3c .FIXUP P
02D3c(F751D019): BL MOD5 [Texts] PROC29
02D4d .FIXUP D
02D4d(8D000005): LDR SB, MT, MOD0 [Net]
02D5d(40D80000): ADD R0, SB, 0H [data]
02D6d .FIXUP D
02D6d(8D500002): LDR SB, MT, MOD5 [Texts]
02D7d(41D80005): ADD R1, SB, VAR5
02D8e(42000020): MOV R2, R0, 20H
02D9f .FIXUP P
02D9f(F751B006): BL MOD5 [Texts] PROC27
Texts.WriteString(W,g FileName)h;i
02DAg .FIXUP D
02DAg(8D000004): LDR SB, MT, MOD0 [Net]
02DBg(40D80000): ADD R0, SB, 0H [data]
02DCg .FIXUP D
02DCg(8D500002): LDR SB, MT, MOD5 [Texts]
02DDg(41D80005): ADD R1, SB, VAR5
02DEh(42E8002C): ADD R2, SP, 2CH
02DFh(43000020): MOV R3, R0, 20H
02E0i .FIXUP P
02E0i(F751D007): BL MOD5 [Texts] PROC29
F := Files.New(FileName)j;k
02E1j(40E8002C): ADD R0, SP, 2CH
02E2j(41000020): MOV R1, R0, 20H
02E3k .FIXUP P
02E3k(F7203003): BL MOD2 [Files] PROC3
02E4k(A0E0000C): STR R0, SP, CH
IF F # NIL THENl
02E5l(80E0000C): LDR R0, SP, CH
02E6l(E1000020): BEQ 32 [0307H]
Texts.WriteString(W,m " receiving")n;o SetPartner(Id)p;q
02E7m .FIXUP D
02E7m(8D00000B): LDR SB, MT, MOD0 [Net]
02E8m(40D80000): ADD R0, SB, 0H [data]
02E9m .FIXUP D
02E9m(8D500002): LDR SB, MT, MOD5 [Texts]
02EAm(41D80005): ADD R1, SB, VAR5
02EBn .FIXUP D
02EBn(8D000002): LDR SB, MT, MOD0 [Net]
02ECn(42D800BC): ADD R2, SB, BCH [" receiving"]
02EDn(4300000B): MOV R3, R0, BH
02EEo .FIXUP P
02EEo(F751D00B): BL MOD5 [Texts] PROC29
02EFp(40E8001C): ADD R0, SP, 1CH
02F0p(41000008): MOV R1, R0, 8H
02F1q(F7FFFD0E): BL -754 [0000H]
Texts.Append(Oberon.Log,r W.buf)s;t
02F2r .FIXUP D
02F2r(8D900007): LDR SB, MT, MOD9 [Oberon]
02F3r(80D0000D): LDR R0, SB, VAR13
02F4s .FIXUP D
02F4s(8D000002): LDR SB, MT, MOD0 [Net]
02F5s(81D00000): LDR R1, SB, 0H [data]
02F6t .FIXUP P
02F6t(F750E008): BL MOD5 [Texts] PROC14
Send(ACK,u 0,v dmy)w;x ReceiveHead(T0)y;z ReceiveData(F,a done)b;c
02F7u(40000010): MOV R0, R0, 10H
02F8v(41000000): MOV R1, R0, 0H
02F9w .FIXUP D
02F9w(8D000005): LDR SB, MT, MOD0 [Net]
02FAw(42D80044): ADD R2, SB, 44H [data]
02FBw(43000008): MOV R3, R0, 8H
02FCx(F7FFFD1C): BL -740 [0019H]
02FDy(400003E8): MOV R0, R0, 3E8H
02FEz(F7FFFD2E): BL -722 [002DH]
02FFa(80E0000C): LDR R0, SP, CH
0300b(41E80008): ADD R1, SP, 8H
0301c(F7FFFEAA): BL -342 [01ACH]
IF done THENd Files.Register(F)e ENDf
0302d(90E00008): LDR R0, SP, 8H
0303d(E1000002): BEQ 2 [0306H]
0304e(80E0000C): LDR R0, SP, CH
0305f .FIXUP P
0305f(F720400F): BL MOD2 [Files] PROC4
ELSE Sendg(NAK,h 0,i dmy)j;k Texts.Write(W,l "~")m
0306g(E700000C): B 12 [0313H]
0307h(40000025): MOV R0, R0, 25H
0308i(41000000): MOV R1, R0, 0H
0309j .FIXUP D
0309j(8D000010): LDR SB, MT, MOD0 [Net]
030Aj(42D80044): ADD R2, SB, 44H [data]
030Bj(43000008): MOV R3, R0, 8H
030Ck(F7FFFD0C): BL -756 [0019H]
030Dl .FIXUP D
030Dl(8D000004): LDR SB, MT, MOD0 [Net]
030El(40D80000): ADD R0, SB, 0H [data]
030Fl .FIXUP D
030Fl(8D500002): LDR SB, MT, MOD5 [Texts]
0310l(41D80005): ADD R1, SB, VAR5
0311m(4200007E): MOV R2, R0, 7EH
ENDn ;
0312n .FIXUP P
0312n(F751B00D): BL MOD5 [Texts] PROC27
reply(0)o
0313o(40000000): MOV R0, R0, 0H
ELSEp Sendq(NPR,r 0,s dmy)t
0314p(F7FFFF00): BL -256 [0215H]
0315q(E7000006): B 6 [031CH]
0316r(40000026): MOV R0, R0, 26H
0317s(41000000): MOV R1, R0, 0H
0318t .FIXUP D
0318t(8D000009): LDR SB, MT, MOD0 [Net]
0319t(42D80044): ADD R2, SB, 44H [data]
031At(43000008): MOV R3, R0, 8H
ENDu
031Bu(F7FFFCFD): BL -771 [0019H]
ELSIF head1v.typ = MSG THENw i := 0;x
031Cv(E70000A5): B 165 [03C2H]
031Dw .FIXUP D
031Dw(8D000005): LDR SB, MT, MOD0 [Net]
031Ew(90D00037): LDR R0, SB, 37H [data]
031Fw(40090044): SUB R0, R0, 44H
0320w(E900001C): BNE 28 [033DH]
0321x(40000000): MOV R0, R0, 0H
0322x(A0E00004): STR R0, SP, 4H
WHILE i < head1.len DOy SCC.Receive(x)z;a Texts.Write(W,b CHR(x))c;d
0323y(80E00004): LDR R0, SP, 4H
0324y .FIXUP D
0324y(8D000007): LDR SB, MT, MOD0 [Net]
0325y(81D00038): LDR R1, SB, 38H [data]
0326y(00090001): SUB R0, R0, R1
0327y(ED00000C): BGE 12 [0334H]
0328z(40E80009): ADD R0, SP, 9H
0329a .FIXUP P
0329a(F7107017): BL MOD1 [SCC] PROC7
032Ab .FIXUP D
032Ab(8D000006): LDR SB, MT, MOD0 [Net]
032Bb(40D80000): ADD R0, SB, 0H [data]
032Cb .FIXUP D
032Cb(8D500002): LDR SB, MT, MOD5 [Texts]
032Db(41D80005): ADD R1, SB, VAR5
032Ec(92E00009): LDR R2, SP, 9H
032Fd .FIXUP P
032Fd(F751B006): BL MOD5 [Texts] PROC27
INC(i) ENDe ;
0330e(80E00004): LDR R0, SP, 4H
0331e(40080001): ADD R0, R0, 1H
0332e(A0E00004): STR R0, SP, 4H
0333e(E7FFFFEF): B -17 [0323H]
Send(ACK,f 0,g dmy)h;i reply(0)j
0334f(40000010): MOV R0, R0, 10H
0335g(41000000): MOV R1, R0, 0H
0336h .FIXUP D
0336h(8D00000A): LDR SB, MT, MOD0 [Net]
0337h(42D80044): ADD R2, SB, 44H [data]
0338h(43000008): MOV R3, R0, 8H
0339i(F7FFFCDF): BL -801 [0019H]
033Aj(40000000): MOV R0, R0, 0H
ELSIFk head1l.typ = TRQ THENm
033Bk(F7FFFED9): BL -295 [0215H]
033Cl(E7000085): B 133 [03C2H]
033Dm .FIXUP D
033Dm(8D000007): LDR SB, MT, MOD0 [Net]
033Em(90D00037): LDR R0, SB, 37H [data]
033Fm(40090046): SUB R0, R0, 46H
0340m(E900000E): BNE 14 [034FH]
i := 0;n AppendW(Oberon.Clock(),o IdB,p 4,q i)r;s Send(TIM,t 4,u IdB)v
0341n(40000000): MOV R0, R0, 0H
0342n(A0E00004): STR R0, SP, 4H
0343o .FIXUP P
0343o(F7914014): BL MOD9 [Oberon] PROC20
0344p(41E80024): ADD R1, SP, 24H
0345p(42000008): MOV R2, R0, 8H
0346q(43000004): MOV R3, R0, 4H
0347r(44E80004): ADD R4, SP, 4H
0348s(F7FFFDB7): BL -585 [0100H]
0349t(40000047): MOV R0, R0, 47H
034Au(41000004): MOV R1, R0, 4H
034Bv(42E80024): ADD R2, SP, 24H
034Cv(43000008): MOV R3, R0, 8H
ELSIFw head1x.typ = TIM THENy PickQ(newclock)z;a PickS(Id)b;c PickQ(pw)d;e
034Dw(F7FFFCCB): BL -821 [0019H]
034Ex(E7000073): B 115 [03C2H]
034Fy .FIXUP D
034Fy(8D000012): LDR SB, MT, MOD0 [Net]
0350y(90D00037): LDR R0, SB, 37H [data]
0351y(40090047): SUB R0, R0, 47H
0352y(E9000031): BNE 49 [0384H]
0353z(40E80018): ADD R0, SP, 18H
0354a(F7FFFDE7): BL -537 [013CH]
0355b(40E8001C): ADD R0, SP, 1CH
0356b(41000008): MOV R1, R0, 8H
0357c(F7FFFDCC): BL -564 [0124H]
0358d(40E80010): ADD R0, SP, 10H
0359e(F7FFFDE2): BL -542 [013CH]
clock := Oberon.Clock();f
035Af .FIXUP P
035Af(F7914017): BL MOD9 [Oberon] PROC20
035Bf(A0E00014): STR R0, SP, 14H
IF ~protected &g (hId[0] # 0X)i & (jABS(pw - clock)k >l 10)m THENn
035Cg .FIXUP D
035Cg(8D00000D): LDR SB, MT, MOD0 [Net]
035Dg(90D0004C): LDR R0, SB, 4CH [data]
035Eh(E9000024): BNE 36 [0383H]
035Fi(90E0001C): LDR R0, SP, 1CH
0360j(E1000022): BEQ 34 [0383H]
0361k(80E00010): LDR R0, SP, 10H
0362k(81E00014): LDR R1, SP, 14H
0363k(00090001): SUB R0, R0, R1
0364l(40090000): SUB R0, R0, 0H
0365l(ED000002): BGE 2 [0368H]
0366l(41000000): MOV R1, R0, 0H
0367l(00190000): SUB R0, R1, R0
0368m(4009000A): SUB R0, R0, AH
0369n(E6000019): BLE 25 [0383H]
Oberon.SetClock(newclock)o;p
036Ao(80E00018): LDR R0, SP, 18H
036Bp .FIXUP P
036Bp(F7915011): BL MOD9 [Oberon] PROC21
Texts.WriteString(W,q Id)r;s Texts.WriteString(W,t " changed System.Date")u;v
036Cq .FIXUP D
036Cq(8D000010): LDR SB, MT, MOD0 [Net]
036Dq(40D80000): ADD R0, SB, 0H [data]
036Eq .FIXUP D
036Eq(8D500002): LDR SB, MT, MOD5 [Texts]
036Fq(41D80005): ADD R1, SB, VAR5
0370r(42E8001C): ADD R2, SP, 1CH
0371r(43000008): MOV R3, R0, 8H
0372s .FIXUP P
0372s(F751D007): BL MOD5 [Texts] PROC29
0373t .FIXUP D
0373t(8D000005): LDR SB, MT, MOD0 [Net]
0374t(40D80000): ADD R0, SB, 0H [data]
0375t .FIXUP D
0375t(8D500002): LDR SB, MT, MOD5 [Texts]
0376t(41D80005): ADD R1, SB, VAR5
0377u .FIXUP D
0377u(8D000002): LDR SB, MT, MOD0 [Net]
0378u(42D800C8): ADD R2, SB, C8H [" changedSystem.Date"]
0379u(43000014): MOV R3, R0, 14H
037Av .FIXUP P
037Av(F751D008): BL MOD5 [Texts] PROC29
Texts.WriteClock(W,w newclock)x;y reply(0)z
037Bw .FIXUP D
037Bw(8D000004): LDR SB, MT, MOD0 [Net]
037Cw(40D80000): ADD R0, SB, 0H [data]
037Dw .FIXUP D
037Dw(8D500002): LDR SB, MT, MOD5 [Texts]
037Ew(41D80005): ADD R1, SB, VAR5
037Fx(82E00018): LDR R2, SP, 18H
0380y .FIXUP P
0380y(F7522006): BL MOD5 [Texts] PROC34
0381z(40000000): MOV R0, R0, 0H
ENDa
0382a(F7FFFE92): BL -366 [0215H]
ELSIF head1b.typ = NRQ THENc
0383b(E700003E): B 62 [03C2H]
0384c .FIXUP D
0384c(8D000007): LDR SB, MT, MOD0 [Net]
0385c(90D00037): LDR R0, SB, 37H [data]
0386c(40090034): SUB R0, R0, 34H
0387c(E9000037): BNE 55 [03BFH]
i := 0;d
0388d(40000000): MOV R0, R0, 0H
0389d(A0E00004): STR R0, SP, 4H
REPEAT SCC.Receive(x)e;f Id[i]g := CHR(x);h INC(i);i
038Ae(40E80009): ADD R0, SP, 9H
038Bf .FIXUP P
038Bf(F710700B): BL MOD1 [SCC] PROC7
038Cg(80E00004): LDR R0, SP, 4H
038Dg(41090008): SUB R1, R0, 8H
038Eg(DA1A6C1C): BLCC MT [trap=1, pos=6764]
038Fg(00E80000): ADD R0, SP, R0
0390h(91E00009): LDR R1, SP, 9H
0391h(B100001C): STR R1, R0, 1CH
0392i(80E00004): LDR R0, SP, 4H
0393i(40080001): ADD R0, R0, 1H
0394i(A0E00004): STR R0, SP, 4H
IF i = 7 THENj Id[7] := 0X;k x := 0 ENDl
0395j(80E00004): LDR R0, SP, 4H
0396j(40090007): SUB R0, R0, 7H
0397j(E9000004): BNE 4 [039CH]
0398k(40000000): MOV R0, R0, 0H
0399k(B0E00023): STR R0, SP, 23H
039Al(40000000): MOV R0, R0, 0H
039Bl(B0E00009): STR R0, SP, 9H
UNTIL x = 0;m
039Cm(90E00009): LDR R0, SP, 9H
039Dm(E9FFFFEC): BNE -20 [038AH]
WHILE i < head1.len DOn SCC.Receive(x)o;p INC(i) ENDq ;
039En(80E00004): LDR R0, SP, 4H
039Fn .FIXUP D
039Fn(8D00001B): LDR SB, MT, MOD0 [Net]
03A0n(81D00038): LDR R1, SB, 38H [data]
03A1n(00090001): SUB R0, R0, R1
03A2n(ED000006): BGE 6 [03A9H]
03A3o(40E80009): ADD R0, SP, 9H
03A4p .FIXUP P
03A4p(F7107019): BL MOD1 [SCC] PROC7
03A5q(80E00004): LDR R0, SP, 4H
03A6q(40080001): ADD R0, R0, 1H
03A7q(A0E00004): STR R0, SP, 4H
03A8q(E7FFFFF5): B -11 [039EH]
IF Id = Oberon.User THENr
03A9r(40E8001C): ADD R0, SP, 1CH
03AAr .FIXUP D
03AAr(8D90000B): LDR SB, MT, MOD9 [Oberon]
03ABr(41D80008): ADD R1, SB, VAR8
03ACr(92000000): LDR R2, R0, 0H
03ADr(40080001): ADD R0, R0, 1H
03AEr(93100000): LDR R3, R1, 0H
03AFr(41180001): ADD R1, R1, 1H
03B0r(04290003): SUB R4, R2, R3
03B1r(E9000002): BNE 2 [03B4H]
03B2r(44290000): SUB R4, R2, 0H
03B3r(E9FFFFF8): BNE -8 [03ACH]
03B4r(E9000009): BNE 9 [03BEH]
SetPartner(Id)s;t Send(NRS,u 0,v dmy)w
03B5s(40E8001C): ADD R0, SP, 1CH
03B6s(41000008): MOV R1, R0, 8H
03B7t(F7FFFC48): BL -952 [0000H]
03B8u(40000035): MOV R0, R0, 35H
03B9v(41000000): MOV R1, R0, 0H
03BAw .FIXUP D
03BAw(8D000010): LDR SB, MT, MOD0 [Net]
03BBw(42D80044): ADD R2, SB, 44H [data]
03BCw(43000008): MOV R3, R0, 8H
ENDx
03BDx(F7FFFC5B): BL -933 [0019H]
ELSE SCCy.Skip(head1.len)z
03BEy(E7000003): B 3 [03C2H]
03BFz .FIXUP D
03BFz(8D000005): LDR SB, MT, MOD0 [Net]
03C0z(80D00038): LDR R0, SB, 38H [data]
ENDa
03C1a .FIXUP P
03C1a(F710901D): BL MOD1 [SCC] PROC9
END
ENDb Serve;
03C2b(8FE00000): LDR LNK, SP, 0H
03C3b(4EE8004C): ADD SP, SP, 4CH
03C4b(C700000F): B LNK
PROCEDURE GetPar1(VAR S: Texts.Scanner);
BEGINc Texts.OpenScanner(S,d Oberon.Par.text,e Oberon.Par.pos)f;g Texts.Scan(S)h
03C5c(4EE9000C): SUB SP, SP, CH
03C6c(AFE00000): STR LNK, SP, 0H
03C7c(A0E00004): STR R0, SP, 4H
03C8c(A1E00008): STR R1, SP, 8H
03C9d(80E00004): LDR R0, SP, 4H
03CAd(81E00008): LDR R1, SP, 8H
03CBe .FIXUP D
03CBe(8D90000C): LDR SB, MT, MOD9 [Oberon]
03CCe(42D8000E): ADD R2, SB, VAR14
03CDe(82200008): LDR R2, R2, 8H
03CEf .FIXUP D
03CEf(8D900003): LDR SB, MT, MOD9 [Oberon]
03CFf(43D8000E): ADD R3, SB, VAR14
03D0f(8330000C): LDR R3, R3, CH
03D1g .FIXUP P
03D1g(F7515010): BL MOD5 [Texts] PROC21
03D2h(80E00004): LDR R0, SP, 4H
03D3h(81E00008): LDR R1, SP, 8H
ENDi GetPar1;
03D4i .FIXUP P
03D4i(F7516003): BL MOD5 [Texts] PROC22
03D5i(8FE00000): LDR LNK, SP, 0H
03D6i(4EE8000C): ADD SP, SP, CH
03D7i(C700000F): B LNK
PROCEDURE GetPar(VAR S: Texts.Scanner; VAR end: LONGINT);
VAR T: Texts.Text; beg, tm: LONGINT;
BEGINj Texts.Scan(S)k;l
03D8j(4EE9001C): SUB SP, SP, 1CH
03D9j(AFE00000): STR LNK, SP, 0H
03DAj(A0E00004): STR R0, SP, 4H
03DBj(A1E00008): STR R1, SP, 8H
03DCj(A2E0000C): STR R2, SP, CH
03DDk(80E00004): LDR R0, SP, 4H
03DEk(81E00008): LDR R1, SP, 8H
03DFl .FIXUP P
03DFl(F751600B): BL MOD5 [Texts] PROC22
IF (S.class = Texts.Char)m & (nS.c = "^")o THENp
03E0m(80E00004): LDR R0, SP, 4H
03E1m(8000003C): LDR R0, R0, 3CH
03E2m(40090006): SUB R0, R0, 6H
03E3n(E9000015): BNE 21 [03F9H]
03E4o(80E00004): LDR R0, SP, 4H
03E5o(9000004C): LDR R0, R0, 4CH
03E6o(4009005E): SUB R0, R0, 5EH
03E7p(E9000011): BNE 17 [03F9H]
Oberon.GetSelection(T,q beg,r end,s tm)t;u
03E8q(40E80010): ADD R0, SP, 10H
03E9r(41E80014): ADD R1, SP, 14H
03EAs(82E0000C): LDR R2, SP, CH
03EBt(43E80018): ADD R3, SP, 18H
03ECu .FIXUP P
03ECu(F792900D): BL MOD9 [Oberon] PROC41
IF tm >= 0 THENv Texts.OpenScanner(S,w T,x beg)y;z Texts.Scan(S)a ENDb
03EDv(80E00018): LDR R0, SP, 18H
03EEv(40090000): SUB R0, R0, 0H
03EFv(E5000008): BLT 8 [03F8H]
03F0w(80E00004): LDR R0, SP, 4H
03F1w(81E00008): LDR R1, SP, 8H
03F2x(82E00010): LDR R2, SP, 10H
03F3y(83E00014): LDR R3, SP, 14H
03F4z .FIXUP P
03F4z(F7515008): BL MOD5 [Texts] PROC21
03F5a(80E00004): LDR R0, SP, 4H
03F6a(81E00008): LDR R1, SP, 8H
03F7b .FIXUP P
03F7b(F7516003): BL MOD5 [Texts] PROC22
ELSE endc := Oberon.Par.text.dlene
03F8c(E7000007): B 7 [0400H]
03F9d .FIXUP D
03F9d(8D90002B): LDR SB, MT, MOD9 [Oberon]
03FAd(40D8000E): ADD R0, SB, VAR14
03FBe(80000008): LDR R0, R0, 8H
03FCe(D11D634C): BLEQ MT [trap=4, pos=7523]
ENDf
03FDf(80000000): LDR R0, R0, 0H
03FEf(81E0000C): LDR R1, SP, CH
03FFf(A0100000): STR R0, R1, 0H
ENDg GetPar;
0400g(8FE00000): LDR LNK, SP, 0H
0401g(4EE8001C): ADD SP, SP, 1CH
0402g(C700000F): B LNK
PROCEDURE SendFiles*;
VAR k: INTEGER;
end: LONGINT;
S: Texts.Scanner;
F: Files.File;
buf: ARRAY 64 OF BYTE;
BEGINh GetPar1(S)i;j
0403h .PROC 1
0403h .COMMAND SendFiles
0403h(4EE900C4): SUB SP, SP, C4H
0404h(AFE00000): STR LNK, SP, 0H
0405i(40E8000C): ADD R0, SP, CH
0406i .FIXUP D
0406i(8D50000D): LDR SB, MT, MOD5 [Texts]
0407i(41D80003): ADD R1, SB, VAR3
0408j(F7FFFFBC): BL -68 [03C5H]
IF S.class = Texts.Name THENk
0409k(80E00048): LDR R0, SP, 48H
040Ak(40090001): SUB R0, R0, 1H
040Bk(E900009E): BNE 158 [04AAH]
FindPartner(S.s,l k)m;n
040Cl(40E80060): ADD R0, SP, 60H
040Dl(41000020): MOV R1, R0, 20H
040Em(42E80004): ADD R2, SP, 4H
040Fn(F7FFFC4B): BL -949 [005BH]
IF k = 0 THENo
0410o(80E00004): LDR R0, SP, 4H
0411o(E9000096): BNE 150 [04A8H]
GetPar(S,p end)q;r
0412p(40E8000C): ADD R0, SP, CH
0413p .FIXUP D
0413p(8D50000D): LDR SB, MT, MOD5 [Texts]
0414p(41D80003): ADD R1, SB, VAR3
0415q(42E80008): ADD R2, SP, 8H
0416r(F7FFFFC1): BL -63 [03D8H]
WHILE (Texts.Pos(S)s <t end)u & (vS.class = Texts.Name)w DOx
0417s(40E8000C): ADD R0, SP, CH
0418s .FIXUP D
0418s(8D500005): LDR SB, MT, MOD5 [Texts]
0419s(41D80003): ADD R1, SB, VAR3
041At .FIXUP P
041At(F7514023): BL MOD5 [Texts] PROC20
041Bu(81E00008): LDR R1, SP, 8H
041Cu(00090001): SUB R0, R0, R1
041Dv(ED000089): BGE 137 [04A7H]
041Ew(80E00048): LDR R0, SP, 48H
041Fw(40090001): SUB R0, R0, 1H
0420x(E9000086): BNE 134 [04A7H]
Texts.WriteString(W,y S.s)z;a k := 0;b
0421y .FIXUP D
0421y(8D000009): LDR SB, MT, MOD0 [Net]
0422y(40D80000): ADD R0, SB, 0H [data]
0423y .FIXUP D
0423y(8D500002): LDR SB, MT, MOD5 [Texts]
0424y(41D80005): ADD R1, SB, VAR5
0425z(42E80060): ADD R2, SP, 60H
0426z(43000020): MOV R3, R0, 20H
0427a .FIXUP P
0427a(F751D00D): BL MOD5 [Texts] PROC29
0428b(40000000): MOV R0, R0, 0H
0429b(A0E00004): STR R0, SP, 4H
AppendS(Oberon.User,c buf,d k)e;f AppendW(Oberon.Password,g buf,h 4,i k)j;k
042Ac .FIXUP D
042Ac(8D900007): LDR SB, MT, MOD9 [Oberon]
042Bc(40D80008): ADD R0, SB, VAR8
042Cc(41000008): MOV R1, R0, 8H
042Dd(42E80084): ADD R2, SP, 84H
042Ed(43000040): MOV R3, R0, 40H
042Fe(44E80004): ADD R4, SP, 4H
0430f(F7FFFCA9): BL -855 [00DAH]
0431g .FIXUP D
0431g(8D900007): LDR SB, MT, MOD9 [Oberon]
0432g(80D00009): LDR R0, SB, VAR9
0433h(41E80084): ADD R1, SP, 84H
0434h(42000040): MOV R2, R0, 40H
0435i(43000004): MOV R3, R0, 4H
0436j(44E80004): ADD R4, SP, 4H
0437k(F7FFFCC8): BL -824 [0100H]
AppendS(S.s,l buf,m k)n;o
0438l(40E80060): ADD R0, SP, 60H
0439l(41000020): MOV R1, R0, 20H
043Am(42E80084): ADD R2, SP, 84H
043Bm(43000040): MOV R3, R0, 40H
043Cn(44E80004): ADD R4, SP, 4H
043Do(F7FFFC9C): BL -868 [00DAH]
IF S.nextCh = ":" THENp (*prefix*)
043Ep(90E00040): LDR R0, SP, 40H
043Fp(4009003A): SUB R0, R0, 3AH
0440p(E9000025): BNE 37 [0466H]
Texts.Scan(S)q;r Texts.Scan(S)s;t
0441q(40E8000C): ADD R0, SP, CH
0442q .FIXUP D
0442q(8D500011): LDR SB, MT, MOD5 [Texts]
0443q(41D80003): ADD R1, SB, VAR3
0444r .FIXUP P
0444r(F751601D): BL MOD5 [Texts] PROC22
0445s(40E8000C): ADD R0, SP, CH
0446s .FIXUP D
0446s(8D500004): LDR SB, MT, MOD5 [Texts]
0447s(41D80003): ADD R1, SB, VAR3
0448t .FIXUP P
0448t(F7516004): BL MOD5 [Texts] PROC22
IF S.class = Texts.Name THENu
0449u(80E00048): LDR R0, SP, 48H
044Au(40090001): SUB R0, R0, 1H
044Bu(E900001A): BNE 26 [0466H]
buf[k-1]v := ORD(".");w AppendS(S.s,x buf,y k)z;a
044Cv(80E00004): LDR R0, SP, 4H
044Dv(40090001): SUB R0, R0, 1H
044Ev(41090040): SUB R1, R0, 40H
044Fv(DA1FEF1C): BLCC MT [trap=1, pos=8175]
0450v(00E80000): ADD R0, SP, R0
0451w(4100002E): MOV R1, R0, 2EH
0452w(B1000084): STR R1, R0, 84H
0453x(40E80060): ADD R0, SP, 60H
0454x(41000020): MOV R1, R0, 20H
0455y(42E80084): ADD R2, SP, 84H
0456y(43000040): MOV R3, R0, 40H
0457z(44E80004): ADD R4, SP, 4H
0458a(F7FFFC81): BL -895 [00DAH]
Texts.Write(W,b ":")c;d Texts.WriteString(W,e S.s)f
0459b .FIXUP D
0459b(8D000013): LDR SB, MT, MOD0 [Net]
045Ab(40D80000): ADD R0, SB, 0H [data]
045Bb .FIXUP D
045Bb(8D500002): LDR SB, MT, MOD5 [Texts]
045Cb(41D80005): ADD R1, SB, VAR5
045Dc(4200003A): MOV R2, R0, 3AH
045Ed .FIXUP P
045Ed(F751B016): BL MOD5 [Texts] PROC27
045Fe .FIXUP D
045Fe(8D000004): LDR SB, MT, MOD0 [Net]
0460e(40D80000): ADD R0, SB, 0H [data]
0461e .FIXUP D
0461e(8D500002): LDR SB, MT, MOD5 [Texts]
0462e(41D80005): ADD R1, SB, VAR5
0463f(42E80060): ADD R2, SP, 60H
0464f(43000020): MOV R3, R0, 20H
ENDg
0465g .FIXUP P
0465g(F751D007): BL MOD5 [Texts] PROC29
END ;
F := Files.Old(S.s)h;i
0466h(40E80060): ADD R0, SP, 60H
0467h(41000020): MOV R1, R0, 20H
0468i .FIXUP P
0468i(F7202003): BL MOD2 [Files] PROC2
0469i(A0E00080): STR R0, SP, 80H
IF F # NIL THENj
046Aj(80E00080): LDR R0, SP, 80H
046Bj(E1000034): BEQ 52 [04A0H]
Send(REC,k k,l buf)m;n ReceiveHead(T0)o;p
046Ck(40000042): MOV R0, R0, 42H
046Dl(81E00004): LDR R1, SP, 4H
046Em(42E80084): ADD R2, SP, 84H
046Fm(43000040): MOV R3, R0, 40H
0470n(F7FFFBA8): BL -1112 [0019H]
0471o(400003E8): MOV R0, R0, 3E8H
0472p(F7FFFBBA): BL -1094 [002DH]
IF head1.typ = ACK THENq
0473q .FIXUP D
0473q(8D000012): LDR SB, MT, MOD0 [Net]
0474q(90D00037): LDR R0, SB, 37H [data]
0475q(40090010): SUB R0, R0, 10H
0476q(E9000012): BNE 18 [0489H]
Texts.WriteString(W,r " sending")s;t Texts.Append(Oberon.Log,u
0477r .FIXUP D
0477r(8D000004): LDR SB, MT, MOD0 [Net]
0478r(40D80000): ADD R0, SB, 0H [data]
0479r .FIXUP D
0479r(8D500002): LDR SB, MT, MOD5 [Texts]
047Ar(41D80005): ADD R1, SB, VAR5
047Bs .FIXUP D
047Bs(8D000002): LDR SB, MT, MOD0 [Net]
047Cs(42D800DC): ADD R2, SB, DCH [" sending"]
047Ds(43000009): MOV R3, R0, 9H
047Et .FIXUP P
047Et(F751D016): BL MOD5 [Texts] PROC29
047Fu .FIXUP D
047Fu(8D900004): LDR SB, MT, MOD9 [Oberon]
0480u(80D0000D): LDR R0, SB, VAR13
W.buf)v;w
0481v .FIXUP D
0481v(8D000002): LDR SB, MT, MOD0 [Net]
0482v(81D00000): LDR R1, SB, 0H [data]
0483w .FIXUP P
0483w(F750E005): BL MOD5 [Texts] PROC14
SendData(F)x;y reply(0)z
0484x(80E00080): LDR R0, SP, 80H
0485y(F7FFFCD0): BL -816 [0156H]
0486z(40000000): MOV R0, R0, 0H
ELSIFa head1b.typ = NPR THENc reply(2)d;e end := 0
0487a(F7FFFD8D): BL -627 [0215H]
0488b(E7000016): B 22 [049FH]
0489c .FIXUP D
0489c(8D000008): LDR SB, MT, MOD0 [Net]
048Ac(90D00037): LDR R0, SB, 37H [data]
048Bc(40090026): SUB R0, R0, 26H
048Cc(E9000005): BNE 5 [0492H]
048Dd(40000002): MOV R0, R0, 2H
048Ee(F7FFFD86): BL -634 [0215H]
ELSIFf head1g.typ = NAK THENh reply(3)i;j end := 0
048Ff(40000000): MOV R0, R0, 0H
0490f(A0E00008): STR R0, SP, 8H
0491g(E700000D): B 13 [049FH]
0492h .FIXUP D
0492h(8D000009): LDR SB, MT, MOD0 [Net]
0493h(90D00037): LDR R0, SB, 37H [data]
0494h(40090025): SUB R0, R0, 25H
0495h(E9000005): BNE 5 [049BH]
0496i(40000003): MOV R0, R0, 3H
0497j(F7FFFD7D): BL -643 [0215H]
ELSEk replyl(5)m;n end := 0
0498k(40000000): MOV R0, R0, 0H
0499k(A0E00008): STR R0, SP, 8H
049Al(E7000004): B 4 [049FH]
049Bm(40000005): MOV R0, R0, 5H
049Cn(F7FFFD78): BL -648 [0215H]
ENDo
049Do(40000000): MOV R0, R0, 0H
049Eo(A0E00008): STR R0, SP, 8H
ELSE replyp(4)q
049Fp(E7000002): B 2 [04A2H]
04A0q(40000004): MOV R0, R0, 4H
ENDr ;
04A1r(F7FFFD73): BL -653 [0215H]
Texts.Scan(S)s
04A2s(40E8000C): ADD R0, SP, CH
04A3s .FIXUP D
04A3s(8D500011): LDR SB, MT, MOD5 [Texts]
04A4s(41D80003): ADD R1, SB, VAR3
ENDt
04A5t .FIXUP P
04A5t(F7516022): BL MOD5 [Texts] PROC22
04A6t(E7FFFF70): B -144 [0417H]
ELSE replyu(1)v
04A7u(E7000002): B 2 [04AAH]
04A8v(40000001): MOV R0, R0, 1H
ENDw
04A9w(F7FFFD6B): BL -661 [0215H]
END
ENDx SendFiles;
04AAx(8FE00000): LDR LNK, SP, 0H
04ABx(4EE800C4): ADD SP, SP, C4H
04ACx(C700000F): B LNK
PROCEDURE ReceiveFiles*;
VAR k: INTEGER; done: BOOLEAN;
end: LONGINT;
S: Texts.Scanner;
F: Files.File;
buf: ARRAY 64 OF BYTE;
BEGINy GetPar1(S)z;a
04ADy .PROC 2
04ADy .COMMAND ReceiveFiles
04ADy(4EE900C8): SUB SP, SP, C8H
04AEy(AFE00000): STR LNK, SP, 0H
04AFz(40E80010): ADD R0, SP, 10H
04B0z .FIXUP D
04B0z(8D50000D): LDR SB, MT, MOD5 [Texts]
04B1z(41D80003): ADD R1, SB, VAR3
04B2a(F7FFFF12): BL -238 [03C5H]
IF S.class = Texts.Name THENb
04B3b(80E0004C): LDR R0, SP, 4CH
04B4b(40090001): SUB R0, R0, 1H
04B5b(E90000A9): BNE 169 [055FH]
FindPartner(S.s,c k)d;e
04B6c(40E80064): ADD R0, SP, 64H
04B7c(41000020): MOV R1, R0, 20H
04B8d(42E80004): ADD R2, SP, 4H
04B9e(F7FFFBA1): BL -1119 [005BH]
IF k = 0 THENf
04BAf(80E00004): LDR R0, SP, 4H
04BBf(E90000A1): BNE 161 [055DH]
GetPar(S,g end)h;i
04BCg(40E80010): ADD R0, SP, 10H
04BDg .FIXUP D
04BDg(8D50000D): LDR SB, MT, MOD5 [Texts]
04BEg(41D80003): ADD R1, SB, VAR3
04BFh(42E8000C): ADD R2, SP, CH
04C0i(F7FFFF17): BL -233 [03D8H]
WHILE (Texts.Pos(S)j <k end)l & (mS.class = Texts.Name)n DOo
04C1j(40E80010): ADD R0, SP, 10H
04C2j .FIXUP D
04C2j(8D500005): LDR SB, MT, MOD5 [Texts]
04C3j(41D80003): ADD R1, SB, VAR3
04C4k .FIXUP P
04C4k(F751401F): BL MOD5 [Texts] PROC20
04C5l(81E0000C): LDR R1, SP, CH
04C6l(00090001): SUB R0, R0, R1
04C7m(ED000094): BGE 148 [055CH]
04C8n(80E0004C): LDR R0, SP, 4CH
04C9n(40090001): SUB R0, R0, 1H
04CAo(E9000091): BNE 145 [055CH]
Texts.WriteString(W,p S.s)q;r
04CBp .FIXUP D
04CBp(8D000009): LDR SB, MT, MOD0 [Net]
04CCp(40D80000): ADD R0, SB, 0H [data]
04CDp .FIXUP D
04CDp(8D500002): LDR SB, MT, MOD5 [Texts]
04CEp(41D80005): ADD R1, SB, VAR5
04CFq(42E80064): ADD R2, SP, 64H
04D0q(43000020): MOV R3, R0, 20H
04D1r .FIXUP P
04D1r(F751D00D): BL MOD5 [Texts] PROC29
k := 0;s AppendS(Oberon.User,t buf,u k)v;w AppendW(Oberon.Password,x
04D2s(40000000): MOV R0, R0, 0H
04D3s(A0E00004): STR R0, SP, 4H
04D4t .FIXUP D
04D4t(8D900007): LDR SB, MT, MOD9 [Oberon]
04D5t(40D80008): ADD R0, SB, VAR8
04D6t(41000008): MOV R1, R0, 8H
04D7u(42E80088): ADD R2, SP, 88H
04D8u(43000040): MOV R3, R0, 40H
04D9v(44E80004): ADD R4, SP, 4H
04DAw(F7FFFBFF): BL -1025 [00DAH]
04DBx .FIXUP D
04DBx(8D900007): LDR SB, MT, MOD9 [Oberon]
04DCx(80D00009): LDR R0, SB, VAR9
buf,y 4,z k)a;b
04DDy(41E80088): ADD R1, SP, 88H
04DEy(42000040): MOV R2, R0, 40H
04DFz(43000004): MOV R3, R0, 4H
04E0a(44E80004): ADD R4, SP, 4H
04E1b(F7FFFC1E): BL -994 [0100H]
AppendS(S.s,c buf,d k)e;f
04E2c(40E80064): ADD R0, SP, 64H
04E3c(41000020): MOV R1, R0, 20H
04E4d(42E80088): ADD R2, SP, 88H
04E5d(43000040): MOV R3, R0, 40H
04E6e(44E80004): ADD R4, SP, 4H
04E7f(F7FFFBF2): BL -1038 [00DAH]
IF S.nextCh = ":" THENg (*prefix*)
04E8g(90E00044): LDR R0, SP, 44H
04E9g(4009003A): SUB R0, R0, 3AH
04EAg(E9000025): BNE 37 [0510H]
Texts.Scan(S)h;i Texts.Scan(S)j;k
04EBh(40E80010): ADD R0, SP, 10H
04ECh .FIXUP D
04ECh(8D500011): LDR SB, MT, MOD5 [Texts]
04EDh(41D80003): ADD R1, SB, VAR3
04EEi .FIXUP P
04EEi(F751601D): BL MOD5 [Texts] PROC22
04EFj(40E80010): ADD R0, SP, 10H
04F0j .FIXUP D
04F0j(8D500004): LDR SB, MT, MOD5 [Texts]
04F1j(41D80003): ADD R1, SB, VAR3
04F2k .FIXUP P
04F2k(F7516004): BL MOD5 [Texts] PROC22
IF S.class = Texts.Name THENl
04F3l(80E0004C): LDR R0, SP, 4CH
04F4l(40090001): SUB R0, R0, 1H
04F5l(E900001A): BNE 26 [0510H]
buf[k-1]m := ORD(".");n AppendS(S.s,o buf,p k)q;r
04F6m(80E00004): LDR R0, SP, 4H
04F7m(40090001): SUB R0, R0, 1H
04F8m(41090040): SUB R1, R0, 40H
04F9m(DA25241C): BLCC MT [trap=1, pos=9508]
04FAm(00E80000): ADD R0, SP, R0
04FBn(4100002E): MOV R1, R0, 2EH
04FCn(B1000088): STR R1, R0, 88H
04FDo(40E80064): ADD R0, SP, 64H
04FEo(41000020): MOV R1, R0, 20H
04FFp(42E80088): ADD R2, SP, 88H
0500p(43000040): MOV R3, R0, 40H
0501q(44E80004): ADD R4, SP, 4H
0502r(F7FFFBD7): BL -1065 [00DAH]
Texts.Write(W,s ":")t;u Texts.WriteString(W,v S.s)w
0503s .FIXUP D
0503s(8D000013): LDR SB, MT, MOD0 [Net]
0504s(40D80000): ADD R0, SB, 0H [data]
0505s .FIXUP D
0505s(8D500002): LDR SB, MT, MOD5 [Texts]
0506s(41D80005): ADD R1, SB, VAR5
0507t(4200003A): MOV R2, R0, 3AH
0508u .FIXUP P
0508u(F751B016): BL MOD5 [Texts] PROC27
0509v .FIXUP D
0509v(8D000004): LDR SB, MT, MOD0 [Net]
050Av(40D80000): ADD R0, SB, 0H [data]
050Bv .FIXUP D
050Bv(8D500002): LDR SB, MT, MOD5 [Texts]
050Cv(41D80005): ADD R1, SB, VAR5
050Dw(42E80064): ADD R2, SP, 64H
050Ew(43000020): MOV R3, R0, 20H
ENDx
050Fx .FIXUP P
050Fx(F751D007): BL MOD5 [Texts] PROC29
END ;
Send(SND,y k,z buf)a;b
0510y(40000041): MOV R0, R0, 41H
0511z(81E00004): LDR R1, SP, 4H
0512a(42E80088): ADD R2, SP, 88H
0513a(43000040): MOV R3, R0, 40H
0514b(F7FFFB04): BL -1276 [0019H]
Texts.WriteString(W,c " receiving")d;e Texts.Append(Oberon.Log,f
0515c .FIXUP D
0515c(8D00000A): LDR SB, MT, MOD0 [Net]
0516c(40D80000): ADD R0, SB, 0H [data]
0517c .FIXUP D
0517c(8D500002): LDR SB, MT, MOD5 [Texts]
0518c(41D80005): ADD R1, SB, VAR5
0519d .FIXUP D
0519d(8D000002): LDR SB, MT, MOD0 [Net]
051Ad(42D800E8): ADD R2, SB, E8H [" receiving"]
051Bd(4300000B): MOV R3, R0, BH
051Ce .FIXUP P
051Ce(F751D00D): BL MOD5 [Texts] PROC29
051Df .FIXUP D
051Df(8D900004): LDR SB, MT, MOD9 [Oberon]
051Ef(80D0000D): LDR R0, SB, VAR13
W.buf)g;h
051Fg .FIXUP D
051Fg(8D000002): LDR SB, MT, MOD0 [Net]
0520g(81D00000): LDR R1, SB, 0H [data]
0521h .FIXUP P
0521h(F750E005): BL MOD5 [Texts] PROC14
ReceiveHead(T1)i;j
0522i(40000BB8): MOV R0, R0, BB8H
0523j(F7FFFB09): BL -1271 [002DH]
IF head1.typ = 0 THENk
0524k .FIXUP D
0524k(8D000005): LDR SB, MT, MOD0 [Net]
0525k(90D00037): LDR R0, SB, 37H [data]
0526k(E900001C): BNE 28 [0543H]
F := Files.New(S.s)l;m
0527l(40E80064): ADD R0, SP, 64H
0528l(41000020): MOV R1, R0, 20H
0529m .FIXUP P
0529m(F7203008): BL MOD2 [Files] PROC3
052Am(A0E00084): STR R0, SP, 84H
IF F # NIL THENn
052Bn(80E00084): LDR R0, SP, 84H
052Cn(E100000D): BEQ 13 [053AH]
ReceiveData(F,o done)p;q
052Do(80E00084): LDR R0, SP, 84H
052Ep(41E80008): ADD R1, SP, 8H
052Fq(F7FFFC7C): BL -900 [01ACH]
IF done THENr Files.Register(F)s;t reply(0)u ELSEv endw := 0 ENDx
0530r(90E00008): LDR R0, SP, 8H
0531r(E1000005): BEQ 5 [0537H]
0532s(80E00084): LDR R0, SP, 84H
0533t .FIXUP P
0533t(F720400A): BL MOD2 [Files] PROC4
0534u(40000000): MOV R0, R0, 0H
0535v(F7FFFCDF): BL -801 [0215H]
0536w(E7000002): B 2 [0539H]
0537x(40000000): MOV R0, R0, 0H
0538x(A0E0000C): STR R0, SP, CH
ELSE replyy(3)z;a Send(NAK,b 0,c dmy)d
0539y(E7000008): B 8 [0542H]
053Az(40000003): MOV R0, R0, 3H
053Ba(F7FFFCD9): BL -807 [0215H]
053Cb(40000025): MOV R0, R0, 25H
053Dc(41000000): MOV R1, R0, 0H
053Ed .FIXUP D
053Ed(8D00001A): LDR SB, MT, MOD0 [Net]
053Fd(42D80044): ADD R2, SB, 44H [data]
0540d(43000008): MOV R3, R0, 8H
ENDe
0541e(F7FFFAD7): BL -1321 [0019H]
ELSIF head1f.typ = NAK THENg reply(4)h
0542f(E7000014): B 20 [0557H]
0543g .FIXUP D
0543g(8D000005): LDR SB, MT, MOD0 [Net]
0544g(90D00037): LDR R0, SB, 37H [data]
0545g(40090025): SUB R0, R0, 25H
0546g(E9000003): BNE 3 [054AH]
0547h(40000004): MOV R0, R0, 4H
ELSIFi head1j.typ = NPR THENk reply(2)l;m end := 0
0548i(F7FFFCCC): BL -820 [0215H]
0549j(E700000D): B 13 [0557H]
054Ak .FIXUP D
054Ak(8D000007): LDR SB, MT, MOD0 [Net]
054Bk(90D00037): LDR R0, SB, 37H [data]
054Ck(40090026): SUB R0, R0, 26H
054Dk(E9000005): BNE 5 [0553H]
054El(40000002): MOV R0, R0, 2H
054Fm(F7FFFCC5): BL -827 [0215H]
ELSEn replyo(5)p;q end := 0
0550n(40000000): MOV R0, R0, 0H
0551n(A0E0000C): STR R0, SP, CH
0552o(E7000004): B 4 [0557H]
0553p(40000005): MOV R0, R0, 5H
0554q(F7FFFCC0): BL -832 [0215H]
ENDr ;
0555r(40000000): MOV R0, R0, 0H
0556r(A0E0000C): STR R0, SP, CH
Texts.Scan(S)s
0557s(40E80010): ADD R0, SP, 10H
0558s .FIXUP D
0558s(8D50000E): LDR SB, MT, MOD5 [Texts]
0559s(41D80003): ADD R1, SB, VAR3
ENDt
055At .FIXUP P
055At(F7516027): BL MOD5 [Texts] PROC22
055Bt(E7FFFF65): B -155 [04C1H]
ELSE replyu(1)v
055Cu(E7000002): B 2 [055FH]
055Dv(40000001): MOV R0, R0, 1H
ENDw
055Ew(F7FFFCB6): BL -842 [0215H]
END
ENDx ReceiveFiles;
055Fx(8FE00000): LDR LNK, SP, 0H
0560x(4EE800C8): ADD SP, SP, C8H
0561x(C700000F): B LNK
PROCEDURE SendMsg*;
VAR i: INTEGER; ch: CHAR;
S: Texts.Scanner;
msg: ARRAY 64 OF BYTE;
BEGINy GetPar1(S)z;a
0562y .PROC 3
0562y .COMMAND SendMsg
0562y(4EE900C0): SUB SP, SP, C0H
0563y(AFE00000): STR LNK, SP, 0H
0564z(40E8000C): ADD R0, SP, CH
0565z .FIXUP D
0565z(8D50000D): LDR SB, MT, MOD5 [Texts]
0566z(41D80003): ADD R1, SB, VAR3
0567a(F7FFFE5D): BL -419 [03C5H]
IF S.class = Texts.Name THENb
0568b(80E00048): LDR R0, SP, 48H
0569b(40090001): SUB R0, R0, 1H
056Ab(E9000030): BNE 48 [059BH]
FindPartner(S.s,c i)d;e
056Bc(40E80060): ADD R0, SP, 60H
056Cc(41000020): MOV R1, R0, 20H
056Dd(42E80004): ADD R2, SP, 4H
056Ee(F7FFFAEC): BL -1300 [005BH]
IF i = 0 THENf
056Ff(80E00004): LDR R0, SP, 4H
0570f(E9000028): BNE 40 [0599H]
Texts.Read(S,g ch)h;i
0571g(40E8000C): ADD R0, SP, CH
0572g .FIXUP D
0572g(8D50000D): LDR SB, MT, MOD5 [Texts]
0573g(41D80003): ADD R1, SB, VAR3
0574h(42E80008): ADD R2, SP, 8H
0575i .FIXUP P
0575i(F751301B): BL MOD5 [Texts] PROC19
WHILE (ch >= " ")j & (ki < 64)l DOm
0576j(90E00008): LDR R0, SP, 8H
0577j(40090020): SUB R0, R0, 20H
0578k(E5000012): BLT 18 [058BH]
0579l(80E00004): LDR R0, SP, 4H
057Al(40090040): SUB R0, R0, 40H
057Bm(ED00000F): BGE 15 [058BH]
msg[i]n := ORD(ch);o INC(i);p Texts.Read(S,q ch)r
057Cn(80E00004): LDR R0, SP, 4H
057Dn(41090040): SUB R1, R0, 40H
057En(DA294A1C): BLCC MT [trap=1, pos=10570]
057Fn(00E80000): ADD R0, SP, R0
0580o(91E00008): LDR R1, SP, 8H
0581o(B1000080): STR R1, R0, 80H
0582p(80E00004): LDR R0, SP, 4H
0583p(40080001): ADD R0, R0, 1H
0584p(A0E00004): STR R0, SP, 4H
0585q(40E8000C): ADD R0, SP, CH
0586q .FIXUP D
0586q(8D500014): LDR SB, MT, MOD5 [Texts]
0587q(41D80003): ADD R1, SB, VAR3
0588r(42E80008): ADD R2, SP, 8H
ENDs ;
0589s .FIXUP P
0589s(F7513014): BL MOD5 [Texts] PROC19
058As(E7FFFFEB): B -21 [0576H]
Send(MSG,t i,u msg)v;w ReceiveHead(T0)x;y
058Bt(40000044): MOV R0, R0, 44H
058Cu(81E00004): LDR R1, SP, 4H
058Dv(42E80080): ADD R2, SP, 80H
058Ev(43000040): MOV R3, R0, 40H
058Fw(F7FFFA89): BL -1399 [0019H]
0590x(400003E8): MOV R0, R0, 3E8H
0591y(F7FFFA9B): BL -1381 [002DH]
IF head1.typ # ACK THENz reply(3)a ENDb
0592z .FIXUP D
0592z(8D00000C): LDR SB, MT, MOD0 [Net]
0593z(90D00037): LDR R0, SB, 37H [data]
0594z(40090010): SUB R0, R0, 10H
0595z(E1000002): BEQ 2 [0598H]
0596a(40000003): MOV R0, R0, 3H
0597b(F7FFFC7D): BL -899 [0215H]
ELSE replyc(1)d
0598c(E7000002): B 2 [059BH]
0599d(40000001): MOV R0, R0, 1H
ENDe
059Ae(F7FFFC7A): BL -902 [0215H]
END
ENDf SendMsg;
059Bf(8FE00000): LDR LNK, SP, 0H
059Cf(4EE800C0): ADD SP, SP, C0H
059Df(C700000F): B LNK
PROCEDURE GetTime*;
VAR dt, res: INTEGER;
S: Texts.Scanner;
BEGINg GetPar1(S)h;i
059Eg .PROC 4
059Eg .COMMAND GetTime
059Eg(4EE90080): SUB SP, SP, 80H
059Fg(AFE00000): STR LNK, SP, 0H
05A0h(40E8000C): ADD R0, SP, CH
05A1h .FIXUP D
05A1h(8D50000F): LDR SB, MT, MOD5 [Texts]
05A2h(41D80003): ADD R1, SB, VAR3
05A3i(F7FFFE21): BL -479 [03C5H]
IF S.class = Texts.Name THENj
05A4j(80E00048): LDR R0, SP, 48H
05A5j(40090001): SUB R0, R0, 1H
05A6j(E900001B): BNE 27 [05C2H]
FindPartner(S.s,k res)l;m
05A7k(40E80060): ADD R0, SP, 60H
05A8k(41000020): MOV R1, R0, 20H
05A9l(42E80008): ADD R2, SP, 8H
05AAm(F7FFFAB0): BL -1360 [005BH]
IF res = 0 THENn
05ABn(80E00008): LDR R0, SP, 8H
05ACn(E9000013): BNE 19 [05C0H]
Send(TRQ,o 0,p dmy)q;r ReceiveHead(T1)s;t
05ADo(40000046): MOV R0, R0, 46H
05AEp(41000000): MOV R1, R0, 0H
05AFq .FIXUP D
05AFq(8D00000E): LDR SB, MT, MOD0 [Net]
05B0q(42D80044): ADD R2, SB, 44H [data]
05B1q(43000008): MOV R3, R0, 8H
05B2r(F7FFFA66): BL -1434 [0019H]
05B3s(40000BB8): MOV R0, R0, BB8H
05B4t(F7FFFA78): BL -1416 [002DH]
IF head1.typ = TIM THENu
05B5u .FIXUP D
05B5u(8D000006): LDR SB, MT, MOD0 [Net]
05B6u(90D00037): LDR R0, SB, 37H [data]
05B7u(40090047): SUB R0, R0, 47H
05B8u(E9000006): BNE 6 [05BFH]
PickQ(dt)v;w Oberon.SetClock(dt)x;y reply(6)z
05B9v(40E80004): ADD R0, SP, 4H
05BAw(F7FFFB81): BL -1151 [013CH]
05BBx(80E00004): LDR R0, SP, 4H
05BCy .FIXUP P
05BCy(F7915033): BL MOD9 [Oberon] PROC21
05BDz(40000006): MOV R0, R0, 6H
ENDa
05BEa(F7FFFC56): BL -938 [0215H]
ELSE replyb(1)c
05BFb(E7000002): B 2 [05C2H]
05C0c(40000001): MOV R0, R0, 1H
ENDd
05C1d(F7FFFC53): BL -941 [0215H]
END
ENDe GetTime;
05C2e(8FE00000): LDR LNK, SP, 0H
05C3e(4EE80080): ADD SP, SP, 80H
05C4e(C700000F): B LNK
PROCEDURE StartServer*;
BEGINf protected := TRUE;g partner[0] := 0X;h SCC.Start(TRUE)i;j
05C5f .PROC 5
05C5f .COMMAND StartServer
05C5f(4EE90004): SUB SP, SP, 4H
05C6f(AFE00000): STR LNK, SP, 0H
05C7g(40000001): MOV R0, R0, 1H
05C8g .FIXUP D
05C8g(8D000013): LDR SB, MT, MOD0 [Net]
05C9g(B0D0004C): STR R0, SB, 4CH [data]
05CAh(40000000): MOV R0, R0, 0H
05CBh(B0D0003C): STR R0, SB, 3CH
05CCi(40000001): MOV R0, R0, 1H
05CDj .FIXUP P
05CDj(F7104011): BL MOD1 [SCC] PROC4
Oberon.Remove(Server)k;l Oberon.Install(Server)m;n
05CEk .FIXUP D
05CEk(8D000006): LDR SB, MT, MOD0 [Net]
05CFk(80D00028): LDR R0, SB, 28H [data]
05D0l .FIXUP P
05D0l(F792C003): BL MOD9 [Oberon] PROC44
05D1m .FIXUP D
05D1m(8D000003): LDR SB, MT, MOD0 [Net]
05D2m(80D00028): LDR R0, SB, 28H [data]
05D3n .FIXUP P
05D3n(F792B003): BL MOD9 [Oberon] PROC43
Texts.WriteString(W,o " Server started as ")p;q Texts.WriteString(W,r
05D4o .FIXUP D
05D4o(8D000003): LDR SB, MT, MOD0 [Net]
05D5o(40D80000): ADD R0, SB, 0H [data]
05D6o .FIXUP D
05D6o(8D500002): LDR SB, MT, MOD5 [Texts]
05D7o(41D80005): ADD R1, SB, VAR5
05D8p .FIXUP D
05D8p(8D000002): LDR SB, MT, MOD0 [Net]
05D9p(42D800F4): ADD R2, SB, F4H [" Server started as "]
05DAp(43000014): MOV R3, R0, 14H
05DBq .FIXUP P
05DBq(F751D008): BL MOD5 [Texts] PROC29
05DCr .FIXUP D
05DCr(8D000004): LDR SB, MT, MOD0 [Net]
05DDr(40D80000): ADD R0, SB, 0H [data]
05DEr .FIXUP D
05DEr(8D500002): LDR SB, MT, MOD5 [Texts]
05DFr(41D80005): ADD R1, SB, VAR5
Oberon.User)s;t
05E0s .FIXUP D
05E0s(8D900002): LDR SB, MT, MOD9 [Oberon]
05E1s(42D80008): ADD R2, SB, VAR8
05E2s(43000008): MOV R3, R0, 8H
05E3t .FIXUP P
05E3t(F751D008): BL MOD5 [Texts] PROC29
Texts.WriteLn(W)u;v Texts.Append(Oberon.Log,w W.buf)x
05E4u .FIXUP D
05E4u(8D000004): LDR SB, MT, MOD0 [Net]
05E5u(40D80000): ADD R0, SB, 0H [data]
05E6u .FIXUP D
05E6u(8D500002): LDR SB, MT, MOD5 [Texts]
05E7u(41D80005): ADD R1, SB, VAR5
05E8v .FIXUP P
05E8v(F751C005): BL MOD5 [Texts] PROC28
05E9w .FIXUP D
05E9w(8D900003): LDR SB, MT, MOD9 [Oberon]
05EAw(80D0000D): LDR R0, SB, VAR13
05EBx .FIXUP D
05EBx(8D000002): LDR SB, MT, MOD0 [Net]
05ECx(81D00000): LDR R1, SB, 0H [data]
ENDy StartServer;
05EDy .FIXUP P
05EDy(F750E005): BL MOD5 [Texts] PROC14
05EEy(8FE00000): LDR LNK, SP, 0H
05EFy(4EE80004): ADD SP, SP, 4H
05F0y(C700000F): B LNK
PROCEDURE Unprotect*;
BEGINz protected := FALSE
05F1z .PROC 6
05F1z .COMMAND Unprotect
05F1z(4EE90004): SUB SP, SP, 4H
05F2z(AFE00000): STR LNK, SP, 0H
ENDa Unprotect;
05F3a(40000000): MOV R0, R0, 0H
05F4a .FIXUP D
05F4a(8D000009): LDR SB, MT, MOD0 [Net]
05F5a(B0D0004C): STR R0, SB, 4CH [data]
05F6a(8FE00000): LDR LNK, SP, 0H
05F7a(4EE80004): ADD SP, SP, 4H
05F8a(C700000F): B LNK
PROCEDURE WProtect*;
BEGINb protected := TRUE
05F9b .PROC 7
05F9b .COMMAND WProtect
05F9b(4EE90004): SUB SP, SP, 4H
05FAb(AFE00000): STR LNK, SP, 0H
ENDc WProtect;
05FBc(40000001): MOV R0, R0, 1H
05FCc .FIXUP D
05FCc(8D000008): LDR SB, MT, MOD0 [Net]
05FDc(B0D0004C): STR R0, SB, 4CH [data]
05FEc(8FE00000): LDR LNK, SP, 0H
05FFc(4EE80004): ADD SP, SP, 4H
0600c(C700000F): B LNK
PROCEDURE Reset*;
BEGINd SCC.Start(TRUE)e
0601d .PROC 8
0601d .COMMAND Reset
0601d(4EE90004): SUB SP, SP, 4H
0602d(AFE00000): STR LNK, SP, 0H
0603e(40000001): MOV R0, R0, 1H
ENDf Reset;
0604f .FIXUP P
0604f(F7104017): BL MOD1 [SCC] PROC4
0605f(8FE00000): LDR LNK, SP, 0H
0606f(4EE80004): ADD SP, SP, 4H
0607f(C700000F): B LNK
PROCEDURE StopServer*;
BEGINg Oberon.Remove(Server)h;i Texts.WriteString(W,j " Server stopped")k;l
0608g .PROC 9
0608g .COMMAND StopServer
0608g(4EE90004): SUB SP, SP, 4H
0609g(AFE00000): STR LNK, SP, 0H
060Ah .FIXUP D
060Ah(8D00000E): LDR SB, MT, MOD0 [Net]
060Bh(80D00028): LDR R0, SB, 28H [data]
060Ci .FIXUP P
060Ci(F792C008): BL MOD9 [Oberon] PROC44
060Dj .FIXUP D
060Dj(8D000003): LDR SB, MT, MOD0 [Net]
060Ej(40D80000): ADD R0, SB, 0H [data]
060Fj .FIXUP D
060Fj(8D500002): LDR SB, MT, MOD5 [Texts]
0610j(41D80005): ADD R1, SB, VAR5
0611k .FIXUP D
0611k(8D000002): LDR SB, MT, MOD0 [Net]
0612k(42D80108): ADD R2, SB, 108H [" Server stopped"]
0613k(43000010): MOV R3, R0, 10H
0614l .FIXUP P
0614l(F751D008): BL MOD5 [Texts] PROC29
Texts.WriteLn(W)m;n Texts.Append(Oberon.Log,o W.buf)p
0615m .FIXUP D
0615m(8D000004): LDR SB, MT, MOD0 [Net]
0616m(40D80000): ADD R0, SB, 0H [data]
0617m .FIXUP D
0617m(8D500002): LDR SB, MT, MOD5 [Texts]
0618m(41D80005): ADD R1, SB, VAR5
0619n .FIXUP P
0619n(F751C005): BL MOD5 [Texts] PROC28
061Ao .FIXUP D
061Ao(8D900003): LDR SB, MT, MOD9 [Oberon]
061Bo(80D0000D): LDR R0, SB, VAR13
061Cp .FIXUP D
061Cp(8D000002): LDR SB, MT, MOD0 [Net]
061Dp(81D00000): LDR R1, SB, 0H [data]
ENDq StopServer;
061Eq .FIXUP P
061Eq(F750E005): BL MOD5 [Texts] PROC14
061Fq(8FE00000): LDR LNK, SP, 0H
0620q(4EE80004): ADD SP, SP, 4H
0621q(C700000F): B LNK
PROCEDURE SCCStatus*;
BEGINr
0622r .PROC 10
0622r .COMMAND SCCStatus
0622r(4EE90004): SUB SP, SP, 4H
0623r(AFE00000): STR LNK, SP, 0H
Texts.WriteString(W,s "SCC.Available() ")t;u
0624s .FIXUP D
0624s(8D000008): LDR SB, MT, MOD0 [Net]
0625s(40D80000): ADD R0, SB, 0H [data]
0626s .FIXUP D
0626s(8D500002): LDR SB, MT, MOD5 [Texts]
0627s(41D80005): ADD R1, SB, VAR5
0628t .FIXUP D
0628t(8D000002): LDR SB, MT, MOD0 [Net]
0629t(42D80118): ADD R2, SB, 118H ["SCC.Available() "]
062At(43000011): MOV R3, R0, 11H
062Bu .FIXUP P
062Bu(F751D00D): BL MOD5 [Texts] PROC29
Texts.WriteInt(W,v SCC.Available()w,x 1)y;z
062Cv .FIXUP D
062Cv(8D000004): LDR SB, MT, MOD0 [Net]
062Dv(40D80000): ADD R0, SB, 0H [data]
062Ev .FIXUP D
062Ev(8D500002): LDR SB, MT, MOD5 [Texts]
062Fv(41D80005): ADD R1, SB, VAR5
0630w(4EE90008): SUB SP, SP, 8H
0631w(A0E00004): STR R0, SP, 4H
0632w(A1E00000): STR R1, SP, 0H
0633x .FIXUP P
0633x(F7106008): BL MOD1 [SCC] PROC6
0634x(02000000): MOV R2, R0, R0
0635x(81E00000): LDR R1, SP, 0H
0636x(80E00004): LDR R0, SP, 4H
0637x(4EE80008): ADD SP, SP, 8H
0638y(43000001): MOV R3, R0, 1H
0639z .FIXUP P
0639z(F751E006): BL MOD5 [Texts] PROC30
Texts.WriteLn(W)a;b
063Aa .FIXUP D
063Aa(8D00000C): LDR SB, MT, MOD0 [Net]
063Ba(40D80000): ADD R0, SB, 0H [data]
063Ca .FIXUP D
063Ca(8D500002): LDR SB, MT, MOD5 [Texts]
063Da(41D80005): ADD R1, SB, VAR5
063Eb .FIXUP P
063Eb(F751C005): BL MOD5 [Texts] PROC28
Texts.Append(Oberon.Log,c W.buf)d
063Fc .FIXUP D
063Fc(8D900003): LDR SB, MT, MOD9 [Oberon]
0640c(80D0000D): LDR R0, SB, VAR13
0641d .FIXUP D
0641d(8D000002): LDR SB, MT, MOD0 [Net]
0642d(81D00000): LDR R1, SB, 0H [data]
ENDe SCCStatus;
0643e .FIXUP P
0643e(F750E005): BL MOD5 [Texts] PROC14
0644e(8FE00000): LDR LNK, SP, 0H
0645e(4EE80004): ADD SP, SP, 4H
0646e(C700000F): B LNK
BEGINf Texts.OpenWriter(W)g;h Server := Oberon.NewTask(Serve,i 500)j
0647f .PROC 0
0647f .ENTRYPOINT
0647f(4EE90004): SUB SP, SP, 4H
0648f(AFE00000): STR LNK, SP, 0H
0649g .FIXUP D
0649g(8D000008): LDR SB, MT, MOD0 [Net]
064Ag(40D80000): ADD R0, SB, 0H [data]
064Bg .FIXUP D
064Bg(8D500002): LDR SB, MT, MOD5 [Texts]
064Cg(41D80005): ADD R1, SB, VAR5
064Dh .FIXUP P
064Dh(F751700A): BL MOD5 [Texts] PROC23
064Ei(F7000000): BL 0 [064FH]
064Fi(40F90F8C): SUB R0, LNK, F8CH
0650j(410001F4): MOV R1, R0, 1F4H
ENDk Net.l
0651k .FIXUP P
0651k(F792A004): BL MOD9 [Oberon] PROC42
0652k .FIXUP D
0652k(8D000007): LDR SB, MT, MOD0 [Net]
0653k(A0D00028): STR R0, SB, 28H [data]
0654l(8FE00000): LDR LNK, SP, 0H
0655l(4EE80004): ADD SP, SP, 4H
0656l(C700000F): B LNK