|
|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 24576 (0x6000)
Types: TextFile
Names: »kkmonret2«
└─⟦667bb35d6⟧ Bits:30007480 RC8000 Dump tape fra HCØ.
└─⟦4334b4c0b⟧
└─⟦f874557f7⟧ »kkmon2filer«
└─⟦this⟧
(
message monchange release 7.0 to 7.12
clear temp mondef moncentral monprocs mondisc monfpaline monhost monfpasub,
montabinit monprocfnc1 monprocfnc2 mons1 mons2 moncatinit,
mdef mcentral mprocs mdisc mfpaline mhost mfpasub,
mtabinit mprocfnc1 mprocfnc2 ms1 ms2 mcatinit
contract entry.kkmon2filer mondef moncentral monprocs mondisc monfpaline,
monhost monfpasub montabinit monprocfnc1 monprocfnc2 mons1 mons2 moncatinit
skip 36.1
c=copy mess.no 1
mdef=set 1 disc3
mdef=edit mondef
skip 36.1
c=copy mess.no 1
mcentral=set 1 disc3
mcentral=edit moncentral
skip 36.1
c=copy mess.no 1
mprocs=set 1 disc3
mprocs=edit monprocs
skip 36.1
c=copy mess.no 1
mdisc=assign mondisc
skip 36.1
c=copy mess.no 1
mfpaline=assign monfpaline
skip 36.1
c=copy mess.no 1
mhost=set 1 disc3
mhost=edit monhost
skip 36.1
c=copy mess.no 1
mfpasub=set 1 disc3
mfpasub=edit monfpasub
skip 36.1
c=copy mess.no 1
mtabinit=set 1 disc3
mtabinit=edit montabinit
skip 36.1
c=copy mess.no 1
mprocfnc1=set 1 disc3
mprocfnc1=edit monprocfnc1
skip 36.1
c=copy mess.no 1
mprocfnc2=set 1 disc3
mprocfnc2=edit monprocfnc2
skip 36.1
c=copy mess.no 1
ms1=set 1 disc3
ms1=edit mons1
skip 36.1
c=copy mess.no 1
ms2=assign mons2
skip 36.1
c=copy mess.no 1
mcatinit=set 1 disc3
mcatinit=edit moncatinit
head cpu
end)
$def
;********************
l./a111=3/,r/3/2/,
l./; format of area process/,
l 1,d./format of pseudo process/,d./a50=/,i!
a401=(:a3+23:)/24 ; number of words in user bittable
a403=a401*2 ; number of bytes in bit table
b.j0, j0=0
a349= j0 ; <start of process>
a250= j0 , j0=j0+2 ; <driver proc descr address>
a402= j0 , j0=j0+a403 ; <user bit table>
a48 = j0 , j0=j0+2 ; <lower limit>
a49 = j0 , j0=j0+2 ; <upper limit>
a10 = 0 ; <kind>
a11 = 2 ; <name>
a50 = 10, a51 = 11 ; <process descr addr of bs device>
a52 = 12 ; <reserved>
a53 = 14 ;******** <users>
a60 = 16 ; <first slice>
a61 = 18 ; <number of segments>
a62 = 20 ; <document name>
a411= 28 ; number of times written
a412= 30 ; number of times read
a349=a349-j0, a250=a250-j0 , a402=a402-j0, a48=a48-j0, a49=a49-j0
e.
a2 = a412+2-a349 ; size of area process
; format of pseudo process
a48 = -4 ; <lower limit>
a49 = -2 ; <upper limit>
a10 = 0 ; <kind>
a11 = 2 ; <name>
a50 = 10 ; <main process>
!,
l./; format of device description/,
l./a250=j0/,l1,i/
a410=j0, j0=j0+a403 ; <user bit table>
/,
l./a250=a250-j0/,r/a250=a250-j0/a250=a250-j0, a410=a410-j0/,
l./; format of peripheral/,l 1,i/
; a402 start of user table
/,
f
$central
;********************
l./d123:/,d./jlx3/,i/
d123:
ba w2 x1+a14 ; w2:=addr of rel. halfword;
bz w0 x2+a402 ; w0:=userbits.curr.intproc;
sz w0 (x1+a14) ; if userbit.curr.intproc is on then
bs w0 x1+a14+1 ; remove userbit.curr.intproc;
hs w0 x2+a402 ; return userbits;
bs w2 x1+a14 ; reset w2 to addr(extproc)
d124:rl w0 x2+a52 ; w0:=reserver.proc;
sn w0 (x1+a14) ; if intproc is reserver then
al w0 0 ; remove intproc as reserver
rs w0 x2+a52 ; clear reserver;
jl x3 ; return;
/,l./d125:/,d./jlx3/,i/
d125:
rl w0 x1+a14 ; w0:=idbit.intproc;
rs w0 x2+a52 ; extproc.reserver:=idbit.intproc;
d126:
ba w2 x1+a14 ;
bz w0 x2+a402 ; w0:=userbits.curr.intproc;
lo w0 x1+a14 ; set curr.intproc as user of extproc;
hs w0 x2+a402 ;
bs w2 x1+a14 ; reset w2;
jl x3 ; return
/,l./d102:/,d./jlx3 /,i/
d102: ;
ba w2 x1+a14 ;
bz w0 x2+a402 ; w0:=userbits.curr.intproc;
bs w2 x1+a14 ; reset w2;
sz w0 (x1+a14) ; if curr.intproc is user then
jl x3+2 ; return to link+2: i.e. user
jl x3 ; return to link: not user
/,l./g17:/,l./procedurecheckuser/,
l./b.i24/,d./jlx3+0/,i/
b. i5 w.
g14: ; check user;
sn w1 (b1) ; if curr.intproc=sender then
jl x3 ; return (sender=driverproc)
ds w3 i3 ; save w2 w3;
rl w2 b19 ; w2:= extproc;
jl w3 d113 ; check reserver;
jl g6 ; return 0 other reservers goto result 2 else
jl i0 ; return 2 intproc is reserver goto nornal return else
; return 4 no reservers
jl w3 d102 ; check user
jl g6 ; if not user then result 2 else
i0:
rl w2 i2 ;
jl (i3) ; normal return;
i2: 0 ; save w2;
i3: 0 ; save w3;
/,l./g15:/,d./jlx3+0/,i/
w.
g15: ; check reserver;
sn w1 (b1) ; if curr.intproc= sender then
jl x3 ; return (sender=driverproc);
am (b19) ;
rl w0 a52 ; w0:=reserver.extproc;
sn w0 (x1+a14) ; if intproc is reserver then
jl x3 ; normal return else
jl g6 ; result 2;
/,f
$procs
;********************
l./c99;28/,r/c99/e14/,
l./proceduregetclock/,i/
; procedure privileged operation
b. i5 w.
i0: 1<23 ; monitor mode
e14: ;
rl w1 b1 ; w1:= current
rl w0 x1+a24 ; w0:=mode
se w0 0 ; if mode<>0 then
jl r28 ; return (monitor mode not set)
rl w0 x1+a32 ;
lo. w0 i0. ; status:=status add monitor mode
rs w0 x1+a32 ;
al w0 0 ; result=0
jl r28 ; return (monitor mode set)
e.
/,f
$disc
;********************
$fpaline
;********************
$host
;********************
l./h90:/,
l./j4:/,
;l./rsw0g20/, i/
;c.-p103
; rs w0 x2+8 ; status:=0
; ds w0 x2+12 ; bytes, chars trf:= 0,0;
;z.
;c.p103-1
;/,
;l./jlg7/, i/
;z.
;/,
l./q1:/,
l./m0:/,
;l./c.p103-1/, d, l./z./, d3,
l./q4:/,
l./m0:/,
l./c.-p103/,
;d./c.p103-1/, l./z./, d,
l./j6:/,
l./rl w0 x1+a53/,d 2,i/
al w3 0 ;
j7: am x1+a402 ;
rl w0 x3 ;
am x2+a402 ;
rs w0 x3 ;
al w3 x3+2 ; users(proc):=proc func;
sh w3 a403-2 ;
jl. j7. ;
rl w0 g49 ;
rs w0 x2+a402 ;
/,
;l./c.-p103/,d./c.p103-1/,
;l./z./,d,
l./m6:/,
l./rl w3 x3+a14/,d 3,i/
rl. w1 r31. ;
ba w1 x3+a14 ;
bz w0 x1+a402 ;
lo w0 x3+a14 ; users(proc):=id-bit(sender(mess));
hs w0 x1+a402 ;
rl w1 b19 ;
jl. j1. ;
z.
/,
l./m7:/,
l./x3+a14/,d./j8:/,i/
j7: bz w1 x3+a14 ; get half word no
am x1 ;
bz w0 x2+a402 ;
lo w0 x3+a14 ;
am x1 ;
hs w0 x2+a402 ; users(sub):=proc+all ancestors(proc)
rl w3 x3+a34 ;
se w3 0 ;
jl. j7. ;
rl w1 b19 ;
z.
/,
l./n24:/,
l-2,r/i2/i2,j2/,
l./ds w0 x2+a53/,d,i/
rs w0 x2+a52 ; reserver:=0
j0: am x3 ;
rs w0 x2+a402 ; users:=0
al w3 x3+2 ;
sh w3 a403-2 ;
jl. j0. ;
/,
f
$fpasub
;****************
l./q14:/,
l./i2:/,d 6,
i/
i2: rl. w3 (j1.) ;
rl w1 x1+a50 ; rec:=receiver(att-message);
al w1 x1+p202 ; subhost:=subhost(main(proc));
bz w2 x3+a14 ;
am x2 ;
bz w0 x1+a402 ; mask:=user bits(bit displacement(rec),subhost);
la w0 x3+a14+1 ; mask:=mask and id-bit(rec);
rl w1 b19 ;
bz w0 1 ;
sn w0 0 ; if mask<>0 (i.e. receiver user of subhost) then
jl. i5. ;
am x2 ;
bz w3 x1+a402 ;
lo w3 0 ;
am x2 ;
hs w3 x1+a402 ; include receiver as user(proc);
rl w0 x1+a402 ; exclude proc func as user;
la w0 g65 ;
rs w0 x1+a402 ;
i5: ;
z.
/,
f
$tabinit
;********************
l./; external processes/,
l./h4:/,l-1,r/0/0,r.a401,0/,
l./h22:/,l-1,r/0/0,r.a401,0/,
l./h23:/,l-1,r/0/0,r.a401,0/,
l./h24:/,l-1,r/0/0,r.a401,0/,
l./;segment5:/,
l./g4:/,
l./g5:/,l-2,d./jl.g5./,i/
rl w3 x2 ; proc:=name table(entry);
; internal process:
al w0 0 ; halfword:=0;
bz. w1 g9. ; id-bit:=2.1000 0000 0000
g5: rs w3 x2 ; name table(entry):=proc;
hs w0 x3+a14 ; id-bit(proc):=id-bit;
hs w1 x3+a14+1 ; halfword(proc):=halfword;
ls w1 -1 ; id-bit:=id-bit shift (-1);
se w1 0 ; if id-bit.halfword<>0 then
jl. g14. ; goto g14
ba. w0 1 ; else halfword:=next halfword;
bz. w1 g9. ; id-bit:=2.1000 0000 0000
; set queue:
g14: al w3 x3+a15 ; next(event q(proc) ):=
rs w3 x3 ; last(event q(proc) ):=
rs w3 x3+2 ; event q(proc);
al w3 x3+a4-a15 ; proc:=next proc;
al w2 x2+2 ;
se w2 (b7) ; if if entry<> name table end then
jl. g5. ; goto internal process;
/,
f
$procfnc1
;********************
l./e17:/,
l./ds. w3 d14./,d,i/
b. i1 w.
rs. w3 d14. ;
al w0 0 ;
i0: rs. w0 x2+d13. ; childrensbits:=0
al w2 x2+2 ;
sh w2 a403-2 ;
jl. i0. ;
e.
/,
l./e18:/,l-2,r/g0/g3/,l./e19:/,
l./dl./,d./jl.(d12.)/,i/
al w0 0 ;
al w1 a403 ;
g3: al w1 x1-2 ;
lo. w0 x1+d13. ; w0:=id bits
se w1 0 ;
jl. g3. ;
rl w3 b6 ; w3:=addr(first proc in nametable);
g0: rl w2 x3 ; for w3 through nametable do
rl. w1 d14. ; w1:=proc addr;
se w1 (x2+a34) ; if parent.nametable(w3)=
jl. g1. ; procaddr then
bz w1 x2+a14 ; include identbit.nametable(w3)
bz. w0 x1+d13. ; nametable(w3));
lo w0 x2+a14 ;
hs. w0 x1+d13. ;
g1: al w3 x3+2 ;
se w3 (b7) ;
jl. g0. ;
jl. (d12.) ; return;
/,
l./procedure nextproc(result:procaddr,newstate);/,
l./b.g0/,r/0/5/,
l./z.rl. w1 d13./,
r/z./z.
/,l./rl.w1/,d./jd.(d12.)/,i/
rs. w3 d12. ; save(link) ;
rl w3 b6 ; w3:=first internal in nametable ;
al w1 0 ;
g2: bz. w0 x1+d13. ; for all children bits do
se w0 0 ; if childrenbits(w1)=0 then
jl. g1. ; goto L;
al w1 x1+1 ;
se w1 a403 ;
jl. g2. ;
rl. w3 d12. ;
jd x3+2 ; return 2;
g1: hs w1 0 ; w0:=relative addr<12 ;
g0: rl w2 x3 ; w2:=nametable(w3) ;
al w3 x3+2 ; w3:=next in nametable ;
so w0 (x2+a14) ; if userbit.curr.intproc is not on then
jl. g0. ; goto g0 else
bz w3 0 ; w3:=relative addr
lx w0 x2+a14 ; remove userbits.curr.intproc
hs. w0 x3+d13. ;
rs. w2 d14. ; proc addr:=w2;
al w3 x2 ;
al w2 f50 ; new state:=wait stop by ancestor;
jd. (d12.) ;
/,
l./e25:/,d./jex2+0;en/,i/
e25: ; remove area process;
ds. w2 h1. ; save(link);
jl. w2 e53. ; test user and reserver(intproc,extproc);
rs. w2 h2. ; h2:=result;
so w2 2.1 ; if intproc is not user then
je. (h1.) ; enable return else
jl. w2 e52. ; exclude intproc as user;
rl. w0 h2. ; w0:=result of test user and reserver;
al w2 0 ;
sz w0 2.10 ; if intproc is reserver then
rs w2 x3+a52 ; remove intproc as reserver;
al w2 1 ;
ba w2 x1+a20 ; areaclaim.intproc:=
hs w2 x1+a20 ; areaclaim.intproc+1;
sz w0 2.100 ; if other users then
je. (h1.) ; enable return
al w0 0 ;
/,l./jex2+0/,r/jex2+0 /je. (h1.)/,
l./g1:/,r/:/:
/,d,l./e50:/,l./e32./,l1,i/
; procedure include user(intproc,extproc);
; reg call return
; w0 undef
; w1 intproc unchanged
; w2 link -
; w3 extproc -
; the process intproc is included as user of the external process extproc
e51: ;
ba w3 x1+a14 ;
bz w0 x3+a402 ; w0:=userbits.intproc;
lo w0 x1+a14 ; include intproc;
hs w0 x3+a402 ;
bs w3 x1+a14 ; reset w3
jl x2 ; return
; procedure exclude user(intproc,extproc);
; reg call return
; w0 undef
; w1 intproc unchanged
; w2 link -
; w3 extproc -
; the procedure will exclude the process addresed by intproc as user
; of the external process addressed by extproc
e52: ba w3 x1+a14 ;
bz w0 x3+a402 ; w0:=users.intproc;
sz w0 (x1+a14) ; if intproc is user then
lx w0 x1+a14 ; exclude intproc as user;
hs w0 x3+a402 ;
bs w3 x1+a14 ; reset w3
jl x2 ;
; procedure test users and reserver(intproc,extproc);
; reg call return
; w0 undef
; w1 intproc unchanged
; w2 link result
; w3 extproc unchanged
; the procedure set result = 2.0001 if intproc is user
; = 2.0011 if intproc is reserver (and user)
; = 2.0101 if intproc and other ip are users
; = 2.0100 if there only are other users
; = 2.1100 if another ip is reserver (and user)
; of extproc else result is set to zero
b. f5,g5 w.
e53: ds. w3 g1. ; save(link,w3);
rl w0 x3+a52 ; w0:=reserver.extproc;
al w2 2.10 ;
sn w0 (x1+a14) ; if intproc is reserver then
jl. f3. ; goto test other users;
al w2 0 ;
se w0 0 ; if there is another reserver then
al w2 2.1000 ; set other-reserver bit;
ba w3 x1+a14 ; w3:=addr(bitpattern.intproc);
bz w0 x3+a402 ; w0:=bitpattern.intproc;
sz w0 (x1+a14) ; if userbit.intproc is on then
f3: al w2 x2+1 ; result:=result add 1;
al w3 0 ;
f0: am. (g1.) ;
bz w0 x3+a402 ; w0:=next pattern.userbittable;
sn w0 0 ; if no users then
jl. f1. ; goto f1;
hs w3 0 ;
sn w0 (x1+a14) ; if only intproc is user then
jl. f1. ; goto f1 else
al w2 x2+2.0100 ; result:=result add 2.0100;
jl. f2. ; goto f2 else
f1: al w3 x3+1 ; w3:=next rel-addr
se w3 a403 ; if not end bittable then
jl. f0. ; goto f0;
f2: rl. w3 g1. ;
jl. (g0.) ; return;
g0: 0
g1: 0
e.
/,
f
$procfnc2
;****************
l./m1:/,l./j6./,l1,i/
j6=k-2
/,
l./m9:/,l./rl w0 x3+a53/,d 1,i/
ba w3 x1+a14 ;
bz w3 x3+a402 ; w3:=userbits.intproc;
bz w1 x1+a14+1 ; w1:=idbit.intproc;
so w3 x1 ; if idbit.intproc is not on then
/,l./nouser=a53/,r/a53/2.0100/,r/a52/2.1000/,l./m11:/,
l./jl.w3n10./,d./snw00/,i/
rl w3 x2 ; w3:=addr(area process description);
rl. w1 d2. ; w1:=intproc;
jl. w2 e53. ; test user and reserver;
jl. w3 n10. ; w0:=2.100 test other users
; 2.1100 test other reservers;
so w2 (0) ; if no other users-reservers then
/,
l./m14:/,l./;test/,i/
jl. e1., e1 = k-2
/,
l./m22:/,
l./h4:/,l 1,i/
; common variables:
d16: 0, r.8 ; answer area
c. 4 * (:a110+1:)+d16.-1; and
0, r. 2*(:a110+1:)+d16.>1; claim change array (set bs claims)
z. ;
d4: 0 ; curdoc: address of current document (chaintable)
d5: d9 ; maincat pseudochain
; description of current entry
d29: 0 ; -2 curr entry segment number
d3: 0 ; curr entry address in catalog
; record work:
; (format as a catalog entry)
d1: 0,r.f0>1 ; work
d30: 0, r.4 ; stat area.work
; format of chainhead format of catalog entry
v1 = d1 + f1 ; lower base of catalog lower base of entry
v2 = d1 + f2 ; upper base of catalog upper base of entry
v3 = d1 + f3 ; chainkink*8 + permkey namekey*8 + permkey
v4 = d1 + f4 ; first slice of auxcat first slice
v5 = d1 + f5 ; name of auxcat entry name
v6 = d1 + f6 ; start of tail
v7 = d1 + f7 ; size of auxcat size of entry
v11= d1 + f11 ; document name name
v12= d1 + f12 ; name table addr of write access counter,
; auxcat area process read acces counter
v13= d1 + f5 + 2 ;
v14= d1 + f5 + 6 ;
v15= d1 + f5 + 7 ;
v26= d1 + f66 + f0 ; last slice in chaintable
v27= d1 + f67 + f0 ; first slice in
; chaintable-chain
v30= d1 + f11 + 2 ;
v31= d1 + f11 + 6 ;
v32= d1 + f12 + 2 ;
d2: 0 ; sender: process description address of sender
d11: 0 ; cur proc name table address
d13: 0,r.a401 ; children bits
d14: 0 ; d13+2 ; address of a process description
d15: 0 ; d13+4 ; end chain
; stepping stones
jl. e5., e5 = k-2
jl. e7., e7 = k-2
jl. e8., e8 = k-2
jl. e9., e9 = k-2
jl. e10., e10=k-2
jl. e12., e12= k-2
jl. e50., e50= k-2
/,
l./m24:/,
l./d3:/,d-2,d./d5:/,l1,d./e10./,
i/
jl. e17., e17= k-2
jl. e31., e31= k-2
jl. e32., e32= k-2
jl. e33., e33= k-2
/,l./m34:/,l./n1./,l1,i/
n1=k-2
/,l./n5./,l1,i/
n5=k-2
/,l./d2:/,d./d15:/,
l./jl.j5./,l1,i/
j5=k-2
/,
l./stepping stones/,l1,d1,
l./e20-/,r/6/4/,
l 1,i/
am e24-e26 , e24=k-2
/,l./e31/,r/31/43/,l1,d2,l./e60/,i/
jl. e52., e52=k-2
jl. e53., e53=k-2
/,
l./m40:/,l./am(b1)/,d./rsw0x3+a53/,i/
rl w1 b1 ; w1:=addr(procfunc process description);
rl w0 x1+a14 ; w0:=idbit.procfunc;
rs w0 x3+a52 ; discprocess.reserver:=idbit.procfunc;
jl. w2 e51. ; include procfunc as user of discprocess;
/,l./m41:/,l./rlw2x2/,d./x2+a72/,i/
rl w3 x2 ; w3:=addr(discprocess);
rl w1 b1 ; w1:=addr(procfunc process description);
jl. w2 e52. ; exclude procfunc as user of discprocess;
ld w1 -100 ;
rs w0 x3+a11 ; name(0):=0; (this will prevent further user of the discprocess)
rs w0 x3+a52 ; exclude procfunc as reserver;
ds w1 x3+a72 ; chaintable.discproc:=slicelength.discproc:=0;
/,l./m46:/,l./g5:/,l./rl.w2h1./,d./rsw1x3+a53/,i/
rl. w1 h1. ; w1:=intproc;
rl. w3 (d11.) ; w3:=extproc;
jl. w2 e53. ; test users and reserver;
sz w2 2.1 ; if intproc already user then
jl. n0. ; goto next instruction else
al w0 -1 ;
ba w0 x1+a20 ;
sn w0 -1 ; if areaclaim.sender=0 then
jl. j1. ; goto result 1 else
j1=k-2
hs w0 x1+a20 ; else decrease areaclaim.sender;
jl. w2 e51. ; include intproc as user of areaproc;
/,l./m50:/,l-1,r/g10/g10,h5/,
l./ldw2-100/,d./jl.n0./,i/
al w2 0 ;
rs w2 x3+a52 ; clear reserver.extproc;
rs w2 x3+a11 ; name(0).
rs w2 x3+a50 ; docaddr.
; scan all internal processes and maybe increase their area-claim
rl w2 b6 ; w2:=first intproc in nametable;
g1: rl w1 x2 ; w1:=next intproc in nametable;
rs. w2 h0. ;
jl. w2 e53. ; test users and reserver;
rs. w2 h1. ; :=user and reserver mask;
jl. w2 e52. ; exclude intproc as user;
rl. w2 h1. ; w2:=user and reserver mask;
al w0 1 ;
ba w0 x1+a20 ;
sz w2 2.1 ; if intproc is user then
hs w0 x1+a20 ; increase areaclaim.intproc;
so w2 2.0100 ; if no other users then
jl. n0. ; next instruction else
rl. w2 h0.
al w2 x2+2 ; next in name table;
jl. g1. ; (no check of upper limit in nametable,
; because of the test on other users)
h0: 0
h1: 0
/,l./delete aux entry/,i/
d21: d16
d22: d16+2
d24: d14
d33: d15
d34: d1+f6
;stepping stones:
jl. e31. , e31=k-2
jl. e90. , e90=k-2
jl. e92. , e92=k-2
/,
l./m59:/,
l./stepping stones/,d./n5./,
l./m89:/,l./j6./,l1,i/
j6=k-2
/,l./m115:/,l-1,d./jl.g2./,i/
b. g10,h5 w.
m115: ; check any area process;
rl w2 b5 ; w2:=first addr in nametable;
jl. g0. ;
g1:
g2: rl. w2 h0. ;
al w2 x2+2 ; w2:=next in nametable
g0: sn w2 (b6) ; if upper limit in namtable is exceeded
jl. n0. ; then goto next instruction;
rs. w2 h0. ;
rl w3 x2 ; w3:=addr(next extproc);
rl w1 b1 ; w1:=addr(procfunc process description);
jl. w2 e53. ; test users and reserver;
sn w2 0 ; if no users then
jl. g2. ; goto next extproc;
rs. w2 h1. ; store result of test users and reserver;
al w1 x3 ; NB w1<->w3 g1<->g2
/,l./rlw3b1/,d 2,i/
rl. w0 h1. ; w0:=result of test users and reserver;
so w0 2.0100 ; if not any other users then
/,l./g3:/,l./j5./,l1,i/
h0: 0 ; addr in name table;
h1: 0 ; result af test users and reserver;
/,l./m149:/,l./rlw2x2+0/,d./sow0(x2+a52)/,i/
rl w3 x2 ; w3:=addr(extproc);
jl. w2 e53. ; test users and reserver;
so w2 2.0001 ; if calling process is not user then
jl. j2. ; result 2;
j2=k-2
sz w2 2.1000 ; if other reserver then
/,l./m152:/,l./d13.+4/,r/d13.+4/(d33.)/,
l./m153:/,
l./d16./,r/d16.+2/(d22.)/,
l./d16./,r/d16.+2/(d22.)/,
l./d16./,r/d16./(d21.)/,
l./d16./,r/d16.+2/(d22.)/,
l./d16./,r/d16./(d21.)/,
l./m154:/,
l./d14./,r/d14. /(d24.)/,
l./d2./,r/ d2. /(d20.)/,
l./m155:/,
l./d2./,r/d2./(d20.)/,
l./rl w0 x1+a14/,d./je.j5./,i/
jl. w2 e53. ; test users and reserver;
so w2 2.1 ; if sender is not user then
je. j2. ; enable goto result 2;
sz w2 2.1000 ; if other reserver then
je. j5. ; enable goto result 5
j5=k-2
/,l./g0:/,l./j3./,l1,i/
j3=k-2
/,l./d2./,r/ d2. /(d20.)/,
l./d2./,r/ d2. /(d20.)/,
l./d15./,r/d15./(d33.)/,
l./d14./,r/d14./(d24.)/,
l./d14./,r/d14./(d24.)/,
l./g15:/,l./rl w2 x1+a14/,d./jl.w2g7./,i/
jl. w2 e52. ; exclude intproc as user;
jl. w2 e53. ; test users and reserver;
al w0 0 ;
sz w2 2.10 ; if inproc is reserver then
rs w0 x3+a52 ; exclude inproc as reserver;
sz w2 2.0100 ; if no other users then
jl. w2 g7. ; release extprocess;
/,l./d13./,d,i/
rl. w0 (d24.) ;
sn w2 (0) ;
/,
l./d13./,d,i/
sn w3 (0) ;
/,
l./d14./,r/d14. /(d24.)/,
l./d14./,r/d14. /(d24.)/,
l./g7:/,l./i4./,r/i4. /d21./,l./i4:/,d,
l./m158:/,l./p22:/,l./m11,a52/,r/a52 /2.1000/,
l./p23:/,l./m11,a53/,r/a53 /2.0100/,
l./p24:/,l./m11,a53/,r/a53 /2.0100/,
l./p25:/,l./m11,a52/,r/a52 /2.1000/,
l./p45:/,l./m11,a52/,r/a52 /2.1000/,
l./p37:/,l./m11,a53/,r/a53 /2.0100/,
f
$s1
l./d23=k-2/,l1,i/
jl. d24.
d24=k-2
/,f
$s2
;********************
$catinit
;********************
l./f19:/,l./jl(10)/,i/
al. w3 i2. ; clear core
sh. w3 (i6.) ; if start addr < 200000 then
rl. w3 i6. ; start addr:=200000
rl w1 b12 ; w1:=max addr
al w1 x1-4
al w0 0 ;
i5: al w3 x3+2 ;
rs w0 x3 ;
sh w3 x1 ;
jl. i5. ;
/,l./i3:/,i/
i6: 200000
/,
f
▶EOF◀