|
|
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: 168192 (0x29100)
Types: TextFile
Names: »tjob«
└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ.
└─⟦b2ec5d50f⟧
└─⟦0b92c64d5⟧ »ctb«
└─⟦this⟧
(bjob = set 1 disc
bjob = slang proc.options proc.jobdescr
scope user bjob
print bjob integer words.4 0.6
)
b. w.
p.1
; kll 27.12.72 boss 2, psjob i/o ...1...
s0=0, s1=1
; job creates the following boss2 codepages:
; -pseudojob io page-
; -pseudojob auxiliary page-
; -pseudojob break page-
; -psjobfinis page-
s. h5 w. ; the h-names are used for initialization only
h4, h5 ;
78 06 12, 130 ; version id:
m. boss 2 tjob
; This page is code page for psjob during run of job and it
; contains the central waiting point. This page contains
; actions for all input and output messages sent by the job.
; Page 1 describes the page used by nextline, page 3 is used
; for a virtual buffer and page 4 contains the address of the
; operation.
;
; If a job controlled reader message is received, then psjob
; jumps to a special page.
; Content:
;
; label page name
;
; c0 16 bytes transferred
; c1 4 central wait
; c2 7 primary input
; c3 8 primary output
; c4 9 normal answer
; c5 9 rejected
; c6 9 unintelligeable
; c7 10 job controlled printer
; c8 15 job controlled tape reader
; c9 15 output
; c10 15 input
; c11 16 move buffer part
; c12 17 check addresses
; c13 17 init
; c14 5 end medium prim output
; c15 5 hard error prim input
; c16 5 input exhausted
; c17 5 call mounter
; c18 5 call break
; c19 5 call aux actions
; c20 5 call load
; c21 15 sense
; c22 5 alarm
; c23 15 job controlled card reader
; c24 5 call finis
; c25 5 call private account
; c26 11 conversational input
; c27 12 start job
; c28 12 stop job
; c29 12 banker
; c30 16 move
; c31 13 call process eq
; c32 9 normal answer job opened
; c33 14 normal answer (bytes transferred)
s. b310, g30 w. ;
\f
; kll 27.12.72 boss 2, psjob i/o ...2...
b2., b3., b4., b5., b6., b7., b8., b9., b10.,
b11., b20., b21., b22.
b23., b24., b25., b26., b27., b28., b29., b38.
b39., b40., b41., b42., b43., b44., b45., b46., b47., b48.
b49., b50., b51., b52., b53., b54., b55., b56., b57., b58.
b59., b60., b61., b62., b63., b64., b65., b66., b67., b68.
b69., b70., b71., b72., b73., b74., b75., b76., b77., b78.
b79., b80., b81., b82., b83., b84., b85., b86., b87., b90., b91.
b92., b93., b94., b95., b96., b97., b98., b99., b100.,b101.
b102.,b103.,b104.,b105.,b106.,b107.,b110.,b111.,b112.,b113.
b108.,b109.,b114.,b115.,b116.,b117.,b118.,b119.
b132., b135.,b136., b140.
b142.,b143.,b144.,b145.,b149.,b150.,b151.
b152.,b153.,b154.,b155.,b156.,b157.,b158.,b159.,b160.,b161.
b162.,b163.,b164.,b165.,b166.,b167.,b168.,b169.,b170.,b171.
b172.,b173.,b174.,b175.,b176.,b177.,b178.,b179.,b180.,b181.
b182.,b183.,b184.,b185.,b186.,b187.,b188.,b189.,b190.,b191.
b192.,b193.,b194.,b195.,b197.,b198.,b199.,b200.,b201.
b202.,b203.,b204.,b205.,b206.,b207.,b208.,b209.,b210.,b211.
b212.,b213.,b215.,b216.,b217.,b218.,b219.,b220.
b223.,b224.,b225.,b227.
b228.,b229.,b230.,b233.,b235.,b236.,b237.,b238.
b239.,b240.,b241.,b244.,b245.,b246.,b247.,b248.
b249.,b250.,b251.,b252.,b253.,b254.,b255.,b256.,b257.,b258.,
b259.
b260.,b261.,b262.,b263.,b264.,b265.,b267.,b268.
b269.,b270.,b271.,b272.,b273.,b275. ,b281.
b274.,b276.,b277.,b278.,b279.,b280.,b282.,b283.,b284.,b285.,
b286.,b287.,b288.,b289.,b290.,b291.,b292.
b293.,b294., b296.,b299.,b300.,b301.,b302.,b303.
h1: h2 ; end external list
jl. g12. ; goto init
\f
; kll 4.1.72 boss 2, psjob i/o ...3...
b. c50 w. ;
b0: 0, r.5 ; page addresses
40<12 + 0 ; page ident: psjob io
b244: 1 ; send and wait
b2: 2 ; send and wait fast
b3: 3 ; lock
b4: 4 ; open
b5: 5 ; lock chained
b6: 6 ; open chained
b7: 7 ; get pages
b8: 8 ; page jump
b9: 26 ; current descr
b11: 34 ; w0 call
b119: 67 ; banker que
; answer:
b12: 0 ; status
b13: 0 ; bytes transferred
b14: 0 ; characters
b15: 0 ; position
; input message:
b120: 3<12, 0 ;
b121: 0 ;
; output message:
b16: 5<12 ;
b17: 0 ; first addr, saved return from c36
b18: 0 ; last addr
b19: 0 ; segment
; points:
b20: 442 ; job controlled tape read
b21: 443 ;
b22: 444 ; job controlled card read
b23: 445 ;
b28: 157 ; next line
b29: 158 ;
; job controlled printer:
b24: 383 ; start virt buf
b25: 384 ; top virt buf
b26: 60 ; empty
b27: 61 ; full
\f
; kll 4.4.73 boss 2, psjob i/o ...3a...
; constants:
g18=(:e45-e44:) / 8 ; number of conversational ip
b1: 1 ;
b32: 1<18 ; end medium
b34: -14 ; -record length process eq
b122: 0 ; boss
b123: c.e52-1, -1,r.e52 z.; readers
b124: 0 ; printer
b125: 0 ; terminal
b126: 0 ; card reader
b127: r.(:e19+1:) ; process eq
b130: r.g18+1 ; conversational ip
b128: r.7*(:e19+g18:)+1; names , first, length of buffer -2 for process eq
b36: 999999 ; max line - 1
b222: 1<4 ; mask
b129: -1 ; data bits
b33: c.e52-1, -1,r.e52 z.; reader device numbers
b35: 0, r.4 ; buffer for device name
b37: 0 ; virt aux actions
b232: g7 ; rel rel send job printer operation
b38: 426 ;-2: virt break
b79: 493 ; rel high priority start
b39: 313 ; virt psjob mount
b40: 312 ; virt mount table
b118: 311 ; virt mount action table
b41: 440 ; virt load
b228: 417 ; virt finis
b10: 436 ; virt private account
b289: 472 ; virt kit on
\f
; kll 10.11.71 boss 2, psjob i/o ...4...
b. a20, j20 w. ; page 1 = jobfile page
c1: rl w2 x3+175 ; central wait:
jl. w3 (b5.) ; lock chained(psjob que);
rl. w2 (b9.) ; w2:=desc addr;
rl w0 x2+10 ;
rs w0 x2+14 ; page 4:= page 2;
rs. w1 b0.+8 ; abs page 4:= operation;
bz w2 x1+3 ; w2:= operation index;
se w2 0 ; if message from job then
jl. a1. ; begin
rl w2 x1+4 ; w2:= message addr;
j1: rs w2 x3+184 ; save message addr;
ac w0 (x2+4) ;
al w1 -2 ;
a0: al w1 x1+2 ; w1:= index(receiver);
se. w0 (x1+b122.) ;
jl. a0. ;
al w0 0 ; compute index
sl w1 b123-b122; boss=0
ba. w0 1 ;
sl w1 b124-b122; reader=1
ba. w0 1 ;
sl w1 b125-b122; printer=2
ba. w0 1 ;
sl w1 b126-b122; terminal=3
ba. w0 1 ;
ls w1 -1 ; if index >= process eq. then
sl w1 (:b127-b122:)>1 ;
jl. c31. ; goto call process eq.
rl w1 0 ;
bz w0 x2+8 ;
sn w0 5 ; if output then
jl. c9. ; goto output;
sn w0 3 ; if input then
jl. c10. ; goto input;
sn w0 0 ; if sense then
jl. c21. ; goto sense;
sn w0 7 ; if outinput then
jl. c41. ; goto outinput;
ac w1 (x2+4) ;
sn w1 (66) ;
sz w0 1 ; if uneven or receiver <> boss then
jl. c6. ; goto unintelligible;
ld w1 -25 ; w1:= function(message);
sl w1 a8 ; if w1 > max func then
a11: al w1 a7 ; w1:= print;
al w2 x1+a6 ; operation index:= w2 + message;
a1: ls w2 1 ; end;
rl. w3 b0.+2 ;
j2: rl w0 x3+177 ;
bz. w1 x2+a2. ;
bz. w3 x2+a3. ; w3:= jump(operation index);
rl. w2 (b9.) ; w2:= current descr;
se w1 c20 ; if action <> load then
rs w0 x2+8 ; page 1:= job descr;
jl. x1+b0. ; goto operation index action;
\f
; kll 29.3.72 boss 2, psjob i/o ...5...
; answer not sent, chain not zero, job locked in core.
c14: rl w2 x3+184 ; end medium prim output:
jl. w1 c36. ; adjust primout;
am -1 ;
c16: am -1 ; input exhausted:
c15: al w2 a9 ; hard error prim input:
j3: rs w2 x3+182 ; save cause;
j4: rl w2 x3+176 ;
jl. w3 (b4.) ; open(job in core);
j5: rl w2 x3+182 ;
jl. a1. ; goto action(cause);
b42=c1+1, b43=j1+1, b44=j2+1, b108=j3+1, b109=j4+1, b114=j5+1
b280=c14+1
c17=k-b0 ;
dl. w1 b118. ; call mounter:
rx w0 x2+8 ; page 1:= mount table;
ds w1 x2+14 ; page 3:= job descr; page 4:= action table;
am b39-b289;
c39=k-b0 ; call kit on:
am b289-b38;
c18=k-b0 ; call break :
am b38-b228;
c24=k-b0 ; call finis:
am b228-b10;
c25=k-b0 ; call private account:
am b10-b37;
c19=k-b0 ; call aux actions:
am b37-b41;
a12: rl. w2 b41. ; call load:
jl. (b8.) ; page jump;
c.-1, o48, z. ; (bossfault xref)
c22=k-b0, jd-48 ; alarm:
c20=k-b0 ; test load:
rl. w2 b0.+8 ; (notice: at entry w3 = 0 .....)
rl w2 x2+4 ; w2 := message buffer address;
rl w3 66 ;
dl w1 x3+74 ; w0,w1:=boss max cat base
ba. w0 1 ; w0:=low max base + 1
al w3 0 ;
rs. w3 b35. ;
al. w3 b35. ; w3:=ref zero name (for set cat base)
jd 1<11+72; set catalog base
dl w1 x2+8+10 ; move device name
ds. w1 b35.+2 ; from loadmessage
dl w1 x2+8+14 ; to local name buffer
ds. w1 b35.+6 ;
jd 1<11+4 ; get process description of pseudoprocess
sn. w0 (b126.) ; if pseudocardreader
jl. b101. ; then loadmessage is ok
al. w3 b123.-2; w3:=first of pseudoreaders-2
a10: al w3 x3+2 ; w3:=next pseudoreader
sl. w3 b124. ; if top of table then
jl. a11. ; goto print
se w0 (x3) ; if pseudoprocess does not match
jl. a10. ; then continue
rl w0 x3+b33-b123; w0:=device number of actual reader
sl. w3 b123.+e55<1; if exclusive device then
ac w0 (0) ; device no := - device no
rl. w3 b0.+2 ; w3:= abs ref page 1 (job file page)
b299=k+1
rs w0 x3+518 ; save temporarily the device number on job file page
b101=k+1
al w3 441 ; name is ok: w3 := relative entry of load;
jl. a12. ; call load;
\f
; kll 27.12.72 boss 2, psjob i/o ...6...
; job io state (byte) job file rel ext(179)+1:
; 1<0 job card
; 1<1 job printer
; 1<2 job reader
; 1<3 off line
; 1<4 job printer used
; 1<5 no conversation
; 1<6 job printer accounted
h. a2=k-2, a3=k-1
a4: b90=k+1, c17, 319 ; tape ready
b91=k+1, c18, 351 ; user kill
b92=k+1, c18, 352 ; operator kill
c19, g9 ; answer
b93=k+1, c18, 353 ; time up
c22, 0 ; internal
c22, 0 ; run
c22, 0 ; go
c19, g10 ; submit
c22, 0 ; convert from commandio
b290=k+1, c39, 470 ; kit on
c22, 0 ; card job
c22, 0 ; tre job
c22, 0 ; trf job
c22, 0 ; replace operation
c24, h3 ; harderror swopin from banker
a5=k-2, a6=(:k-a4:)>1 ;
b94=k+1, c24, 354 ; finis
b95=k+1, c18, 355 ; break
c19, g6 ; hard error
b117=k+1, c25, 433 ; private account
b96=k+1, c18, 356 ; replace
c19, g4 ; new job
b97=k+1, c17, 316 ; mount tape
a7=(:k-a5:)>1, c19, g5 ; print
b98=k+1, c17, 315 ; mount ring
b99=k+1, c17, 317 ; suspend
b100=k+1, c17, 318 ; release
c20, 0 ; load
c19, g11 ; change paper
b102=k+1, c18, 357 ; timer
c19, g8 ; convert
b103=k+1, c17, 314 ; mount special
c19, g17 ; mount kit
b255=k+1, c18, 481 ; corelock
b256=k+1, c18, 482 ; coreopen
c19, g21 ;40 no parent message (only from strangers)
b227=k+1, c18, 362 ;42 swop and wait
c19, g21 ;44 mount and position tape
c19, g21 ;46 close tape
c19, g20 ;48 unused
c19, g22 ;50 general device (telex)
a8=(:k-a5:)>1 ;
b106=k+1, c24, 360 ; end medium prim output
b104=k+1, c18, 358 ; input exhausted
b105=k+1, c18, 359 ; hard error prim input
a9=(:k-a4:)>1 w.;
e. ;
\f
; kll 10.11.71 boss 2, psjob i/o ...7...
b. j9 w. ;
; Primary input:
; w2 = mess addr
c2: jl. w1 c12. ; check addresses;
rl w1 x2+10 ;
al w1 x1-2 ; base store rel:= first addr of mess - 2;
rl w0 x2+12 ;
j1: ds w1 x3+187 ; last store rel:= last addr of mess;
j2: rl w2 x3+176 ;
jl. w3 (b3.) ; lock(job in core);
j0: rl w0 x3+189 ;
rl. w2 (b9.) ; page 3:= work page;
rs w0 x2+12 ;
j8: al w0 x3+257 ; abs ref return point;
dl. w3 b29. ;
jl. w1 (b11.) ; w0 call(nextline);
jl. c15. ; hard error prim input
am 0 ; long line
; normal
j3: rl w1 x3+187 ;
j4: rl w2 x3+184 ; w2:= message addr;
ws w1 x2+10 ; w0:= bytes transferred:=
al w0 x1+2 ; base store rel - first addr + 2;
rs. w0 b13. ;
j7: rl w0 x3+190 ;
rs. w0 b15. ; position:= line got;
sh. w0 (b36.) ; if position > max line then
jl. c4. ; begin
j5: rl w1 x3+180 ;
al w1 x1+1 ; exhaust count:= exhaust count + 1;
j6: rs w1 x3+180 ;
sl w1 6 ; if exhaust count > 5 then
jl. c16. ; goto input exhausted;
rl. w0 b32. ;
rs. w0 b12. ; status:= end medium;
jl. c4. ; end;
;
; goto normal answer;
b45 = j1+1, b46 = j2+1, b47 = j3+1, b48 = j4+1, b49 = j5+1
b50 = j6+1, b66=j0+1, b115=j7+1, b116=j8+1
e. ;
\f
; kll 15.10.71 boss 2, psjob i/o ...8...
b. a2, j10 w. ;
; Primary output:
; w2 = message addr
; comment job index rel 192 used as work in c31
c3: al w3 x3+191 ; w3:= record;
jl. w1 c13. ; init;
j1: rl w2 x3+184 ; w2:= message addr;
a1: al w3 x3+191 ; next buffer part: w3:= record;
jl. w1 c11. ; move buffer part;
rl. w3 b0.+2 ; w3:= page 1;
j2: rl w0 x3+191 ;
se w0 0 ; if rest = 0 then
jl. a2. ; begin
rl. w1 b0.+6 ; first addr:= page 3 abs;
al w2 x1+510 ; last addr:= first addr + 510;
ds. w2 b18. ;
j3: rl w1 x3+194 ;
ls w1 -9 ;
rs. w1 b19. ; segment:= first buf byte > 9;
al. w1 b16. ; w1:= message;
j4: al w2 x3+195 ; w2:= name of superbuffer;
jl. w3 (b2.) ; send and wait fast;
sz w0 -1-1<5-1<1; if logical status <> normal answer or not exist then
c.-1, o40, z. ; (bossfault xref)
jd -40 ; alarm;
al w1 512 ;
j6: wa w1 x3+194 ;
j8: sl w1 (x3+196) ; if first buf byte >= length then
jl. c14. ; goto end medium prim output;
j7: rs w1 x3+194 ; first buf byte:= first buf byte + 512;
al w0 512 ;
j5: rs w0 x3+191 ; rest:= 512;
; end;
a2: rl w2 x3+184 ; w2:= message addr;
rl w1 x2+12 ;
j9: sl w1 (x3+192) ; if last addr >= job index then
jl. a1. ; goto next buffer part;
jl. w1 c36. ; adjust primout;
jl. c4. ; goto normal answer;
b51 = c3+1, b52 = j1+1, b53 = a1+1, b54 = j2+1, b55 = j3+1, b56 = j4+1
b57 = j5+1, b58 = j6+1, b59 = j7+1, b60 = j8+1, b61 = a2+1, b62 = j9+1
e. ;
\f
; kll 30.11.71 boss 2, psjob i/o ...9...
b. j7 w. ;
c36: rs. w1 b17. ; adjust primout:
j1: rl w0 x3+192 ;
jl. w1 c0. ; bytes transfered(job index);
j2: rl w0 x3+179 ;
sz w0 1<3 ; if offline then
jl. (b17.) ; goto return;
j3: rl w2 x3+197 ;
jl. w3 (b4.) ; open(terminal full);
rl. w1 b13. ;
ls w1 -1 ; w1:= bytes transfered//2-1;
al w1 x1-1 ;
j5: wa w1 (x3+197) ;
j6: rs w1 (x3+197) ; terminal full:= terminal full + w1;
jl. (b17.) ; return;
c4: rl w2 x3+176 ; normal answer:
jl. w3 (b4.) ; open(job in core);
am -1 ;
c5: am -1 ; rejected:
c6: al w0 3 ; unintelligible:
rl. w1 b13. ;
rl.w2b12.,jd-1
ls w1 -1 ;
wa. w1 b13. ; characters transferred:=
rs. w1 b14. ; bytes transferred// 2 * 3;
rl. w1 (b9.) ;
al w2 0 ;
rs w2 x1+12 ; page 3:= 0;
rl. w1 b0.+8 ; w2:= message(sender table);
rx w2 x1+4 ; message(sender table):= 0;
al. w1 b12. ; w1:= answer;
sl w2 2 ; if message pending then
jd 1<11+22; send answer;
al w0 0 ;
rs. w0 b12. ; status:= 0;
jl. c1. ; goto central wait;
b63 = j1+1, b64 = j2+1, b65 = j3+1, b67 = j5+1, b68 = j6+1
b69 = c4+1
e. ;
\f
; kll 4.1.72 boss 2, psjob i/o ...10...
b. a2, j11 w. ;
; w2 = message addr
c7: rl w0 x3+179 ; job controlled printer:
jd-1
so w0 1<1 ; if not allowed then
jl. c5. ; goto rejected;
sz w0 1<4 ; if not job printer used
jl. a0. ; begin
lo. w0 b222. ; (1<4);
j0: rs w0 x3+179 ; jobprinter used:= true;
rl. w1 (b9.) ;
j7: rl w0 x3+177 ; page 1:= job descr page;
rx w0 x1+8 ; page 3:= job file page;
rs w0 x1+12 ;
dl. w3 b232. ;
jl. (b8.) ; page jump(send job printer operation);
; end return to c7;
a0: ;
j10: rl w2 x3+184 ; w2:=ref message
j1: al w3 x3+181 ; w3:= record;
jl. w1 c13. ; init;
j2: rl w2 x3+184 ; w2:= message addr;
a1: al w3 x3+181 ; next buffer part: w3:= record;
jl. w1 c11. ; move buffer part;
rl. w3 b0.+2 ; w3:= page 1;
j3: rl w0 x3+181 ;
se w0 0 ; if rest = 0 then
jl. a2. ; begin
al w0 512 ;
j4: rs w0 x3+181 ; rest:= 512;
rl. w2 b27. ;
jl. w3 (b4.) ; open(full);
rl. w0 (b26.) ;
sn w0 0 ; if empty then
jl. c37.,c38:; wait for empty;
j5: rl w2 x3+183 ;
al w2 x2+512 ; get:= get + 512;
sl. w2 (b25.) ; if get >= top then
rl. w2 b24. ; get:= start;
j6: rs w2 x3+183 ;
rl. w1 (b9.) ; w1:= desc;
rs w2 x1+12 ; page 3:= get;
rl. w2 b26. ;
jl. w3 (b3.) ; lock(empty);
; end;
a2: rl w2 x3+184 ; w2:= message addr;
rl w0 x2+12 ;
j8: sl w0 (x3+182) ; if last addr >= job index then
jl. a1. ; goto next buffer part;
j9: rl w0 x3+182 ;
jl. w1 c0. ; bytes transfered(job index);
jl. c4. ; goto normal answer;
b71 = c7+1, b72 = j1+1, b73 = j2+1, b74 = a1+1, b75 = j3+1, b76 = j4+1
b77 = j5+1, b78 = j6+1, b80 = a2+1, b81 = j8+1, b82 = j9+1, b233 = j7+1
b223= j0+1, b259=j10+1
e. ;
\f
; boj 30.6.72 boss 2,psjob io ...10.a...
c37: ; bracket:
; wait for empty shares, return to c38
b. a9,j9 w.
j0: rl w0 x3+177 ;
rl. w1 (b9.) ;
rs w0 x1+12 ; page 3:= job descr;
jl. w3 (b7.) ; get pages;
j3: rl w2 x3+176 ;
jl. w3 (b4.) ; open(job in core);
jl. w3 c28. ; stop job;
rl. w1 (b9.) ;
al w0 0 ; page 1:=0;
rs w0 x1+8 ;
rl. w1 b0.+6 ; w1:=ref page 3;
al w0 0 ; for w0:=
a1: ba. w0 1 ; 1 step 1
sl w0 1+i67-i77; until i67-i77
jl. a0. ; do begin
rs w0 x1+2 ;
rl. w2 b26. ;
jl. w3 (b3.) ; lock(empty);
rl. w1 b0.+6 ; w1:=ref page 3;
rl w0 x1+2 ;
jl. a1. ; end;
a0: al w0 i67-i77;
wa. w0 (b26.) ; empty:=empty+i67-i77;
rs. w0 (b26.) ;
rl. w2 b0.+6 ; w2:=ref page 3;
rl. w1 (b9.) ; w1:=ref own desc;
j1: rl w0 x2+338 ;
rs w0 x1+8 ; page1:=job file page;
jl. w3 c27. ; start job;
j2: rl w2 x3+176 ;
jl. w3 (b3.) ; lock(job in core);
jl. c38. ; return;
b282=j0+1, b283=j1+1, b284=j2+1, b285=j3+1
e.
\f
; kll 27.12.72 boss 2, psjob i/o ...11...
b. d10 w. ;
; work variables on descr page:
d0=4 ; answer and result 18 bytes
d1=22 ; rel return from banker 2 bytes
d2=24 ; new message 16 bytes
b. a9, j19 w. ;
c26: rl w0 x3+179 ; conversational input:
sz w0 1<3+1<5; if offline or no conversation then
jl. c5. ; goto rejected;
jl. w1 c12. ; check addr;
rl. w1 (b9.) ;
j1: rl w0 x3+177 ;
rs w0 x1+12 ; page 3:= job descr page;
jl. w3 (b7.) ; get pages;
rl. w1 b0.+6 ; w1:=job descr page
al w0 1 ;
j6: ba w0 x1+375 ; increase no of input lines;
se w0 -2 ; at most 4093 lines;
j7: hs w0 x1+375 ;
jl. w3 c28. ; stop job;
j2: rl w2 x3+306 ;
jl. w3 (b3.) ; lock(input);
j5: rl w2 x3+221 ;
jl. w3 (b3.) ; lock(terminal)
j3: rl w0 x3+299 ;
se w0 1 ; if terminal state = killed then
jl. a1. ; begin
j9: rl w2 x3+221 ;
jl. w3 (b4.) ; open(terminal);
j4: rl w2 x3+306 ;
jl. w3 (b4.) ; open(input);
jl. w3 c27. ; start job;
jl. c1. ; goto wait;
a1: ; end;
jl. w3 c27. ; start job;
al w2 -1 ; index:= -1;
jl. c32. ; goto simulate message;
b235 = c26+1,b236 = j1+1, b237 = j2+1, b238 = j3+1, b239 = j4+1
b240 = j5+1, b254=j9+1
b258 = j6+1, b257=j7+1
e. ;
\f
; kll 27.12.72 boss 2, psjob i/o ...12...
b. a9, j19 w. ;
c35: rs. w3 b13. ; copy answer : save return;
al w3 0 ;
so w0 1<1 ; if not normal answer then
rs w3 x1+2 ; bytes transferred:= 0;
al w2 x1 ; from addr:= message;
rl. w1 b0.+6 ; to addr:= answer and result on descr;
al w1 x1+d0 ;
al w0 18 ; move bytes:= 18;
jl. w3 c30. ; move;
jl. (b13.) ; return
c27: rl. w1 (b9.) ; start job:
rl w1 x1+12 ;
j6: al w1 x1+325 ; w1:= virt dump area spec;
am -1 ; w0:= code:= start job;
c28: al w0 17 ; stop job: w0:= code:= stop job;
c29: ws. w3 b0. ; banker(w0, w1):
rl. w2 b0.+6 ; save rel return;
rs w3 x2+d1 ;
j7: rs w1 x2+349 ; param:= w1;
j8: al w1 x2+335 ; w1:= banker operation;
hs w0 x1+2 ; code:= w0;
rl. w2 b119. ; w2:= banker que;
jl. w3 (b6.) ; open chained;
rl. w2 b0.+6 ;
rl w3 x2+d1 ; return:= rel return + page start;
wa. w3 b0. ;
j9: rl w2 x2+334 ; w2:= answer sem;
jl. (b3.) ; lock(w2);
b249 = j6+1, b250 = j7+1, b251 = j8+1, b252 = j9+1
e.
\f
; kll 29.3.72 boss 2, psjob i/o ...13...
; w1 = index, w2 = message, w3 = jobfile.
c31: ; process eq:
b. a9, j19 w. ;
al w1 x1-(:b127-b122:)>1;
j1: rs w1 x3+192 ; index:= rel process eq nr;
j2: rl w0 x3+177 ;
rl. w1 (b9.) ; page 3:= job descr;
rs w0 x1+12 ;
jl. w3 (b7.) ; get pages;
j3: ac w2 (x3+192) ; w2:= - index;
sh w2 -(:b130-b127:)>1; if ip then
jl. a0. ; ok else
am. (b0.+6) ; w0.w1:= device word shift
j8: dl w1 +340 ; devices - rel of first process eq - index;
ld w1 x2+e17-e18+e24;
sl w0 0 ; if device not reserved then
jl. c5. ; goto rejected;
a0: wm. w2 b34. ;
c32: ; simulate message: (entry from conversational)
j4: rs w2 x3+192 ; index:= index * record length;
j5: rl w2 x3+184 ; w2:= from addr;
al w2 x2+8 ;
am. (b0.+6) ;
al w1 +d2 ; to addr:= new message;
al w0 16 ; move bytes:= 16;
jl. w3 c30. ; move;
rl. w3 b0.+2 ;
j7: rl w2 x3+184 ; w2:= old message;
bz w0 x2+8 ;
so w0 1 ; if message code odd then
jl. a1. ; begin
jl. w1 c12. ; check addresses;
j6: rl w1 x3+192 ; w1:= index;
j9: rl w0 x3+178 ; if conversational then terminal buf
sl w1 0 ; else process buf;
rl. w0 x1+b128.+10;
am. (b0.+6) ; first of new message:=
rs w0 d2+2 ; first of buffer;
rl w0 x2+12 ; diff:= last - first in old message;
ws w0 x2+10 ;
sl w1 0 ; if conversational then
jl. a2. ; begin
sl w0 i3-1 ; if diff > term buf then
al w0 i3-2 ; diff:=term buf length - 2;
jl. a3. ; end
a2: ; else
sl. w0 (x1+b128.+12); if diff > length(index) - 2 then
rl. w0 x1+b128.+12; diff:= length(index) - 2;
a3: rl. w1 b0.+6 ;
wa w0 x1+d2+2 ; last of new message:= first + diff;
rs w0 x1+d2+4 ; end;
a1: ;
b260 = j1+1, b261 = j2+1, b262 = j3+1, b263 = j4+1
b264 = j5+1, b265 = j6+1, b281 = j7+1, b275 = j8+1, b253 = j9+1
e. ;
\f
; kll 27.12.72 boss 2, psjob i/o ...14...
b. a9, j19 w. ;
bz w0 x2+8 ;
so w0 5 ; if message code = output or 7 then
jl. a2. ; begin
j1: rl w2 x3+176 ;
jl. w3 (b3.) ; lock(job in core);
am. (b0.+6) ;
dl w2 +d2+4 ; w1:= to:= first in new message;
ws w2 2 ;
al w0 x2+2 ; w0:= move bytes:= last - first in new + 2;
j2: rl w2 x3+184 ;
rl w2 x2+10 ; w2:= from:= first in old message;
jl. w3 c30. ; move;
rl. w3 b0.+2 ;
j3: rl w2 x3+176 ; open(job in core);
jl. w3 (b4.) ; end;
a2: jl. w3 c28. ; stop job;
j4: rl w1 x3+192 ;
j8: al w2 x3+300 ; if conversational then
sl w1 0 ; w2:=terminal name else
al. w2 x1+b128. ; w2:= name(index);
rl. w1 b0.+6 ;
al w1 x1+d2 ; w1:= message on descr;
jl. w3 (b244.) ; send and wait;
jl. w3 c35. ; copy answer ;
rl. w1 (b9.) ;
rl w0 x1+12 ; page 1 := job descr page;
rs w0 x1+8 ;
rl. w3 b0.+6 ;
al w0 x3+2 ; return on job descr page +0+2;
dl. w3 b79. ;
jl. w1 (b11.) ; w0-call(high priority start);
j5: rl w2 x3+184 ;
bz w0 x2+8 ; if message code = input or 7 then
so w0 3 ;
jl. c34. ; begin
j6: rl w2 x3+176 ;
jl. w3 (b3.) ; lock(job in core);
rl. w2 b0.+6 ;
rl w0 x2+d0+2 ; move bytes:= bytes transferred;
rl w2 x2+d2+2 ; from:= first of new message;
j7: rl w1 x3+184 ;
rl w1 x1+10 ; to:= first of old message;
jl. w3 c30. ; move;
b267 = j1+1, b268 = j2+1, b269 = j3+1, b270 = j4+1
b271 = j5+1, b272 = j6+1, b273 = j7+1
b245 = j8+1
e. ;
\f
; kll 15.5.72 boss 2, psjob i/o ...15...
b. a9, j9 w.
c33: rl. w3 b0.+2 ; answer exactly: w3:= job file;
b279=k+1
rl w2 x3+176 ; open(job in core);
jl. w3 (b4.) ; end;
c34:
j0: rl w1 x3+192 ; if conversational then
sl w1 0 ; begin
jl. a1. ;
j1: rl w2 x3+221 ; open (terminal) ;
jl. w3 (b4.) ;
j2: rl w2 x3+306 ; open(input);
jl. w3 (b4.) ; end;
a1:
rl. w1 (b9.) ; w1:=current corutine;
al w2 0 ;
rs w2 x1+12 ; page 3 descr := 0;
rl. w1 b0.+8 ; w1:=sender table addr;
rx w2 x1+4 ; w2:=message addr; enable next mess;
rl. w3 b0.+6 ; w3:=job descr;
al w1 x3+d0 ; w1:=answer addr;
rl w0 x3+d0+16 ; w0:=result;
jd 1<11+22 ; send answer;
rl. w3 b0.+2 ; w3:= job file;
jl. c1. ; goto central wait;
b246=j0+1, b247=j1+1, b248=j2+1
e.
e. ; end d-names;
\f
; re 75.06.19 boss 2, psjob i/o ...15a...
b. a5, j5 w. ;
c8: jl. w1 c12. ; job controlled tape reader: check addr;
j1: rl w0 x3+179 ; sense:
so w0 1<2 ; if not allowed then
jl. c5. ; goto rejected;
dl. w3 b21. ;
jl. (b8.) ; page jump(job tape);
c23: jl. w1 c12. ; job controlled card reader: check addr;
j2: rl w0 x3+179 ; sense:
so w0 1<0 ; if not allowed then
jl. c5. ; goto rejected;
dl. w3 b23. ;
jl. (b8.) ; page jump(job card);
; boss reader printer terminal card reader
h.
a1: c4-b0, c8-b0+2, c4-b0, c4-b0, c23-b0+2 ; sense
a2: c2-b0, c8-b0, c6-b0, c26-b0, c23-b0 ; input
a3: c3-b0, c6-b0, c7-b0, c26-b0, c6-b0 ; output
a4: c6-b0, c6-b0, c6-b0, c26-b0, c6-b0 ; outinput
w.
; w2 = message addr
c41: am a4-a1 ; outinput:
c21: am a1-a2 ; sense:
c10: am a2-a3 ; input
c9: bz. w1 x1+a3. ; output:
jl. x1+b0. ; goto action(message code, receiver);
b83 = j1+1, b84 = j2+1
e. ;
\f
; kll 10.11.71 boss 2, psjob i/o ...16...
b. a9 w. ;
; entry: w0 = irr, w1 = return, w2 = mess, w3 = record
c11: rs. w1 a6. ; move buffer part:
; all registers undef at exit
rl. w0 a7. ;
rs. w0 b129. ; data bits:= iso data bits;
rl w1 x2+12 ;
ws w1 x3+2 ;
al w0 x1+2 ; w0:= move bytes:=
sl w0 (x3+0) ; min(last addr - job index + 2, rest);
rl w0 x3+0 ;
rl w2 x3+2 ; w2:= from:= job index;
wa w2 0 ; job index:= job index + move bytes;
rx w2 x3+2 ;
rl w1 x3+0 ;
ws w1 0 ; w1:= rest;
rx w1 x3+0 ; rest:= rest - move bytes;
ac w1 x1-512 ;
wa. w1 b0.+6 ; w1:= to:= page 3 + 512 - w1;
rl. w3 a6. ; return:= saved return;
; entry: w0 = move bytes, w1 = to addr, w2 = from, w3 = return.
c30: ds. w3 a6. ; move: save from, return;
so w0 2 ;
a0=k-1 ; displacement constant;
jl. a3. ; if move bytes mod 4 = 2 then
rl w3 x2 ; word(to):= word(from) and
la. w3 b129. ; data bits;
rs w3 x1 ;
a3: bs. w0 a0. ;
wa w1 0 ; to:= to + move bytes - 2;
wa w2 0 ; from:= from + move bytes - 2;
a4: sh. w2 (a5.) ; rep: if from <= saved from then
jl. a8. ; goto return;
dl w0 x2 ;
la. w3 b129. ; double(to):= data bits and
la. w0 b129. ; double(from);
ds w0 x1 ;
al w1 x1-4 ; from:= from - 4;
al w2 x2-4 ; to:= to - 4;
jl. a4. ; goto rep;
a8: al w0 -1 ;
rs. w0 b129. ; data bits:= all;
jl. (a6.) ; return;
a5: 0, a6: 0 ;
a7: 127<16+127<8+127 ; iso data bits;
c0: rs. w1 a6. ; bytes transfered(job index):
lo. w0 b1. ; w2= message addr;
rl w1 x2+10 ;
lo. w1 b1. ; bytes transfered:= round(job index) -
ws w0 2 ;
rs. w0 b13. ; round(first addr);
jl. (a6.) ; goto saved return;
e. ;
\f
; kll 10.11.71 boss 2, psjob i/o ...17...
b. a3, j4 w. ;
; check addresses:
; entry: w0 = irr, w1 = return, w2 = mess addr, w3 = page 1
; exit: w0 = undef, w1 = undef, w2 = mess addr, w3 = page 1
c12: rs. w1 a2. ; save return;
rl w0 x2+10 ;
jl. w1 a1. ; test(first in message);
rl w0 x2+12 ;
jl. w1 a1. ; test(last in message);
sl w0 (x2+10) ; if first <= last then
jl. (a2.) ; goto return else
jl. c6. ; goto unintelligible;
a1: ; proc test(w0):
sz w0 1 ; if w0 odd then
jl. c6. ; goto alarm;
j1: sl w0 (x3+185) ; if w0 < first of job or
j2: sl w0 (x3+186) ; w0 > last of job then
jl. c6. ; goto unintelligible;
jl x1 ; goto return;
a2: 0 ; saved return;
; init:
; entry: w0 = irr, w1 = return, w2 = mess, w3 = record
; exit: w0 = undef, w1 = undef, w2 = undef, w3 = page 1
c13: rs. w1 a3. ; save return;
rl w0 x2+10 ;
rs w0 x3+2 ; job index:= first addr;
rl w0 x3+4 ;
rl. w3 b0.+2 ; w3:= page 1;
rl. w1 (b9.) ; w1:= desc;
rs w0 x1+12 ; page 3:= virt addr;
jl. w1 c12. ; check addresses;
j4: rl w2 x3+176 ;
rl. w3 a3. ; return:= saved return;
jl. (b3.) ; lock(job in core);
a3: 0 ; saved return;
b85 = j1+1, b86 = j2+1, b87 = j4+1
e. ;
g0= c1-b0 ; rel entry
g1= k-b0 ; length
g14=c7-b0 ; rel entry job printer
i.e. ; end of c-names
\f
; kll 4.1.72 boss 2, psjob run init ...18...
b. a9, f9 w. ;
b110: 0 ; base of external table
b111: 12 ; reserve virt
b112: 13 ; output virt
b113: 15 ; end init
b274: 31 ; init alarm;
f0: <:printer:>, f1:0
f2: 0,r.4 ; buffer for reader device names
f3: <:cardreader:>
f4: <:terminal:>, 0
f5: -1
f6: 14
f8: <:<10>e18 and e44 do not match e20 <10><0>:>
f9: <:<10>illegal devicenumber in e18-e19<10><0>:>
g15: h. r.(:e19+g18+1:) w.; process device nr
g16: h. r.(:e19+g18+1:) w.; process device buffer length
g19: h. r.g18*8+1 w. ; process names
g12: rl w3 66 ; init:
rs. w3 b122. ; b122:= boss descr;
rl w1 x3+76 ; b31:=b30:=
al w1 x1+1 ; boss priv base; (low std+1)
rs. w1 b31. ;
rs. w1 b30. ;
dl w1 x3+74 ; w0.w1:=boss max base;
ba. w0 1 ; w0:= w0 + 1;
al. w3 f1. ;
jd 1<11+72; set catalog base(w0, w1);
al. w3 f0. ; w3:= <:printer:>;
jd 1<11+80; create pseudo process;
jd 1<11+4 ;
rs. w0 b124. ; b124:= descr addr(w3);
al. w2 b33.-2 ; w2:=first of reader device numbers -2
a7: al w2 x2+2 ; w2:=next reader device number
sl. w2 b35. ; if top of table then
jl. a8. ; all pseudoreaders created
rl w3 x2 ; w3:=reader device number
ls w3 1 ;
wa w3 74 ; w3:=process description of readerprocess
rl w3 x3 ;
dl w1 x3+4 ; move device name
ds. w1 f2.+2 ; from process description to local buffer
dl w1 x3+8 ;
ds. w1 f2.+6 ;
al. w3 f2. ; w3:=ref device name
jd 1<11+80; create pseudoprocess
jd 1<11+4 ; get process description
rs w0 x2+b123-b33; set descr.addr in pseudoreader table
jl. a7. ; continue
a8:
al. w3 f3. ; w3:= <:card reader:>;
jd 1<11+80; create pseudo process;
jd 1<11+4 ;
rs. w0 b126. ; b126:= descr addr(w3);
al. w3 f4. ; w3:= <:terminal:>;
jd 1<11+80; create pseudo process;
jd 1<11+4 ;
rs. w0 b125. ; b125:= descr addr(w3);
rl. w1 b110. ;
rl w0 x1+19<1 ; reserve base:= current semafore;
rs. w0 f7. ;
al. w0 f8. ;
al w1 e19+g18;
se w1 e21 ; if e19+g18<>e21 then
jl. w3 (b274.) ; init alarm(<:option error:>);
\f
; kll 4.4.72 boss 2, psjob run init ...19...
a1: rl. w3 f5. ; for process:= 0 step 1 until e19+g18-1 do
al w3 x3+1 ; begin
rs. w3 f5. ;
sl w3 e19+g18;
jl. a2. ;
sh w3 e19-1 ; if device then goto a3;
jl. a3. ;
am (66) ;
dl w1 +74 ; w0w1 := boss max base;
al. w3 f1. ;
jd 1<11+72; set catalog base(w0, w1);
rl. w3 f5. ; w3 := index;
al w3 x3-e19 ; comment ip;
ls w3 3 ;
al. w3 x3+g19. ; w3 := ip name(index);
jd 1<11+4 ; w0 := process descr(w3);
rl. w3 f5. ; w3 := index;
se w0 0 ; if w0=0 (process unknown) then
jl. a5. ; begin
bz. w1 x3+g16. ;
rl. w0 f7. ; reserve buffer;
ws w0 2 ;
rs. w0 f7. ;
jl. a1. ; goto next;
a5: ; end;
rl w2 72 ; w2 := name table(w0);
a0: sn w0 (x2) ;
jl. a6. ;
al w2 x2+2 ;
jl. a0. ;
\f
; sm 75.06.03 boss 2, psjob run init ...19a...
a6: am (66) ;
dl w1 +74 ; w0w1 := boss max base;
ba. w0 1 ; w0 := w0 + 1;
al. w3 f1. ;
jd 1<11+72; set catalog base(w0, w1);
rl. w3 f5. ; w3 := index;
al w1 x2 ; w1 := name table address;
jl. a4. ;
a3: bz. w1 x3+g15. ; w1:= device nr(process);
ls w1 1 ;
wa w1 74 ; w1:= name table(w1);
al. w0 f9. ;
sl w1 (76) ; if outside monitor table then
jl. w3 (b274.); init alarm (<:illegal devicenumber in e18-e19:>);
a4: wm. w3 f6. ;
rs. w1 x3+b128.+8; set name table in
rl w2 x1 ; name(process) on io;
dl w1 x2+4 ;
ds. w1 x3+b128.+2; move name(process)
dl w1 x2+8 ; to io;
ds. w1 x3+b128.+6;
am. (f5.) ;
bz. w1 g16. ; w1:= buffer length;
rl. w0 f7. ;
ws w0 2 ; reserve buffer;
rs. w0 f7. ;
rs. w0 x3+b128.+10; set buffer start(process) on io;
al w1 x1-2 ; set buffer length(process) -2 on io;
rs. w1 x3+b128.+12;
al. w3 x3+b128. ; w3:= name(process);
jd 1<11+6 ; initialize process;
jd 1<11+80; create pseudo process;
jd 1<11+4 ;
rl. w1 f5. ;
ls w1 1 ; set pseudo process
rs. w0 x1+b127. ; address on io;
jl. a1. ; end;
a2: bl. w3 b195. ; set displacements
al w3 x3-8 ;
hs. w3 b196. ;
al w3 x3+4 ;
hs. w3 b214. ;
\f
; kll 25.5.73 boss 2, psjob run init ...19b...
al w0 i91 ; psjob aux on disc;
al w1 g2 ; length;
jl. w3 (b111.) ; reserve virt;
rs. w2 b37. ; b37:= virt psjob aux;
rs. w2 b298. ;
al. w0 g3. ; start;
jl. w3 (b112.) ; output virt;
al w0 i92 ; psjob i/o on disc;
al w1 g1 ; length;
jl. w3 (b111.) ; reserve virt;
al. w0 b0. ; start;
jl. w3 (b112.) ; output virt;
rs. w2 b297. ;
jl. w3 (2) ; set externals;
b296: 40 ;
b298: 0 , 323 ; virt psjob aux;
b297: 0 , 320 ; virt psjob io;
g0 , 321 ; rel entry psjob io;
f7: 0 , 19 ; reserve base;
g9 , 350 ; rel answer;
0 , -1000 ; end of externals;
jl. w3 (b113.) ; goto end init;
b. a3 w.
a1: am -2000 ;
al. w1 e51.+2000; w1:=first of option-reader-table (bytes-table)
al. w2 b33. ; w2:=first of local reader-table (word-table)
a2: sl. w2 b33.+e52<1;
jl. a3. ;
bz w0 x1 ; move
rs w0 x2 ; from option-table
al w1 x1+1 ;
al w2 x2+2 ; to local table
jl. a2. ;
a3: al w0 0 ;
al w2 0 ;
jl x3 ; return to slang
jl. a1. ;
j.
e.
e. ;
\f
; kll 4.1.72 boss 2, psjob aux ...20...
b. b25, c25 , d2, f70 w. ;
g3:
b0: 0, r.5 ; page addresses
41<12 + 0 ; page ident: psjob aux
b1: e13 ; semafore length
b2: 32 ; space
b3: 10 ; number system base
b4: 32<16 ;
b5: <:message :>, <:pause <0>:>;
b6: 2<12 + 0<8 + 0 ; lookup message:
b7: 0, r.8 ; work: (used in lookup mess)
b8=b7+2, b9=b8+2, b10=b9+2
b11: 48<8+32 ;
b12: <:printer:>,0;
b13: 7 ; cat key mask
b15: 1<16 ; attention status
b16: 1<6 ; job printer accounted
b17: <:primout:>,0;
b14=k-2 ; constant zero
b18: <:disc:> ;
b19: <:std:>
b20: <:conv:>
b21: 0,r.6 ; local area tp process name
b22: 0 ; nta of device
b88: h.0,c.e23-1,r.e23,z.; first exchangeable disc drive
b89: 0, w. ; top of disc drive table
b30: 0 ; boss private interval
b31: 0 ;
b234: -1-1<4 ; mask
b150: 379 ; paper manipulation semafor
b151: 1 ; send and wait
b152: 25 ; call
b153: 3 ; lock
b154: 4 ; open
b155: 5 ; lock chained
b156: 6 ; open chained
b157: 7 ; get pages
b158: 8 ; page jump
b159: 26 ; current descr
b160: 51 ; request que
b161: 52 ; request free
b162: 60 ; job controlled printer empty
b163: 61 ; - - - full
b164: 63 ; psjob que
b165: 67 ; banker que
b166: 74 ; catalock
b168: 320 ; psjob i/o point
b169: 321 ;
b291: 378 ; rb printer queue
b292: 377 ; rb printer wait
b170: 380 ; paper que
b171: 381 ; printer wait
b172: 382 ; convert operations
b173: 383 ; job controlled printer
b174: 384 ; super buffer start, top
;b175 - b199 ; external displacements
b200: 32 ; prepare access
b201: 33 ; terminate access
b202: 288 ; slice length disc
b216: 400 ; virt,
b217: 404 ; rel ref psjobstart entry:offline
b229: 388 ; ref jobprinter semafor
b230: 320 ; virt ref io
b231: g14 ; rel ref io.c7
b132: 140 ; virt,
b135: 142 ; rel. lookup device;
b302: 141 ; rel lookup and reserve device
d2= 12 ; double work
\f
; kll 4.1.72 boss 2, psjobaux ...21...
; content:
; label page name
; c1 22 new job
; c2 23 print
; c3 23 hard error
; c4 29 start job
; c5 27 convert from job
; c6 29 banker
; c7 29 lock answer
; c8 26 answer
; c9 26a name device
; c10 26 submit
; c11 34 change paper
; c12 30 answer ok
; c13 30 answer not ok
; c14 30 return to io
; c15 25 mount kit
; c17 31 send convert operation
; c18 32 get convert operation
; c19 33 send job printer operation
; c20 33a lookup rb printername
; c24 26b telex link
; definition of f-names
; relative addresses used on job descr page
; in convert from job
;
;
f4 = 4 ;+0 ref head and tail ; rel return in lookup
f6 = 6 ;+2 ; rel rbprintername in lookup
f8 = 8 ;+4 ; name of rb parent process in lookup
f10= 10 ;+6 new name ;+2
f12= 12 ;+8 ;+4
f14= 14 ;+10 ;+6
f16= 16 ;+12 ;+8 name table addr
f18= 18 ;+14 ref tail
; ;+16 docname
f22= 22 ;+18
; ;+20
; ;+22
; ;+24
; ;+26
; ;+28
f34= 34 ;+30 content, entry
f36= 36 ;+32 slices
f38= 38 ;+0 ref old name
f40= 40 ;+2
; ;+4
f44= 44 ;+6
f46= 46 ;+8
f48= 48 ; paper type
f50= 50 ;+0 rb printername
f52= 52 ;+2
f54= 54 ;+0 dev.host description
f56= 56 ;+2 -
f58= 58 ; rb term ident
f60= 60 ; slices to be unclaimed
f62= 62 ; device kind
f66= 66 ; last word of catalog base
\f
; kll 4.1.72 boss 2, psjob aux ...22...
b. a9, j9 w. ; page 1 = job descr page
c1: ; new job:
rl. w2 b0.+8 ;
rl w2 x2+4 ; w2:= message addr;
dl w1 x2+14 ; w0w1:=mess.rbprintername;
sn w0 0 ; if rbprintername = 0 then
al w0 1 ; rbprintername:=1; (local printer)
j0: al w2 x3+349 ; w2:=ref operation;
al w2 x2+18 ; w2:=ref op.rbprintername;
ds w1 x2+2 ; set printername;
b136=k+1
dl w1 x3+424 ; w0w1:=host description
ds w1 x2+6 ; set host description
se w0 0 ; if local then
jl. a7. ; begin
dl w1 x2+2 ;
sl w0 2 ; if printername = text then
jl. a7. ; goto printer named;
a6: ld w1 -100 ;
ds w1 x2+2 ; printername:=0;
ds w1 x2+6 ; clear host description
jl. a4. ; end else
a7: dl w1 x2+2 ; begin printer named:
sn. w0 (b19.) ; if printername=<:std:>
se w1 0 ;
jl. 4 ; then
jl. a6. ; printer:=host ident:=0;
ds w1 x3+r1+2 ; set printername in lookup mess.;
ld w1 -100 ;
ds w1 x3+r1+6 ;
j6: rl w0 x3+523 ; set abs ref message area
rs w0 x3+r0 ;
j7: dl w1 x3+529 ; set catalog base = project base
ds w1 x3+r6+2 ;
dl w1 x2+6 ; set dev.host description
ds w1 x3+r2+2 ;
al w1 14 ;
rs w1 x3+r4 ; set mode.kind
rl. w2 b132. ;
rl. w3 b135. ;
jl. w1 (b152.) ; call(lookup device);
jl. a3. ;+2 error return;
rl w0 x3+r104 ;+4 w0:=rckind;
sn w0 14 ; if kind=printer then
jl. a4. ; ok else
am 21-20 ; device not printer
a1: al w0 20 ; device unknown
jl. c13. ; goto answer not ok;
a3:
\f
; lkn 76.10.19 boss 2, psjob aux ...22a...
b180=k+1
al w2 x3+349 ; w2:=ref operation
rl w0 x2+18 ; w0:=first of printer name
se w0 1 ; if named printer then
jl. a1. ; unknown
ld w1 -100 ;
ds w1 x2+20 ; set printername=0;
a4: ; end;
al w0 10 ;
ls w0 12 ;
j1: al w1 x3+332 ; w1:= psjob operation;
rs w0 x1+2 ; code:= get psjob;
rl. w2 b165. ;
jl. w3 (b156.) ; open chained(banker que);
jl. w1 c7. ; lock answer;
j3: al w1 x3+349 ; w1:= psjob operation (d14+4);
j4: rl w3 x3+342 ; w3:= job process addr;
dl w0 x3+78 ;
ds w0 x1+16 ; op(+14, +16):= standard interval for job;
rl. w2 b0.+8 ;
rl w2 x2+4 ; w2:= message addr;
dl w0 x2+18 ;
ds w0 x1+8 ; move name in message to
dl w0 x2+22 ; operation + 6, +8, +10, +12.
ds w0 x1+12 ;
al 1 ;
bl w2 x1-7 ;
sn w2 0 ; if no psjobidle then
jl. c13. ; goto answer not ok;
al w0 6 ; code:= internal job;
rs w0 x1+2 ;
rl w0 x1-6 ;
rs w0 x1+4 ; op + 4:= answer sem;
al w2 x2-2 ;
wm. w2 b1. ;
wa. w2 b164. ; w2:= psjob que+ (psjob nr-2) * sem length;
rl. w3 b0.+2 ; w3:=ref page1
j2: al w1 x3+349 ; w1:=psjob operation;
jl. w3 (b156.) ; open chained(w1, w2);
jl. w1 c7. ; lock answer;
j5: al w1 x3+349 ; w1:= ref operation;
bl w0 x1+2 ;
jl. c13. ; goto answer not ok;
b175 = j1+1, b176 = j2+1, b177 = j3+1, b178 = j4+1, b70 = j5+1
b179 = j0+1, b140=j6+1, b142=j7+1
e. ;
\f
; kll 30.11.71 boss 2, psjob aux ...23...
b. a20, j9 w. ; page 1 = job descr page
c2: ; print: hard error:
c3: rl. w2 b161. ;
jl. w3 (b155.) ; lock chained(request free);
rs. w1 b0.+6 ;
rl. w1 (b159.) ; w1:= current descr;
rl w0 x1+10 ;
rs w0 x1+12 ; page 3:= page 2;
rl. w2 b0.+8 ;
rl w2 x2+4 ; w2:= message addr;
rl w1 x2+8 ;
so w1 1 ; if wait then
jl. a1. ; begin
j4: rs w0 x3+343 ; saved virt request;
al w0 17 ;
jl. w1 c6. ; banker(stop job); lock answer;
am 1<3-1 ; end;
a1: al w3 3 ; if wait then code:= insert with bell
al w0 14 ; else code:= print line;
se w3 3 ;
am +6 ;
al. w2 b5. ;
rl. w1 b0.+6 ; w1:= operation;
ds w0 x1+4 ; length:= 14;
dl w0 x2+2 ;
ds w0 x1+8 ;
rl w0 x2+4 ; move <:message:> or <:pause:>;
rs w0 x1+10 ;
rl. w2 b0.+8 ;
rl w2 x2+4 ; w2:= message addr;
al w0 -12 ;
rs. w0 b8. ; bit:= -12;
a2: rl. w3 b8. ; next bit:
al w3 x3+1 ; bit:= bit + 1;
rs. w3 b8. ;
sl w3 -4 ; if bit > -5 then
jl. a3. ; goto send request;
rl w0 x2+8 ;
ls w0 x3 ; if operation pattern shift bit
sz w0 1 ; extract 1 = 1 then
jl. a4. ; goto integer
jl. a6. ; else goto text;
c. 6+24+6*7-e10-1
m. e10 must at least be 72
z.
\f
; kll 30.11.71 boss 2, psjob aux ...24...
a3: rl. w2 b0.+2 ; send request:
j1: dl w0 x2+329 ;
ds w0 x1+14 ;
j2: dl w0 x2+330 ; move job name and space;
lo. w0 b2. ;
ds w0 x1+18 ;
rl. w2 b160. ;
jl. w3 (b156.) ; open chained(request que, w1);
rl. w2 b0.+8 ;
rl w2 x2+4 ;
rl w0 x2+8 ;
sz w0 1 ; if wait then
jl. c14. ; goto return to io else
jl. c12. ; goto answer ok;
a4: ls w3 1 ; integer:
am x3 ;
rl w0 x2+32 ;
jl. w1 a8. ; ciffer 2;
lo. w3 b11. ;
rs w3 x1+10 ;
jl. w1 a7. ; ciffer 3;
lo w3 x1+10 ;
rs w3 x1+10 ;
jl. w1 a9. ; ciffer 1;
rs w3 x1+8 ;
jl. w1 a8. ; ciffer 2;
lo w3 x1+8 ;
rs w3 x1+8 ;
jl. w1 a7. ; ciffer 3;
lo w3 x1+8 ;
rs w3 x1+8 ;
jl. w1 a9. ; ciffer 1;
rs w3 x1+6 ;
jl. w1 a8. ; ciffer 2;
lo w3 x1+6 ;
rs w3 x1+6 ;
jl. w1 a7. ; ciffer 3;
lo. w3 b4. ;
lo w3 x1+6 ;
rs w3 x1+6 ; length:= length + 4;
am 4 ;
a5: al w0 2 ; add length:
rl. w1 b0.+6 ; length:=length+2;
wa w0 x1+4 ;
rs w0 x1+4 ;
jl. a2. ; goto next bit;
\f
; kll 4.1.72 boss 2, psjob aux ...25...
a6: ls w3 1 ; text:
am x3 ;
rl w0 x2+32 ; move textword (bit);
am (x1+4) ;
rs w0 x1+6 ;
jl. a5. ; goto add length;
a7: am 8 ; ciffer 3:
a8: am 8 ; ciffer 2:
a9: al w3 0 ; ciffer 1:
rs. w3 b9. ;
rs. w1 b10. ; save return;
al w3 0 ; w3:= w0 mod 10;
wd. w0 b3. ; w0:= w0/10;
sh w0 0 ; if w0 <> 0 or
se w3 0 ; w3 <> 0 then
al w3 x3+48 ; w3:= w3 + text bits;
ls. w3 (b9.) ; w3:= w3 shift ciffer;
rl. w1 b0.+6 ;
wa w1 x1+4 ; w1:= operation + length;
jl. (b10.) ; goto saved return;
b276=j1+1, b277=j2+1, b278=j4+1
e. ;
\f
; 6.2.75 boss 2, psjob aux ...25a...
b. a10, j5 w.
a9=e17 - (:e22-e24:) - e23 ; no of device nos in device list following disc drives
c15: rl. w2 b0.+8 ; mount kit:
rl w2 x2+4 ; w2 := message addr;
j0: al w3 x3+403 ; w3 := addr of first privat kit;
a0: al w3 x3+14 ; rep: next kit;
dl w1 x3-12 ;
sn w0 0 ; if end private kit table then
jl. a1. ; goto not found;
sn w0 (x2+16) ; if kitname <> privat kit name then
se w1 (x2+18) ; goto rep;
jl. a0. ;
dl w1 x3-8 ;
sn w0 (x2+20) ;
se w1 (x2+22) ;
jl. a0. ;
rl w1 x2+14 ; w1:=device no;
sl w1 0 ; if device no < 0
sl w1 2047 ; or device no > byte size
jl. a3. ; then error;
hs. w1 b89. ;
al w2 -e23-1 ;
a10: al w2 x2+1 ; search device no in table
bl. w0 x2+b89. ;
se w0 x1 ;
jl. a10. ;
sn w2 0 ;
jl. a3. ;
al w0 1 ;
al w1 0 ;
ld w1 x2-a9+23 ; w0w1:=device bit to test;
rl. w3 b0.+2 ;
j1: al w3 x3+340 ; w0w1:=device bit and device word;
la w0 x3-2 ;
la w1 x3 ;
lo w0 2 ; w0:=w0+w1;
sn w0 0 ; if no bit survived then
jl. a2. ; goto device not reserved;
jl. c2. ; goto print;
a3: am 3-2 ; device unknown:
a2: am 2-1 ; device not reserved:
a1: al w0 1 ; not found:
jl. c13. ; goto answer not ok;
b288=j0+1, b241 = j1+1
e.
\f
; kll 30.11.71 boss 2, psjob aux ...26...
b. a10,j25,w. ;
c8: al w1 x3+332 ; answer:
al w0 0 ; w0:= virt request;
j3: rx w0 x3+343 ; virt request:= 0;
rs w0 x1+6 ;
se w0 0 ; if request line pending then
jl. a4. ; goto remove request;
j10: dl w1 x3+376 ; w1:=actual waiting time
sn w1 0 ; if w1=0 then
jl. a1. ; goto answer and start job;
wa w0 2 ; add actual waiting time
al w1 0 ; to summa waiting time
j11: ds w1 x3+376 ; and clear actual waiting time
al w0 30 ;
al w2 -1 ; banker.set waiting time.infinity
jl. w1 c6. ;
jl. a1. ; goto answer and start job
a4: al w0 1 ; remove request
rs w0 x1+2 ;
rl. w2 b160. ;
jl. w3 (b156.) ; open chained(request que, remove line);
jl. w1 c7. ; lock answer;
a1: ; answer and start job
j1: rl w1 x3+341 ;
al w2 0 ; w2:= message(sender table);
rx w2 x1+8 ; message(sender table):= 0;
rl. w1 b0.+8 ;
al w1 x1+4 ; w1:= answer addr;
al w0 1 ;
sl w2 2 ; if message addr<>0 then
jd 1<11+22; send answer;
jl. w1 c4. ; banker(start job); lock answer;
jl. a0. ; goto skip jobstart;
\f
; sm 75.07.11 boss 2, psjob aux ...26a...
c9: al w0 1 ;
jl. c13. ;
; reestablish old page situation:
; page 1 = job descr page (unchanged)
; page 2 free (unchanged)
; page 3 free
; page 4 = operation
;
c16: rl. w1 (b159.) ; w1:=current coruno description;
rl w0 x1+12 ;
rs w0 x1+14 ; page 4:=operation;
rl. w0 b0.+6 ;
rs. w0 b0.+8 ;
al w0 0 ;
rs w0 x1+12 ; clear page 3;
rs. w0 b0.+6 ;
jl x2 ; return;
; establish page situation before call of rb-procedures.
; page3:= page4 (operation)
; page4:= page1 (job descr page)
c22: rl. w1 (b159.) ; w1:= current coroutine
rl w0 x1+14 ;
rs w0 x1+12 ; page3:=page4
rl w0 x1+8 ;
rs w0 x1+14 ; page4:=page1
jl x2 ; return
c10: a0: ; dummy submit: skip jobstart:
rl. w2 b0.+8 ;
al w0 0 ; opcode:=0;
hs w0 x2+2 ;
jl. c14. ; goto io;
\f
;bbj 77 06 21 psjob aux ...26b...
; creation of a t e l e x link.
; the parentmessage (No 50) requests the creation of a link to a telex
; device specified.
; this is performed the following way :
;
; 0) check that link call is not exceeded
;
; 1) lookup (and reserve) device is called with the parameters
; specified in tprocs.
;
; 2) the child (the job which has sent the parentmessage) is
; included as a user of the device (telex).
;
; 3) the answer is sent (included is the peripheral process
; name).
;
; in case of errors, boss returns an answer only containing the
; error result.
; at entry page1=job desc page
; page3=var page
; page4=operation
c24:
j14: bl w2 x3+527 ; w2:=number of allowed links
jd-1
sh w2 0 ; if w2 <= 0 then
jl. a9. ; error return(exceeded link)
rl. w2 b0.+8 ; w2:=ref operation
rl w2 x2+4 ; w2:= ref message
j12: rl w0 x3+523 ; w0:=abs add of dataarea
rs w0 x3+r0 ;
dl w1 x2+8+4 ; move name
jd-1
ds w1 x3+r1+2 ; (special for telex)
dl w1 x2+8+8 ;
jd-1
ds w1 x3+r1+6 ;
bz w0 x2+8+11 ; w0:=hostno
rl w1 x2+8+12 ; w1:=hostid
jd-1
sn w0 0 ; if w0<> 0 and
se w1 0 ; w1<> 0
jl. a7. ; then use as specified in mess
j13: dl w1 x3+424 ; else use current
a7: ds w1 x3+r2+2 ;
jd-1
al w0 0 ;
rs w0 x3+r5 ; timeout:=0
al w0 36 ;
rs w0 x3+r4 ; mode,kind:= 0<12 +36
j15: dl w2 x3+421 ; w1,w2:= job std interval
ds w2 x3+r6+2 ;
jl. w2 c22. ; establish page situation before call
rl. w2 b132. ; w2:= virt
rl. w3 b302. ; w3:= rel
jl. w1 (b152.) ; call(lookup (and reserve))
jl. a5. ;+2 error return
jl. w2 c16. ;+4 establish old page situation
; the child process must be included as user of the device
; to be permitted to use it.
rl w1 x3+r101 ; w1:=nta of device
rs. w1 b22. ; store nta in local variable
ws w1 74 ; w1:= nta - start of nta (devices)
ls w1 -1 ; w1 := w1 div 2 ( the device number)
j16: rl w2 x3+342 ; w3:= proc desc of job
dl w0 x2+2+2 ;
ds. w0 b21.+2 ; store name of process
jd-1
dl w0 x2+2+6 ;
ds. w0 b21.+6 ; in local variables
jd-1
al. w3 b21. ; w3:= ref to name of job process
jd 1<11+12 ; include user
jd-1
se w0 0 ; if w0 <> 0 then
jl. a8. ; error return (child not included)
rl. w2 (b22.) ; w2:=proc desc of device
dl w1 x2+2+2 ;
ds. w1 b7.+4 ; store name of device
jd-1
dl w1 x2+2+6 ;
ds. w1 b7.+8 ; in answer message
jd-1
al. w3 b7.+2 ; w3:= ref to name of device
jd 1<11+10 ; release boss as reserver of device
jl. c12. ; goto normal answer
; error return
a5: jl. w2 c16. ; establish old page situation
rl w0 x3+r100 ; w0:= error value
jd-1
se w0 1 ; if w0 <> 1 then
jl. c13. ; goto answer not ok
rl w1 x3+r100+2 ; w1:= status bits
jd-1
ls w1 16 ;
lo w0 2 ;
jl. c13. ; goto answer not ok
jd-1
jl. c13. ;
a9: am 10-9 ; link exceeded (telex not allowed)
a8: al w0 9 ; child cannot be included as user
jl. c13. ; goto answer not ok
b183=c8+1, b184=j1+1, b199=j3+1
b224=j10+1, b225=j11+1,
b218=j12+1, b219=j13+1, b300=j14+1, b301=j15+1, b303=j16+1
e. ; end a-names,j-names
\f
; kll 4.1.72 boss 2, psjobaux ...27...
; convert from job
b. j20, a20 w. ;
c5: rl. w2 b0.+8 ; w2:= ref op;
rl w2 x2+4 ; w2:= ref message;
dl w1 x2+8+10 ; move name;
ds w1 x3+f40 ;
sn. w0 (b17.) ;
se. w1 (b17.+2);
jl. a6. ; if name = primout
dl w1 x2+8+14 ; then
sn. w0 (b17.+4);
se. w1 (b17.+6);
jl. a6. ; begin
al w0 5 ; w0:= cause:= file in use;
jl. c13. ; goto answer;
a6: dl w1 x2+8+14 ; end;
ds w1 x3+f44 ;
rl w0 x2+8+6 ; move paper type;
rs w0 x3+f48 ;
b215=k+1
rl w0 x3+423 ; w0:=host ident;
se w0 0 ; if local terminal then
jl. a17. ;
dl w1 x2+8+4 ; w0w1:=printername;
sn. w0 (b20.) ; if printer<>conv
se. w1 (b20.+2);
jl. a17. ; then goto printer named
jl. a18. ; else goto stdprinter
c.-1 ; before release 15 local jobs could only user local printers
sn. w0 (b19.) ; printer<>std
se w1 0 ;
jl. a16. ; then device unknown
jl. a18. ; ok;
z.
a17: dl w1 x2+8+4 ; w0w1:=printername;
sn. w0 (b19.) ; if printername=<:std:> then
se w1 0 ;
jl. a7. ;
a18: ld w1 -100 ;
ds w1 x3+f52 ; printername:=0;
ds w1 x3+f56 ; host ident:=0;
al w0 14 ;
rs w0 x3+f62 ; sett kind = printer
jl. a13. ;
a7: sn. w0 (b20.) ; else if printername=<:conv:>
se. w1 (b20.+2);
jl. 4 ; then
al w0 1 ; printername:=1 (= some printer);
ds w1 x3+f52 ; set printername;
ds w1 x3+r1+2 ; set printername in search and lookup message;
ld w1 -100 ;
ds w1 x3+r1+6 ;
j1: rl w0 x3+523 ; set abs ref message area
rs w0 x3+r0 ;
j6: dl w1 x3+529 ; set catalog base = project base
ds w1 x3+r6+2 ;
ds w1 x3+f66 ;
al w0 -1 ;
rs w0 x3+r4 ; mode,kind:=dummy
j14: dl w1 x3+424 ; set dev.host description
ds w1 x3+r2+2 ;
ds w1 x3+f56 ;
jl. w2 c22. ; establish page situation
dl. w3 b135. ;
jl. w1 (b152.) ; call (lookup device);
jl. a14. ;+2 error return;
jl. w2 c16. ;+4 reestablish old page situation;
rl w0 x3+r104 ;
rs w0 x3+f62 ; set device kind
sn w0 14 ; if device kind <> printer
jl. a13. ;
sn w0 12 ; and device kind <> punch
jl. a13. ;
jl. a12. ; then goto device kind illegal
a14: jl. w2 c16. ; reestablish old page situation;
rl w0 x3+f52-2 ; if default printer then
sn w0 1 ; take std printer
jl. a18. ; else
a16: am 20-19 ; device unknown;
a8: am 19-21 ; attention status;
a12: al w0 21 ; device not printer;
jd-1
jl. c13. ;
a13:
j2: rl w2 x3+342 ; w2:= ref proc descr (job);
dl w1 x2+78 ; w0w1:= standard interval.job;
al w2 x3+f38 ; w2:= ref file name;
jl. w3 (b200.) ; prepare access;
am ;+2 no check;
al w1 x3+f4 ; w1:= ref work;
al w3 x3+f38 ; w3:= ref name;
jd 1<11+76; lookup head and tail;
se w0 0 ; if error
jl. a2. ; then reject;
\f
; re 31.7.74 boss 2 , psjob aux ...27a...
rl. w3 b0.+2 ; w3:= ref page 1;
rl w1 x3+f18 ; w1:= length
sh w1 0 ; if entry is not an area then
jl. a10. ; reject;
bz w0 x3+f34 ; if content not text then
se w0 0 ;
jl. a9. ; goto file not text;
wd. w1 b202. ; // slice length
se w0 0 ; round up (nb: new monitor)
al w1 x1+1 ;
rs w1 x3+f36 ; slices:= w1;
al w0 0 ;
rs w0 x3+f60 ; unclaim 0 slices;
j0: bl w0 x3+347 ;
sh w0 0 ;
jl. a1. ; if cbufs<=0 then reject
rl w0 x3+f4 ; w0:= cat key;
la. w0 b13. ;
sn w0 2 ; if login then
jl. a3. ; goto reject;
sn w0 3 ; if permanent then
jl. a0. ; skip the kidnapping;
rs w1 x3+f60 ; unclaim w1 slices;
dl w1 x3+f22 ; if docname
sn. w0 (b18.) ; <> <:disc:>
se. w1 (b18.+2);
jl. a4. ; then claims exceeded;
j3: bl w0 x3+480 ; w0:= rest convert slices
ws w0 x3+f36 ; - area length;
j10: bl w1 x3+479 ; w1:= convert entries;;
sl w0 0 ; if w0 < 0
sh w1 0 ; or w1 < 1 then
jl. a4. ; claims exceeded;
al w1 x1-1 ; save decreased
ds w1 x3+f8 ; convert slices,entries
al w3 x3+f10 ; ref new name
jd 1<11+68; generate name;
al w1 x3 ; w1 := new name;
al w3 x3+f38-f10; w3 := old name;
jd 1<11+46; rename entry;
se w0 0 ; if result <> ok then
jl. a5. ; goto file in use;
rl. w3 b0.+2 ;
dl w1 x3+f8 ; get saved convert slices,entries;
j4: hs w0 x3+480 ; store convert slices;
j5: hs w1 x3+479 ; store convert entries;
dl. w1 b31. ; w0w1 := boss private interval;
ds w1 x3+f8 ; save for >get convert operation<
al w3 x3+f10 ; w3 := new name;
jd 1<11+74; set entry interval;
\f
; re 31.7.74 boss 2 , psjob aux ...28...
rl. w2 b166. ;
jl. w3 (b153.) ; lock(catalock);
dl. w1 b31. ; w0w1 := boss private interval;
al. w3 b14. ; w3:=ref zeroes;
jd 1<11+72; set catbase;
rl. w3 b0.+2 ;
al w1 x3+f18 ; w1 := ref tail;
j11: rl w0 x3+346 ;
rs w0 x1+10 ; name table address(tail) := user id;
rl w0 x3+f48 ;
hs w0 x1+17 ; entry point := paper type;
al w3 x3+f10 ; w3 := new name;
jd 1<11+44; change entry;
al w1 2 ;
jd 1<11+50; permanent entry(file, key=2);
rl. w2 b166. ;
jl. w3 (b154.) ; open(catalock);
rl w1 x3+f46 ; move name table address from oldname to newname;
rs w1 x3+f18 ;
am f10-f38; (terminate with new name);
a0: al w2 x3+f38 ; end kidnapping;
jl. w3 (b201.) ; terminate access;
j7: bl w1 x3+347 ; d111
al w1 x1-1 ; rest converts:=
j8: hs w1 x3+347 ; rest converts-1;
rl w2 x3+f60 ;
jl. w1 c18. ; get convert op;
dl w0 x2+f40 ;
ds w0 x1+34 ; op.file name:= old name;
dl w0 x2+f44 ;
ds w0 x1+38 ;
jl. w3 c17. ; send convert op;
jl. c12. ; goto answer ok;
a9: am 7-6 ; 7:file is no text file
a10: am 6-5 ; 6:file is not an area
a5: am 1 ; 5:file in use:
a4: am 1 ; 4:claims exceeded:
a3: am 1 ; 3:login:
a2: am 1 ; 2:file does not exist:
a1: al w0 1 ; 1:cbufs exceeded:
rl. w3 b0.+2 ;
rs w0 x3+4 ;
al w2 x3+f38 ;
jl. w3 (b201.) ; terminate access
rl w0 x3+4 ;
jl. c13. ; answer;
b203 = j0+1, b145 = j1+1, b143 = j6+1, b204 = j2+1, b206 = j3+1
b207 = j4+1, b208 = j5+1, b210 = j7+1
b211 = j8+1, b213 = j10+1,b167 = j11+1
b144 = j14+1
e. ; end j-names, a-names
\f
; boj 22.3.72 boss 2, psjobaux ...29...
b. j5 w. ;
c4:
; procedure start job:
; call: page 1 = jobdescr, w1 = ref return, w3 = ref page 1.
rl. w2 (b159.) ;
rl w2 x2+8 ;
j0: al w2 x2+325 ;
al w0 16 ; continue;
c6:
; procedure banker:
; call: page 1 = jobdescr, w0 = op.code, w1 = ref return,
; w2 = op.4, w3 = ref page 1.
j1: hs w0 x3+348 ;
ws. w1 b0. ;
rs w1 x3 ;
j2: rs w2 x3+349 ;
j3: al w1 x3+335 ;
rl. w2 b165. ;
jl. w3 (b156.) ; opch(banker que, banker op;
rl w1 x3 ;
al. w1 x1+b0. ; continue;
c7:
; procedure lock answer:
; call: page 1 = job descr, w1 = abs ref return.
j4: rl w2 x3+334 ;
al w3 x1 ;
jl. (b153.) ; lock(answer); return;
b185 = j0+1, b205 = j1+1, b181 = j2+1, b107 = j3+1, b182 = j4+1
e. ;
\f
; boj 24.3.72 boss 2, psjobaux ...30...
b. j1 w.
c12:
; answer ok:
; call: page 1 = job descr page, page 4 = operation.
al w0 0 ; status:= 0;
c13:
; answer not ok:
; call: page 1 = job descr page, page 4 = operation, w0 = status.
rs. w0 b7. ;
rl. w1 b0.+8 ; w2:= ref message;
al w2 0 ; ref message:= 0;
rx w2 x1+4 ;
al w0 1 ; result:= normal answer;
al. w1 b7. ;
jd 1<11+22; send answer;
; continue
c14:
; return to io:
; page 1 = job descr page.
rl. w2 (b159.) ;
am. (b0.+2) ;
j0: rl w0 338 ;
rs w0 x2+8 ; page 1:= job file page;
ld w1 -100 ; page 3:= page 4:= 0;
ds w1 x2+14 ;
dl. w3 b169. ;
jl. (b158.) ; page jump(io);
b197 = j0+1
e. ;
\f
; boj 22.3.72 boss 2, psjobaux ...31...
b. a10, j4 w. ;
c17:
; procedure send convert operation:
; call: w3 = abs ref return, page 1 = job descr page,
; page 2 = convert operation.
; return: w3 = abs ref page 1, page 1 = job descr page,
; page 1 rel 4= undefined.
rl. w1 b0.+4 ; w1:= ref convert op;
rl. w2 b0.+2 ; w2:= ref job descr page;
ws. w3 b0. ;
rs w3 x2+4 ; save rel ref return;
j0: rl w0 x2+346 ;
rs w0 x1+30 ; op.user id in usercat;
j1: rl w0 x2+326 ;
rs w0 x1+20 ; op.project nr;
j2: dl w0 x2+0 ;
ds w0 x1+24 ; op.username;
j3: dl w0 x2+0 ;
ds w0 x1+28 ;
al w0 0 ;
rs w0 x1+42 ; op.release,op.segm rel:=0;
rl. w2 b150. ; lock (paper manipulation);
jl. w3 (b153.) ;
rl. w1 b0.+4 ; w1 := convert operation;
rl w2 x1+54 ; if rb convert then
c. i190-1
; if any printername in the convertbuffer then put it into the remote que
sn w2 0 ; begin
jl. a4. ;
rl. w2 b291. ;
jl. w3 (b156.) ; opench(rb printer queue);
rl. w2 b292. ;
jl. w3 (b154.) ; open(rb printer wait);
jl. a5. ;
z.
a4: ; end else begin
bz w0 x1+5 ; ref sem:=
sl w0 i78-1 ; (if paper >= no of papers
al w0 i78-1 ; then extreme special else paper)
wm. w0 b1. ; * sem length
wa. w0 b170. ; + ref printer que;
rl w2 0 ;
jl. w3 (b156.) ; opch(sem, op);
rl. w2 b171. ;
jl. w3 (b154.) ; open(printer wait);
a5: ; end;
rl. w2 b150. ; open (paper manipulation);
jl. w3 (b154.) ;
rl w1 x3+4 ;
jl. x1+b0. ; goto return;
b194 = j0+1, b195 = j1+1, b196 = j2+1, b214 = j3+1
; nota bene: j2 and j3 are explicitely set in initialization
e. ;
\f
; boj 22.3.72 boss 2, psjobaux ...32...
c18:
; procedure get convert operation:
; call: w1 = abs ref return, w2 = length(slices), w3 = abs ref page 1,
; page 1 = job descr page.
; return: page 1 = unch, page 2 = convert op, w1 = ref page 2,
; w2 = ref page 1, w3 = undef.
b.a9,j9 w.
ws. w1 b0. ;
rs w1 x3+4 ; save rel ref return;
al w0 21 ;
jl. w1 c6. ; banker(unclaim convert);
rl. w2 b172. ;
jl. w3 (b155.) ; lock(convert free);
rl w0 x3+f62 ;
rs w0 x1+62 ; op.device kind
rl. w2 b0.+2 ;
dl w0 x2+f66 ;
ds w0 x1+66 ; op.std catalog base
dl w0 x2+f56 ;
ds w0 x1+50 ; op.parent rb;
dl w0 x2+f52 ;
ds w0 x1+56 ; op.rbprintername;
rl w0 x2+f58 ;
rs w0 x1+52 ; op.rb term ident;
ld w0 -100 ;
ds w0 x1+46 ; op.line count,op.page count:=0;
rs w0 x1+40 ; op.segm no:= 0;
rs w0 x1+2 ; op.type:= convert file;
rl w0 x2+f36 ;
hs w0 x1+4 ; op.length;
rl w0 x2+f48 ;
hs w0 x1+5 ; op.paper;
dl w0 x2+f12 ;
ds w0 x1+8 ; op.docname;
dl w0 x2+f16 ;
ds w0 x1+12 ;
dl w0 x2+f8 ;
ds w0 x1+18 ; op.interval;
am (x2+4) ;
jl. b0. ; goto return;
e.
\f
; boj 22.3.72 boss 2, psjobaux ...33...
b. j9, a9 w. ;
c19:
; procedure send job printer operation:
; call: page 1 = job descr page, page 3 = job file page, w3 = ref page 1.
; return: to io.c7, page 1 = job file, page 2 = page 3 = 0,
; page 4 unch.
rl. w2 b0.+6 ; w2:= ref job file page;
rl. w0 b173. ; current share:= first;
j2: rs w0 x2+183 ;
al w0 512 ; rest:= 512;
j3: rs w0 x2+181 ;
rl. w1 (b229.) ; if job printer semafor <= 0
al w0 17 ;
sh w1 0 ;
jl. w1 c6. ; then stop job;
rl. w2 b229. ;
jl. w3 (b153.) ; lock(job printer semafor)page2:(op);
am. (b0.+6) ;
j4: bz w3 474 ; op.slices:= 0;
al w2 2 ; op.paper:= current job printer paper;
ds w3 x1+4 ; op.type:= jobprinter:= 2;
rl. w0 b173. ; op.start:= superbuffer start;
rs w0 x1+40 ;
rl. w3 b0.+6 ;
j5: rl w2 x3+179 ; w2:=job printer accounted;
rl. w0 b16. ;
lo w0 4 ;
j6: rs w0 x3+179 ; job printer accounted:=true;
ld w0 -100 ;
so w2 1<6 ; if -,w2 then
ds w0 x1+46 ; op.line count,op.page count:=0;
rl. w2 b0.+2 ; w2:=job descr page;
al w0 14 ;
rs w0 x1+62 ; op.device kind
j7: dl w0 x2+425 ;
ds w0 x1+56 ; op.rbprintername;
j8: rl w0 x2+418 ;
rs w0 x1+52 ; op.rb term ident;
ld w0 -100 ; op.dev host descr:=0;
ds w0 x1+50 ; (std printer)
jl. w3 c17. ; send convert op;
rl. w2 b162. ; lock empty;
jl. w3 (b153.) ;
jl. w1 c4. ; start job;
rl. w1 (b159.) ;
rl w0 x1+12 ; page 1:= page 3;
rs w0 x1+8 ;
ld w0 -100 ;
ds w0 x1+12 ; page 2:= page 3:= 0;
dl. w3 b231. ;
jl. (b158.) ; page jump(io.c7);
b198 = j2+1, b209 = j3+1
b212 = j4+1, b286 = j5+1, b287 = j6+1
b293 = j7+1, b294 = j8+1
e. ;
\f
; boj 22.3.72 boss 2, psjobaux ...34...
b. a5, j10 w. ;
c11: ; action change paper:
; call: page 1 = job descr page, page 4 = operation.
rl. w2 b0.+8 ; w2:= ref operation;
rl w2 x2+4 ;
dl w1 x2+8+10 ;
sn. w0 (b12.) ;
se. w1 (b12.+2);
jl. c2. ;
dl w1 x2+8+14 ;
sn. w0 (b12.+4);
se. w1 (b12.+6); if op.docname <> <:printer:>
jl. c2. ; then goto print;
rl. w1 (b159.) ;
j9: rl w0 x3+338 ;
rs w0 x1+12 ; page 3:= job file page;
jl. w3 (b157.) ; get pages;
dl. w2 b0.+8 ; w2:= ref op; w1:= ref job file;
rl w2 x2+4 ;
rl w0 x2+8+6 ; current job printer paper type
j0: hs w0 x1+474 ; := op.paper type;
j1: rl w0 x1+179 ;
so w0 1<1 ; test job printer allowed;
jl. a0. ;
so w0 1<4 ; if not job printer used
jl. c12. ; then goto answer ok;
la. w0 b234. ; -1-1<4.
j2: rs w0 x1+179 ; job printer used:= false;
j3: rl w0 x1+181 ; if rest on share = 0
se w0 0 ;
jl. a1. ; comment change share;
al w0 512 ;
j4: rs w0 x1+181 ; rest:= 512;
j5: wa w0 x1+183 ; share:= if share + 512
sl. w0 (b174.) ; >= top then start
rl. w0 b173. ; else share + 512;
j6: rs w0 x1+183 ;
rl. w2 b163. ;
jl. w3 (b154.) ; open(full);
rl. w2 b162. ;
jl. w3 (b153.) ; lock(empty);
rl. w1 b0.+6 ; w1:= ref job file page;
a1: rl. w2 (b159.) ; end;
j7: rl w0 x1+183 ;
rs w0 x2+10 ; page 2:= share;
jl. w3 (b157.) ; get pages;
dl. w2 b0.+6 ; w2:=ref jobfile page; w1:= ref share;
rl. w3 (b159.) ; w3:=ref own description;
j8: ws w1 x2+181 ;
al w0 -1 ; buffer(512 - rest):= -1;
rs w0 x1+512 ;
al w0 0 ;
rs w0 x3+10 ; page 2:= 0;
rl. w2 b163. ;
jl. w3 (b154.) ; open(full);
jl. c12. ; goto answer ok;
b186 = j0+1, b187 = j1+1, b188 = j2+1, b189 = j3+1
b190 = j4+1, b191 = j5+1, b192 = j6+1, b193 = j7+1
b220 = j8+1, b149 = j9+1
a0: al w0 2 ; job printer not allowed:
jl. c13. ; status:= 2; answer;
e. ;
\f
; kll 4.1.72 boss 2, psjob aux ...35...
;g0 ; rel entry psjob io
;g1 ; length io
g2= k-g3 ; length aux
;g3 ; start aux
g4= c1-g3 ; new job
g5= c2-g3 ; print
g6= c3-g3 ; hard error
g7= c19-g3 ; aux entry send job printer op
g8= c5-g3 ; convert
g9= c8-g3 ; answer
g10= c10-g3 ; submit
g11= c11-g3 ; change paper
g17= c15-g3 ; mount kit
;g12 ; init
;g14 ; io entry job printer
g20= c9-g3 ; unused
g21= c12-g3 ; answer dummy message
g22= c24-g3 ; create telex link
i.e. ; end b and c names
\f
; kll 4.4.72 boss 2, psjob aux ...36...
b. a15 w. ;
a0: b0. ; j. code:
a4: g15. ;
a8: 0 ;
a5: g16. ;
a1: rl w1 x2 ; start:
al w1 x1+a2 ; reduce segment;
rs w1 x2 ;
rs. w3 a8. ; save return to slang;
c. e19+g18-1
al w1 e19+g18-1 ;
a3: am. (a0.) ; rep:
bz. w0 x1+e18-b0+a0.;
am. (a4.) ; move process eq
hs. w0 x1+a4. ; device numbers
am. (a0.) ;
bz. w0 x1+e20-b0+a0.; and buffer length
am. (a5.) ;
hs. w0 x1+a5. ;
al w1 x1-1 ; to init;
sl w1 0 ;
jl. a3. ;
rl. w3 a0. ;
al. w2 x3+g19-b0+a0.; w2 := abs g19;
al. w3 x3+e44-b0+a0.; w3 := abs e44;
a6: am. (a0.) ; rep6:
sl. w3 e45-b0+a0.; if w3 = e45 then
jl. a11. ; goto end;
dl w1 x3+2 ;
ds w1 x2+2 ; move name
dl w1 x3+6 ;
ds w1 x2+6 ; from options to
al w3 x3+8 ;
al w2 x2+8 ; init g19;
jl. a6. ; goto rep6;
z.
; move device numbers for disc drives into code
a11:
c.e23-1
rl. w2 a10. ;
al w1 -2000 ;
a9: bl. w0 x2 ;
hs. w0 x1+b88.+2000;
al w1 x1+1 ;
al w2 x2+1 ;
se w1 e23-2000;
jl. a9. ;
jl. a7. ;
a10: e22-a9 ;
z.
a7: al w0 0 ;
al w2 0 ;
jl. (a8.) ; return to slang;
jl. a1. ;
a2=a0-k ; - length of j.code;
j. e. ; jump;
i.e. ; end b and g names
\f
;boj 11.11.1971 boss2, psjobfinis ...37...
h2=h1.
s. b200 ; constants and variables in page 0
f30 ; initialization names
c60 ; routines and labels
w.
;external table
b37.,b40.,b41.,b42.,b43.,b44.,b45.,b46.,b47.,b48.,b49.
b50.,b51.,b52.,b53.,b54.,b55.,b56.,b57.,b58.,b59.
b60.,b61.,b62.,b63.,b64.,b65.,b66.,b67.
b70.,b71.,b72.,b73.,b74.,b75.,b76.,b77.,b78.,b79.
b80.,b81.,b82.,b83.,b84.,b85.,b86.,b87.,b88.,b89.
b90.,b91.,b92.,b93.,b94.,b95.,b96.,b97.,b98.,b99.
b101.,b108.,b109.,b110.,b111.,b112.,b113.,b114.,b115.
b118.,b123.,b125.,b126.,b127.,b128.,b129.
b130.,b131.,b132.,b133.,b134.,b135.,b136.,b137.,b138.,b139.
b140.,b141.,b143.,b144.,b145.,b146.,b147.,b148.,b149.,b150.
b151.,b152.,b154.
f11.,f12.,f13.,f14.,f25.
0 ; end external list
am.(4),jl.2,c24. ; goto initialize
p.2 ; input jobdescr
\f
; boj 7.6.72 boss 2, psjobfinis ...38...
; routines and entries
;
; label page name
;
; c0 41a action time up
; c1 48 provoke break
; c2 55 finis
; c3 43 break and dump
; c4 47a corelock request
; c5 58 return from mounter
; c6 43 save registers and break and dump
; c7 41 terminate
; c8 51 write integer
; c9 42 break request
; c10 42 timer request
; c11 47a coreopen request
; c12 41 user kill
; c13 55 finis request
; c14 46a replace request
; c15 41 input exhausted
; c16 41 hard error prim. input
; c17 55 end medium prim. output
; c18 41 mount error
; c19 41 max waiting time exceeded
; c20 53 clean catalog
; c21 42 receipt
; c22 52 release request line
; c23 54 output page 3
; c24 68 initialize
; c25 41 corelock exceeded
; c26 41 corelock not allowed
; c27 46 pagejump c2
; c28 46 bad fp
; c29 46 process too small for fp
; c30 46a min time
; c31 41 get timer
; c32 47 warning time exceeded
; c33 48 no interrupt routine
; c34 41 time exceeded
; c35 46 procedure banker
; c36 47a low priority start
; c37 47b runtime exceeded
; c38 47b high priority start page call
; c39 42 receipt w2
; c40 47b high priority start
; c41 52 digit 1
; c42 52 digit 2
; c43 52 digit 3
; c44 59 release
; c45 55 set finis cause
; c46 41a swop out and wait
; c47 42 return to psjob io
; c48 42 answer and return
\f
; boj 11.11.1971 boss 2, psjobfinis ...39...
;start of break page
b0: 0 ; page0 code and constants
0 ; page1 job description page
0 ; page2
0 ; page3 buffers
0 ; page4 operation or jobdescr
42<12 + 0 ; page ident: psjob break
; constants
b1: 2 ;
b3: -512 ; constant
b5: <:image:> ;
b4: 0,0,0
b6: 5<12 ; output code
b7: 3<12 ; input code
b13: <:fp:>,0,r.4 ;
i7<9/625 ; b15-4: i7 in seconds
i7 ; b15-2:increment runtime left
b15: i8 ;
b16: <:time exceeded:> ;
3 ; b21-2:code=printline
b21: 18 ; length
b31: <: :> ;
b38: 0 ; virt,
b39: 0 ; rel ref c2
b11: 0 ; work
b12: 0 ; do
b68: 0 ; do
b120:10000 ;
b142: 1<10 ; d88 replace bit
b153: 1<1 ; d88 change username after replace bit
b155: -1-1<10-1<1 ; d88 clear both replace bits
\f
; boj 11.11.1971 boss 2, psjobfinis ...40...
; externals
b40: 3 ; lock
b41: 4 ; open
b42: 32 ; prepare access
b43: 33 ; terminate access
b44: 1 ; send wait
b45: 25 ; call
b46: 26 ; ref ref current corutine
b51: 415 ; virt,
b47: 413 ; rel ref prepare bs adjust
b48: 415 ; virt,
b50: 414 ; rel ref terminate bs adjust
b49: 30 ; stop and wait
b52: 473 ; virt,
b53: 401 ; rel ref include user
b54: 67 ; bankerque
b55: 6 ; open chained
b57: 320 ; virt,
b58: 321 ; rel ref psjob io
b61: 51 ; request que
b62: 52 ; request free
b63: 5 ; lock chained
b64: 8 ; page jump
b146: 21 ; privout
b108: 282 ; addr of bankers time relative
\f
; boj 27.12.72 boss 2, psjobfinis ...41...
; terminate entries:
c19: am 19-25 ; 19: max waiting time exceeded
c25: am 1 ; 25:corelock exceeded
c26: am 24-6 ; 24:corelock not allowed
c7: am 1 ; 6: operator termination
c16: am 1 ; 5: harderror prim input
c15: am 2 ; 4: input exhausted
c34: am 1 ; 2: time exceeded
c12: al w0 1 ; 1: user termination
hs w0 x3+d104 ; finiscause:=w0
c18: ; d104:mounterror:
jl. w2 c31. ; time to finis
al w0 x1-i5 ; :=net run left-i5
sh w0 0 ; provided not negative;
al w0 0 ;
rs w0 x3+d115 ;
al w1 -1 ;
al w0 -1 ; time at provoke before finis
rs w0 x3+d115+2 ; :=infinity
ds w1 x3+d115+6 ; any time := infinity;
ds w1 x3+d115+10;
jl. c1. ; goto provoke
c31:
; procedure gettimer
; call: w2=ref return
; w3=ref page1
; return:w1=net run left
; w02=und
; w3=unch
ws. w2 b0.
rs w2 x3+d14+30 ; save ref return
al w2 -100 ;
al w0 15 ;
jl. w1 c35. ; banker.settimer.longtime
rl w0 x3+d14+4 ;
ad w1 -11 ; w0:=netrunleft(0.8 sec)
wd. w1 b120. ; w1:=netrunleft(sec)
rl w2 x3+d14+30 ;
jl. x2+b0. ; return
\f
; sm 75.06.03 boss 2, psjobfinis ...41a...
c46: ; swop out and wait:
rl. w1 (b46.) ;
rl w0 x1+10 ; page 3:=op;
rs w0 x1+12 ;
jl. w2 c49. ; set low priority;
rl. w2 b0.+6 ;
rl w2 x2+4 ; w2:=op.mess.
rl w1 x2+8+6 ; w1:=mess. waiting time
jd-1
sh w1 (x3+d138) ; if w1 > max
sh w1 0 ; or w1 < 0
jl. c19. ; then goto max waiting time exceeded
rs w1 x3+d137 ;
al w0 17 ;
jd-1
jl. w1 c35. ; banker.stop job
al w0 30 ;
rl w2 x3+d137 ;
jd -1
jl. w1 c35. ; banker.set waiting time
jl. c47. ; return to psjob io
c0:
; action timeup
; page1=jobdesc page
; w3=ref page1
b.a3w.
jl. w2 c30. ; w1:=ref mintime
wm. w0 b120. ; convert net run left at next event
ad w0 -13 ; from seconds to 0.8 seconds;
rl. w3 b0.+2 ;
sl w0 (x3+d107+14);
jl. a2. ; if net run left>net run left(event) then
rl w1 x3+d137 ; w1:=actual waiting time wanted
sh w1 0 ; if w1=0 then
jl. c21. ; goto receipt
wa w1 x3+d136 ; add actual waiting time to
rs w1 x3+d136 ; summa waiting times
jl. w1 c40. ; high priority start
jl. c21. ; goto receipt
a2: al w0 -1 ;
rs w0 x1 ; tabel(x1):=infinity
al w1 x1-d115 ;
ws w1 6 ;
ls w1 -1 ;
bl. w1 x1+a3. ;
jl. x1+b0. ; goto a3.x1
h. ; tabel of actions
a3: f26 ; 0: finis
f18 ; 1: runtime exceeded
f10 ; 2: save and dump
f15 ; 3: provoke before dump
f17 ; 4: high priority time exceeded
c25-b0 ; 5: provoke corelock exceeded
w.
e.
\f
; boj 18.4.72 boss 2, psjobfinis ...42...
c10:
; timer request:
jl. w2 c31. ; w1:=gettimer
rl. w2 b0.+8 ;
rl w2 x2+4 ;
ws w1 x2+20 ;
rs w1 x3+d115+6 ; time at provoke:=
; t1-net run left
ws w1 x2+22 ; time at save and dump:=
rs w1 x3+d115+4 ; t1 + t2-net run left
; jl. c21. ; goto receipt
c21:
; receipt:
; page 1=jobdesc, page4=operation
rl. w2 b0.+8 ;
c39: al w0 0 ; receipt w2: w2=operation;
hs w0 x2+2 ; op.byte 2:=0
jl. w2 c30. ;
rl w2 0 ;
al w0 15 ;
jl. w1 c35. ; banker.settimer.mintime
c48: ; answer and return
rl w1 x3+d108 ; w1:=ref sendertabel entry
al w2 0 ;
rx w2 x1+8 ; ref messagebuffer:=0
al w0 1 ;
al w1 x3+d14+10 ;
sl w2 2 ; if no one else did it
jd 1<11+22 ; then send answer
c47: ; return to psjobio
rl. w1 (b46.) ; w1:=own descr.
rl w0 x3+d0 ;
rs w0 x1+8 ; page1:=jobfile page
ld w0 -100 ;
ds w0 x1+14 ; page3:=page4:=0
dl. w3 b58. ;
jl. (b64.) ; pagejump.psjobio
c9:
; break request:
jl. w2 c30. ; if next event
sn w1 x3+d115 ; = finis
jl. c27. ; then goto finis
al w0 -1 ; time to provoke before dump
rs w0 x3+d115+6 ; := time to dump
rs w0 x3+d115+4 ; := infinity
; jl. c3. ; goto dump
\f
; boj 15.11.1971 boss 2, psjobfinis ...43...
; break and dump
; save registers and break and dump
; call: w3=ref jobdescription page
b. a8 w.
c3: am -1 ; save regs := false
c6: al w1 1 ; or true
rs w1 x3+d14+22 ; save saveregs
rl w2 x3+d110 ;
jl. w3 (b40.) ; lock job in core
al w2 x3+d19 ; w2:=ref jobname
jl. w3 (b49.) ; stop and wait
rl w2 x3+d106 ; w2:=proc desc(job)
dl w1 x2+78 ; w0w1:=standardbase(job)
al. w2 b5. ; w2:= ref <:image:>
jl. w3 (b42.) ; prepare access
jl. a6. ; if error then skip dumpimg
al w1 x3+4 ; w1:=ref work
al. w3 b5. ; w3:=ref<:image:>
jd 1<11+76 ; lookup headandtail
al w0 7 ;
al w1 x1+14 ;
hs w0 x1+16 ; content:=dumped core area
jd 1<11+44 ; change entry
rl w0 x3+8 ;
rs w0 x1 ; save ref nametable entry
jd 1<11+8 ; reserve area proc
rl. w3 b0.+2 ; w3:=ref page 1
rl. w0 b6. ;
rs w0 x3+d14+10 ; message.0:=5<12;comment output
dl w2 x3+d47 ;
al w2 x2+508 ;
ds w2 x3+d14+14 ; message.2:4:=first last
al w0 0 ;
rs w0 x3+d14+16 ; segmno:=0
rl w0 x3+d14+22 ;
sn w0 0 ; if saveregs
jl. a5. ; then begin
rl w2 x3+d106 ; w2:=procdescr
rs w1 x1 ; abs ref jobarea
rl w1 x2+36 ; if no interruot address then
sn w1 0 ;
jl. a5. ; skip dumping registers;
al w1 x1+e56 ; w1:=ia.top reg.dump area;
al w2 x2+e56 ; w2:=proc.top reg.dump area;
a8: al w1 x1-2 ; rep: move registers from proc
al w2 x2-2 ;
rl w0 x2+e57 ; to ia;
rs w0 x1 ;
se w2 (x3+d106) ; if w2>proc.first register dump area
jl. a8. ; then goto rep;
al w0 8 ; break cause:=parent break;
rs w0 x1+12 ;
a5: al w1 x3+d14+10 ; end; w1:= ref message
al. w2 b5. ; w2:=ref<:image:>
jl. w3 (b44.) ; send and wait(w1,w2)
al w2 x3+10
jl. w3 (b43.) ; terminate access(w2)
a6:
rl. w1 (b46.) ; page 4:= page 1(= job descr);
rl w0 x1+8 ;
rx w0 x1+14 ;
rs w0 x1+12 ; page 3:= operation;
dl. w3 b47. ; prepare bsadjust;
jl. w1 (b45.) ;
al. w2 a7. ; w2:=ref working space
rl w3 92 ; ref(( ref slicelist) table)
\f
; boj 27.12.71 boss 2, psjobfinis ...44...
a1: rl w1 x3 ; rep1: w1:=ref slicelist
sn w1 0 ;
jl. a0. ; if w1=0 then exit
rs. w3 b11. ; save ref bstable
rl w0 x1-36 ; w0:=rel ref claims
am. (b0.+2) ;
wa w0 d106 ; + proc desc(job)
rs. w0 b12. ; save w0
dl w0 x1-16 ; save docname
ds w0 x2+2 ; in working space
dl w0 x1-12 ;
ds w0 x2+6 ;
al w3 8 ;
wa. w3 b12. ; for w3:= abs ref claims+6 step -2 until abs ref claims
a2: al w3 x3-2 ; do begin
bz w0 x3 ; saved entries:=monitor entries
rs w0 x2+20 ;
bz w0 x3+1 ; saved segments:=monitor slices
rs. w3 b68. ;
wm w0 x1-8 ; *slicelength
rl. w3 b68. ;
rs w0 x2+22 ;
al w2 x2-4 ;
se. w3 (b12.) ;
jl. a2. ; end
al w3 2 ;
wa. w3 b11. ; w3:=next bstable entry
al w2 x2+40 ; w2:=ref more space
jl. a1. ; goto rep1
a0: al. w3 b4. ; w3:=ref(0)
am (66) ;
dl w1 78 ; w0w1:=boss standard
jd 1<11+72 ; set cat base(boss,standard)
rl. w3 b0.+2 ; update cputime used
rl w1 x3+d106 ;
dl w1 x1+56 ;
ad w1 11 ;
wa w0 x3+d79 ;
rs w0 x3+d79 ;
am (66) ; w1w2 := boss cpu time
dl w2 +56 ;
al w3 x3+d19 ; w3:=ref jobname
jd 1<11+64; remove process
\f
; sm 75.06.03 boss 2, psjobfinis ...45...
am (66) ; w1w2 := old boss cpu - new boss cpu;
ss w2 +56 ;
ad w2 -13 ;
wa. w2 (b108.) ; update bankers time relative;
rs. w2 (b108.) ;
al w1 x3-d19+d53; w1:=ref proc parameters
jd 1<11+56; create process
jd 1<11+4 ; process description
rs w0 x3-d19+d106; save proc descr in page 1
rs w0 (x3-d19+d108); and in sendertable
al. w2 a7. ; w2:=ref saved docname
rl w0 92 ; w0:=ref ref slicelist table
a4: sn w0 (96) ;rep2: if w0=top(ref slicelist table)
jl. a3. ; then exit
al w1 x2+8 ; w1:=ref saved claimlist
rs. w0 b11. ;
jd 1<11+78; set bsclaims(w1,w2,w3)
rl. w0 b11. ;
al w2 x2+24 ; w2:=ref next docname
wa. w0 b1. ; w0:=w0+2
jl. a4. ; goto rep2
a3:
dl. w3 b50. ; terminate bsadjust;
; notice: only in case that the kits
jl. w1 (b45.) ; has been disconnected, the restclaims
c.-1, o45, z. ; (bossfault xref)
jd -45 ; are changed;
al. w2 b13. ;
am (66) ;
dl w1 78 ;
jl. w3 (b42.) ; prepare access(<:fp:>)
c.-1, o41, z. ; (bossfault xref)
jd -41 ; alarm
al w1 x3+18 ; w1:=ref working space
al. w3 b13. ; w3:=ref<:fp:>
jd 1<11+42; lookup entry(w1,w3)
rl. w3 b0.+2 ; w3:=ref page 1
rl. w1 b13.+8 ; save name table addr;
rs w1 x3+18 ;
bz w1 x3+34 ;
sn w0 0 ; if result <> 0 or
se w1 3 ; content <> 3 then
jl. c28. ; goto alarm(bad fp);
\f
; sm 75.06.03 boss 2, psjobfinis ...45a...
bz w0 x3+35 ;
wa w0 x3+d53 ; job ic:= entry+first of jobarea
rs w0 x3+48 ;
al w0 0 ;
rs w0 x3+46 ;
rl w0 66 ; job w0:=
rs w0 x3+38 ; job w1:=
rs w0 x3+40 ; job w2:=
rs w0 x3+42 ; boss proc descr.
rl w0 x3+d106 ;
rs w0 x3+44 ; job w3:=job proc descr
dl w1 x3+d24+4 ;
al w3 x3+d19 ; w3:=ref job name;
jd 1<11+72; set base(job,user base);
al w1 x3-d19+38 ; w1:=ref job registers
jd 1<11+62; modify process
rl. w0 b7. ; w0:=3<12;comment input
rs w0 x3-d19+d14+10; message.0:=0
rl w1 x3+d53-d19;
rs w1 x3-d19+d14+12; message.2:=first of jobarea
wa w1 x3-d19+36 ; w1:=w1+length of program
sh w1 (x3-d19+48); if entry outside program
jl. c28. ; then finis(bad fp)
al w1 x1+511 ;
la. w1 b3. ; last:=512*entier((w1+511)//512)
al w1 x1-2 ; -2;
sl w1 (x3-d19+d47); if last>=top of jobcore then
jl. c29. ; alarm(fp too big)
rs w1 x3-d19+d14+14; message.4:=last
rl w0 x3-d19+32 ;
rs w0 x3-d19+d14+16; message.6:=block no
al w1 x3-d19+d14+10; w0:=ref message
al. w2 b13. ; w2:=ref<:fp:>
jl. w3 (b44.) ; send and wait
se w0 1<1 ; if status <> ok then
jl. c28. ; alarm(bad fp)
rl w0 x3+18 ; restore name table addr;
rs. w0 b13.+8 ;
al. w2 b13. ;
jl. w3 (b43.) ; terminate access
dl. w3 b53. ;
jl. w1 (b45.) ; include user(page4=jobdescr)
al w3 x3+d19 ; w3:=ref jobname
jd 1<11+58; start process
rl w2 x3+d110-d19;
jl. w3 (b41.) ; open(job in core)
rl. w2 b0.+6 ; w2:=abs ref saved operation;
jl. c39. ; goto receipt w2;
a7: 0, r.12*i29 ; working space for names and claims
e. ; end a-names
\f
; boj 19.1.72 boss2 , psjobfinis ...46...
c28: am -1 ; bad fp:finiscause:=20
c29: al w0 21 ; fp too big:------:=21
rl. w3 b0.+2 ; w3:=ref page1
hs w0 x3+d104 ; finiscause:=w0
rl w0 x3+18 ; restore name table addr;
rs. w0 b13.+8 ;
al. w2 b13. ; w2:=ref <:fp:>
jl. w3 (b43.) ; terminate access
c27: dl. w3 b39. ;
jl. (b64.) ; pagejump(finis(finiscause))
c35:
; procedure banker
; call: w0=op.code
; w1=ref return
; w2=op.4
; w3=ref page 1=ref jobdescr.
ws. w1 b0. ;
rs w1 x3+d14+32 ; save return
hs w0 x3+d14+2 ;
rs w2 x3+d14+4 ;
al w1 x3+d14 ;
rl. w2 b54. ;
jl. w3 (b55.) ; opch.bankerque
rl w2 x3+d82 ;
jl. w3 (b40.) ; lock.answer
rl w1 x3+d14+32 ;
jl. x1+b0. ; return
\f
; re 75.06.19 boss 2, psjob finis ...46a...
c30:
; procedure mintime
; call: w2=ref return
; w3=ref page1
; return: w0=net run left at next event
; w1=abs ref next event
; w2=und
; w3=unch
b. a2 w.
rs w2 x3+d14+30 ; save return
al w1 x3+d115 ;
al w0 12<6+12;
jl. w3 (b146.) ; privout;
al w2 x3+d115 ; challenger:=first player
a1: al w1 x2 ; champion:=challenger
rl w0 x1 ;
a2: sn w2 x3+d115+10; if no more players
jl (x3+d14+30); then end game
al w2 x2+2 ; challenger:=next player
sh w0 (x2) ; if challenger better than champion
jl. a1. ; then a1
jl. a2. ; else a2
;nb: d115 contains net run left values
;a late time corresponds to a small number.
c14: rl. w2 b0.+8 ; replace:
rl w2 x2+4 ; w2:= ref message;
dl w1 x2+18 ;
ds w1 x3+d100+2 ; move jobfile name in message
dl w1 x2+22 ; to job file name on descr page;
ds w1 x3+d100+6 ;
dl w1 x3+d24 ; move standard interval to
ds w1 x3+d101+2 ; job file interval;
bl w0 x3+d88 ;
sz w0 1<3 ; if not online then
jl. a0. ; begin
lo. w0 b142. ;
rl w1 x2+14 ; if change of username wanted then
se w1 0 ;
lo. w0 b153. ; set change bit;
sn w1 -1 ; if regret then
la. w1 b155. ; clear both replace bits;
hs w0 x3+d88 ; replacebit:=true
am -1 ; answer:= ok;
a0: al w0 1 ; end else answer:= not ok;
rs w0 x3+d14+10 ;
jl. c21. ; goto receipt
e. ;
\f
; boj 18.4.72 boss 2, psjobfinis ...47...
c32:
; warning time exceeded:
b. a2 w.
dl. w1 b15. ; w01:=i7 i8
rs w1 x3+d14+6 ; op.6:=i8
rl w2 0 ; w2:=i7
al w0 22 ;
jl. w1 c35. ; banker.update runtime left
al w2 x3+d115 ; for i:=0 step 2 until 10
a0: rl w1 x2 ; do d115.i:=d115.i+i7*0.8
se w1 -1 ; provided not infinite;
wa. w1 b15.-4 ;
rs w1 x2 ;
al w2 x2+2 ;
se w2 x3+d115+12;
jl. a0. ;
rl w1 x3+d2 ;
wa. w1 b15.-2 ; total net time:= total net time + i7;
rs w1 x3+d2 ;
al w0 i5 ; n r l at runtime
rs w0 x3+d115+2 ; exceeded:= i5;
rl. w2 b62. ;
jl. w3 (b63.) ; lock.requestfree
al w2 x3 ;
dl w0 x2+d19+2 ; op.6:=jobname
lo. w0 b31. ;
lo. w3 b31. ;
ds w0 x1 +8 ;
dl w0 x2+d19+6 ;
lo. w0 b31. ;
lo. w3 b31. ;
ds w0 x1 +12 ;
dl. w0 b16.+2 ; op.14:=<:time exceeded:>
ds w0 x1 +16 ;
dl. w0 b16.+6 ;
ds w0 x1 +20 ;
rl. w0 b16.+8 ;
rs w0 x1 +22 ;
dl. w0 b21. ; op.2:=printline code
ds w0 x1 +4 ; op.4:=length
rl. w2 b61. ;
jl. w3 (b55.) ; opch.requestque
jl. c21. ; goto receipt
e.
\f
; boj 27.12.72 boss 2, psjobfinis ...47a...
c4:
; corelock request
; page4=operation
b. a2 w.
rl. w2 b0.+8 ;
rl w2 x2+4 ; if t1=0 then
rl w2 x2+20 ;
sn w2 0 ;
jl. c48. ; goto answer and return
jl. w2 c31. ; w1:=gettimer
rl. w2 b0.+8 ;
rl w2 x2+4 ;
rl w0 x2+20 ; if t1>max corelock or
sh w0 (x3+d77) ; t1<=0 then
sh w0 0 ; goto corelock not allowed
jl. c26. ;
ws w1 0 ; w1:= net run left - t1;
rs w1 x3+d115+10; time to provoke:=w1
a0: al w0 25 ; rep:
jl. w1 c35. ; banker.corelock
bl w0 x3+d14+2 ;
sl w0 0 ; if not ok
jl. c21. ; then begin
rl w2 x3+d110 ;
jl. w3 (b40.) ; lock.jobincore
rl w2 x3+d110 ;
jl. w3 (b41.) ; open.jobincore
jl. a0. ; goto rep
; end
e.
c11:
; coreopen request:
al w0 26 ;
jl. w1 c35. ; banker.coreopen
al w0 -1 ;
rs w0 x3+d115+10; time at corelock exceeded:=inf.
jl. c21. ; goto receipt
c36: ; high priority time exceeded:
jl. w2 c49. ; set low priority and start;
jl. c21. ; goto receipt;
c49: ws. w2 b0. ; set low priority and start:
rs w2 x3+d137 ; save rel return;
jl. w2 c31. ; gettimer
bz w0 x3+d132 ; op.8:=net run left
ds w1 x3+d14+8 ; op.6:=priority
rl w0 x3+d17+2 ; op.10:=arrival time
rs w0 x3+d14+10 ;
rl. w1 (b46.) ; w2:=virt ref swoparea descr
rl w1 x1+8 ;
al w2 x1+d107 ;
al w0 28 ; w0:=priority start
jl. w1 c35. ; banker
am (x3+d137) ;
jl. b0. ;
\f
; sm 75.06.03 boss 2, psjobfinis ...47b...
c37:
; runtime exceeded:
dl w1 110 ; if gross runtime used
ld w1 -13 ; >limit
ss w1 x3+d17+2 ; then warning
sl w1 i6 ; else terminate
jl. c32. ;
jl. c34. ;
; procedure high priority start
; the first 42 bytes on job descr page are used for
; working variables for conversational io.
b.a2 w.
c40: ws. w1 b0. ;
rs w1 x3+d137 ; save rel return
jl. w2 c31. ; get timer
ws. w1 a1. ; net run left at high priority exceeded
rs w1 x3+d115+8 ; :=net run left now - i9
dl w1 110 ;
ad w1 11 ; arrival time := now
rs w0 x3+d14+10 ;
bz w0 x3+d132 ; op.6:= priority;
rl. w1 a1. ;
ds w1 x3+d14+8 ; op.8:=time to high priority exceeded
rl. w1 (b46.) ; w2:=virt ref swoparea descr
rl w1 x1+8 ;
al w2 x1+d107 ;
al w0 28 ; w0:=priority and start
jl. w1 c35. ; banker
jl. w2 c30. ; mintime
rl w2 0 ;
al w0 15 ; w0:=set timer
jl. w1 c35. ; banker
al w1 0 ; actual waiting time:=0;
rx w1 x3+d137 ; w1:=rel return
wa. w1 b0. ; w1:=abs return
jl x1 ; return
c38: jl. w1 c40. ; call high priority start;
rl. w1 (b46.) ;
rl w0 x3+d0 ; page 1:= job file page;
rs w0 x1+8 ;
dl w3 x3+2 ;
jl. (b64.) ; return
a1: i9 ; time to high priority exceeded
e.
\f
; boj 27.12.72 boss 2, psjobfinis ...48...
; provoke break
; comment stops the job and starts it again in the interrupt routine
; w3=ref page 1
b. a10 w.
c1: rl w1 x3+d106 ; w1:=ref job proc descr
rl w1 x1+36 ; w1:=ref interrupt routine
sn w1 0 ; if no interrupt routine
jl. c33. ; then finis(no interrupt)
al w1 x3+d14 ; w1:=ref bankerop
al w0 16 ;
hs w0 x1+2 ; op.code:=start job
rl. w2 (b46.) ; w2:=current coroutine
rl w2 x2+8 ; w2:=virt ref page1
al w0 x2+d107 ; op.4:=virt ref swoparea spec
rs w0 x1+4 ;
rl. w2 b54. ; opch bankerque,start
jl. w3 (b55.) ;
rl w2 x3+d82 ;
jl. w3 (b40.) ; lock answer
rl w2 x3+d110 ;
jl. w3 (b40.) ; lock(job in core)
al w2 x3+d19 ;
jl. w3 (b49.) ; stop and wait(jobname)
rl w2 x3+d106 ; w2:=ref proc descr.
rl w1 x2+36 ; w1:=ref interrupt routine
al w1 x1+e56 ; w1:=ia.top reg.dump area;
al w2 x2+e56 ; w2:=proc.top reg.dump area;
a0: al w1 x1-2 ; rep: move registers from proc
al w2 x2-2 ;
rl w0 x2+e57 ; to ia;
rs w0 x1 ;
se w2 (x3+d106) ; if w2>proc.first register dump area
jl. a0. ; then goto rep;
al w0 8 ;
rs w0 x1+12 ; interruptcause:=parent break
al w0 0 ;
al w1 x1+e56 ; job ex:=0
ds w1 x3+34 ; job ic:=ref interrupt routine+e56
al w1 x3+24 ;
al w3 x3+d19 ; w3:=ref jobname
jd 1<11+62; modify process
jd 1<11+58; start process
rl w2 x3+d110-d19;
jl. w3 (b41.) ; open(job in core)
jl. c21. ; goto receipt
c33: al w0 22 ; finis(no interrupt):
rl. w3 b0.+2 ;
hs w0 x3+d104 ; finis cause:=22;
rl. w2 b0.+8 ;
al w0 0 ; op.2 := 0;
hs w0 x2+2 ; allow next operation;
jl. c27. ; goto finis;
e.
f26=c27-b0 ; rel ref finis
f10=c6-b0 ; rel ref save and dump
f15=c1-b0 ; rel ref provoke before dump
f17=c36-b0 ; rel ref low priority start
f18=c37-b0 ; rel ref time exceeded
f24=k-b0 ; length of break page
\f
; boj 15.11.71 boss 2, psjobfinis ...49...
; clean catalog:
; page 1: +0 return virt
; +2 return rel
; +4 top key (first not cleaned)
; +6 interval: low
; +8 high
; page 3 must be the save buffer.
; page 3 is cleared before return.
; page 4 must be job descr
b. a9, j9, b30 w. ;
j0=i62*512 ; segments in save buffer * 512
j1=i62 ; segments in save buffer
f19: ; start of clean catalog page:
b0: 0,r.5 ; page addr
43<12 + 0 ; page ident: clean catalog
b3: 3<12 ; input message
b5: 0 ; limit 1
b6: 0 ; limit 2
b7: 7 ; mask for catalog key
b8: 8.00007772 ; mask for testpattern;
b17: <:catalog:>,0 ; name of main catalog , 0 used by set base
b118: 285 ; name table addr;
b18: -1-1<18-1<1 ; hard error
b127: 21 ; privat output
b147: 2 ; send and wait fast
b148: 26 ; ref ref current corutine
b149: 8 ; page jump
j2: j0-2 ; last of save buffer
c20: rl w1 x3+8 ; high:= high + 1;
al w1 x1+1 ; comment code trick used;
rs w1 x3+8 ; in next entry;
rl. w3 b0.+8 ; w3:= job descr;
rl. w1 (b148.) ; w1 := ref ref current coroutine;
bz w0 x1+4 ;
hs w0 x3+d89+8 ; save testpattern;
jd -1
la. w0 b8. ; testpattern:= only jd -1;
jd -1
hs w0 x1+4 ;
rl. w0 b3. ; operation in message:= input;
rs w0 x3+d89 ;
al w1 -j1 ; segment:= -segments in save buf;
rs w1 x3+d89+6 ;
a0: rl. w3 b0.+8 ; input:
rl w1 x3+d89+6 ; segment:= segments +
al w1 x1+j1 ; segments in save buf;
rs w1 x3+d89+6 ;
a4: rl. w1 b0.+6 ;
rl. w3 b0.+8 ; w3:= job descr;
al w2 x1 ;
wa. w2 j2. ; first addr:= abs ref save buf;
ds w2 x3+d89+4 ; last addr:= first addr + save buf length;
al w1 x3+d89 ; w1:= abs ref message;
al. w2 b17. ; w2:= abs ref <:catalog:>;
jl. w3 (b147.) ; send and wait fast;
\f
; kll 12.03.73 boss 2,clean catalog ...50...
; w3 = parameter base(page 1)
; ***
rl. w2 b0.+8 ;
rl w2 x2+d89+6 ; w2 := segment;
se w0 0 ; if anything wrong then
jd -1 ; *** testoutput ***
sn w0 4 ; proc func trouble:
jl. a4. ; repeat at rejected;
sz. w0 (b18.) ; if hard error then
c.-1, o42, z. ; (bossfault xref)
jd -42 ; alarm;
rl w1 x1+2 ;
sh w1 0 ; if bytes transferred = 0 then
jl. a3. ; goto return;
wa. w1 b0.+6 ;
al w1 x1-2 ; limit1:= bytes transferred +
rs. w1 b5. ; abs save buf - 2;
rl. w2 b0.+6 ; w2:= entry:= abs ref save buf;
al w1 x2+510 ; limit2:= abs ref save buf + 510;
rs. w1 b6. ;
a1: rl w0 x2 ; next:
la. w0 b7. ; w0:= key(entry) extract 3;
sl w0 (x3+4) ; if not used or key >= top key then
jl. a2. ; goto get next;
dl w1 x2+4 ; w0:= low(entry); w1:= high(entry);
sl w0 (x3+6) ; if low(entry) < low or
sl w1 (x3+8) ; high(entry) > high then
jl. a2. ; goto get next;
al w0 30<6+17;
al w1 x2 ;
jl. w3 (b127.) ; testout(entry);
dl w1 x2+4 ;
al. w3 b17.+6 ; w3:= abs ref 0;
jd 1<11+72; set base;
al w3 x2+6 ; w3:= abs ref name(entry);
jd 1<11+48; remove entry;
rl. w3 b0.+2 ; w3:= ref page 1;
a2: al w2 x2+34 ; get next: entry:= entry + 34;
sn. w2 (b5.) ; if entry = limit1 then
jl. a0. ; goto input;
se. w2 (b6.) ; if entry <> limit2 then
jl. a1. ; goto next;
rl. w1 b6. ;
al w1 x1+512 ; limit2:= limit2 + 512;
rs. w1 b6. ; comment skip last 2 bytes
al w2 x2+2 ; on each catalog segment;
jl. a1. ; goto next;
a3: am. (b0.+2) ; return:
dl w3 +2 ;
rl. w1 b0.+8 ;
bz w0 x1+d89+8 ;
rl. w1 (b148.) ;
hs w0 x1+4 ; restore testpattern;
al w0 0 ;
rs w0 x1+12 ; clear page 3 description;
jl. (b149.) ; page jump(return point);
e. ;
f20=k-f19 ; length of clean catalog page
\f
; boj boss 2, psjobfinis ...51...
;start of finis page
b100: 0 ; page0 code and constants
0 ; page1 job description page
0 ; page2
0 ; page3 buffers
0 ; page4
44<12 + 0 ; page ident: psjob finis
; constants
b102: 5<12 ; output code
b8: 10 ; radix (modified to 8 sometimes)
b9: 48 ;
b10: -1-1<4 ; mask
b14: 10000 ;
b101: 388 ; job printer operation
b17: 60 ; no of seconds pr. minute
b18: <:.00:> ;
b19: 48<8+32 ;
b20: 32<16 ; space
b22: <:sec <0>:> ;
b23: <: log :> ;
b24: 0 ; virt ref page 0
b25: 0 ; rel ref clean catalog
b26: <: date:> ;
b69: <:wrk:> ; test for swoparea name (1)
b27: 10000*60*4 ; for time conversion
b28: 10000*60 ;
b29: 15*24 ;
b30: 15 ;
b32: 1461 ; no of days in 4 years
b33: 365 ; no of days in 1 year
b34: <:<10><10>end job <0>:>
b35: <: 19:> ;
b36: <:<10>:>
b104: 0,r.6 ; working space
b105: 0 ; saved ref bstable,limit 1,saved shift
b106: 0 ; saved ref monitorclaims,limit 2
b121: -1-1<10 ; replace bit mask
b103: <:sub:> ;
\f
; boj 11.11.1971 boss 2, psjobfinis ...52...
; externals
b92: 3 ; lock
b93: 4 ; open
b94: 2 ; send wait fast
b95: 25 ; call
b96: 26 ; ref ref current corutine
b97: 415 ; virt,
b98: 413 ; rel ref prepare bs adjust
b99: 415 ; virt,
b110: 414 ; rel ref terminate bs adjust
b111: 67 ; bankerque
b112: 6 ; open chained
0 ; boss private interval
b117: 0 ; =
b59: 312 ; virt ref mount table
b70: 311 ; virt ref mount action table
b71: 288 ; slicelength on disc
b79: 74 ; catalock semaphore
b60: 7 ; get pages
b113: 51 ; request que
b114: 5 ; lock chained
b115: 8 ; page jump
b65: 233 ; virt ref save buffer
b66: 234 ; abs ref operator name
b56: 440 ; virt,
b67: 437 ; rel ref empty files
b123: 33 ; terminate access
b73: 492 ; rel account job entry
b37: 313 ; virt
b80: 477 ; rel ref mounter finis entry
b81: 382 ; convert free
b82: 380 ; printer-paperque
b83: 381 ; printerwait
b151: 378 ; rb printer queue
b152: 377 ; rb printer wait
b150: 379 ; paper manipulation semafor
b84: 402 ; replace exit
b85: 404 ; offline finis exit
b86: 405 ; online finis exit
b87: 400 ; virt ref psjob start page
b88: 436 ; print outrec account
b89: 431 ;
b90: 434 ; rel terminate account
b91: 435 ; virt account buf
b128: 34 ; w0 call
; jobprinter:
b130: 383 ; virt first
b131: 384 ; virt top jobprinter superbuffer
b132: 60 ; empty
b133: 61 ; full
b143: 206 ; virt,
b144: 235 ; rel ref get file
b107: 0 ; virt ref finis texts
b109: 282 ; addr of bankers time relative
\f
; boj 15.12.1971 boss2, psjobfinis ...53...
; w3 = link, w2 = text base, w1 = integer
; w0, w2 unchanged at return
c8: ds. w0 b104.+2; write integer:
jl. w3 c42. ; ciffer 2;
lo. w0 b19. ; add space;
rs w0 x2+4 ;
jl. w3 c43. ; ciffer 3;
lo w0 x2+4 ;
rs w0 x2+4 ; text + 4...;
jl. w3 c41. ; ciffer 1;
rs w0 x2+2 ;
jl. w3 c42. ; ciffer 2;
lo w0 x2+2 ;
rs w0 x2+2 ;
jl. w3 c43. ; ciffer 3;
lo w0 x2+2 ;
rs w0 x2+2 ; text + 2...;
jl. w3 c41. ; ciffer 1;
rs w0 x2+0 ;
jl. w3 c42. ; ciffer 2;
lo w0 x2+0 ;
rs w0 x2+0 ;
jl. w3 c43. ; ciffer 3;
lo. w0 b20. ;
lo w0 x2+0 ;
rs w0 x2+0 ; text + 0;
dl. w0 b104.+2; get saved w0;
jl x3 ; goto return;
h3 =k-b100 ; harderror swopin:
rl. w1 b100.+4; w1 := operation;
al w0 0 ;
hs w0 x1+2 ; operation := free;
rl w0 x1+4 ;
rs w0 x3+20 ; save status on job descr rel 20;
rl. w0 b69. ;
se w0 (x3+d107) ; job descr(12:18) :=
am d18-d107; if job was started then
al w2 x3+d107 ; swop area name else
dl w1 x2+2 ; prog name;
ds w1 x3+14 ;
dl w1 x2+6 ;
ds w1 x3+18 ;
al w0 27 ;27: finis cause := 27 ( harderror swopin );
jl. c45. ; goto set finis cause;
\f
; boj 15.11.71 boss 2, psjobfinis ...54...
; ciffer 1, ciffer 2, ciffer 3
c43: am 8 ; ciffer 3: shift:= 16;
c42: am 8 ; ciffer 2: shift:= 8;
c41: al w0 0 ; ciffer 1: shift:= 0;
rs. w0 b105. ;
al w0 0 ; w0:= w1 mod radix;
wd. w1 b8. ; w1:= w1//radix;
sn w0 0 ;
se w1 0 ;
lo. w0 b9. ;
ls. w0 (b105.) ; w0:=(w0 or text bits) < shift;
jl x3 ; goto return;
; release request line
; call: w0 = line addr, w2 = return.
c22: sh w0 0 ; release request:
jl x2 ; if line = 0 then return;
ws. w2 b100. ;
rs w2 x3+d14+26 ; save rel return;
al w1 x3+d87 ; w1:= operation;
rs w0 x1+6 ; operation + 6:= line;
al w0 1 ;
rs w0 x1+2 ; code:= release line;
rl. w2 b113. ;
jl. w3 (b112.) ; open chained(request que);
rl w2 x3+d82 ;
jl. w3 (b92.) ; lock(psjob answer);
rl w2 x3+d14+26 ;
jl. x2+b100. ; goto saved return;
; output page 3:
c23: ws. w2 b100. ; output page 3:
rs w2 x3+d14+16 ; save rel return in w16;
rl. w1 b100.+6; w1:= abs ref page 3;
rl. w0 b102. ; message code:= output;
ds w1 x3+d11+2 ; first addr:= page 3; (virt buf);
al w0 x1+510 ; last addr:= first addr + 510;
rl w1 x3+d14+32 ;
ls w1 -9 ; segment:= first buf byte // 512;
ds w1 x3+d11+6 ;
al w1 x1+1 ;
ls w1 9 ;
rs w1 x3+d14+32 ; w32:= (segment + 1) * 512;
al w1 x3+d11 ; a1:= abs ref message;
al w2 x3+d112 ; w2:= abs ref super buffer name;
jl. w3 (b94.) ; send and wait fast;
sz w0 -1-1<5-1<1; if other than normal answer or not exist then
c.-1, o43, z. ; (bossfault xref)
jd -43 ; alarm;
rl w1 x3+d14+16 ;
jl. x1+b100. ; goto saved return;
\f
; boj 27.12.71 boss 2, psjobfinis ...55...
; finis entries:
b. a15,j15 w.
c17: am 5 ; 8: end medium prim output
c13: al w0 3 ; 3: finis request
bz w2 x3+d104 ;
sn w2 0 ; if finis cause not set then
c45: hs w0 x3+d104 ; set finis cause;
c2: se w0 3 ; if finis cause = finis request then
jl. a13. ; begin
rl. w2 b100.+8; w2:=operation
rl w2 x2+4 ; w2:=message address
rl w2 x2+14 ; take finis parameters
jl. a10. ; end else
a13: al w2 0 ; clear parameter mask
a10: rs w2 x3+d5 ; set parameter mask
jd-1
rl w1 66 ; w1:=ref to curr process
rl w0 x1+12 ; w0:=boss identification bit
rl w3 (x3+d108) ; w3:=ref to proc desc of this job
lo w0 x3+12 ; w0:=userbit of boss and job
rl w3 74 ; w3:=first of per. dev.
al w3 x3-2 ;
a11: al w3 x3+2 ; rep:
sl w3 (76) ; if no more per. dev. then
jl. a12. ; goto continue finis
rl w2 x3 ; w2:= proc desc of device
rl w1 x2+2 ; w1:=first of name
sn. w1 (b103.) ; if w1 <> <:sub:> or
se w0 (x2+14) ; users <> boss and job then
jl. a11. ; goto rep
al w1 x3 ; w1:= name table add
ws w1 74 ; w1:=w1- start of name table
ls w1 -1 ; w1:=w1 div 2
ds. w0 b104.+10; save w3,w0
rl. w3 b100.+2;
al w3 x3+d19 ; w3:= ref to job name
jd 1<11+14; exclude user (device as user)
jd-1
rl. w3 (b104.+8); w3:=ref to proc desc of device
dl w1 x3+2+2 ;
ds. w1 b104.+2; store name of device
dl w1 x3+2+6 ;
ds. w1 b104.+6; in local variables
al. w3 b104. ; w3:= ref to name of device
jd 1<11+64; remove process (device)
jd-1
dl. w0 b104.+10; restore w3,w0
jl. a11. ; goto rep
a12: rl. w3 b100.+2; continue finis:
al w1 x3+d14 ; w1:= ref bankerop
bz w2 x3+d88 ;
bz w0 x3+d104 ; w0 := finiscause;
sz w2 1<9 ; if convertjob
se w0 3 ; and finiscause = ok then
jl. 4 ;
jl. c44. ; goto release;
so w2 1<10+1<1; if (replace job and
so w2 1<10 ; no username change and
jl. a5. ; not killed)
se w0 1 ;
sn w0 6 ;
a5: sz w2 1<3 ; or online then
am 29-27 ; code:= stop job and release core else
al w0 27 ;
hs w0 x1+2 ; code:= stop job and clear name;
rl. w2 b111. ;
jl. w3 (b112.) ; open chained(banker que);
rl w2 x3+d82 ;
jl. w3 (b92.) ; lock(psjob answer);
dl. w3 b98. ;
jl. w1 (b95.) ; call (prepare bs adjust);
al w2 0 ; w2:=ref proc descr
rs w2 (x3+d108) ; ref proc descr:=0
rs w2 x3 ; page1.0:=0
rx w2 x3+d106 ; ref proc descr:=0
sn w2 0 ; if proc dosnt exist
jl. a0. ; then skip removal
dl w1 x2+56 ;
ad w1 11 ; update cpu time used;
wa w0 x3+d79 ;
rs w0 x3+d79 ;
rl w2 66 ;
dl w1 x2+78 ; w0w1:=boss standard ; w3=ref(0)
jd 1<11+72 ; set catbase(w0w1w3)
am (66) ; w1w2 := boss cpu time;
dl w2 +56 ;
al w3 x3+d19 ; w3:=ref jobname
jd 1<11+64 ; remove process
am (66) ; w1w2 := old boss cpu - new boss cpu;
ss w2 +56 ;
ad w2 -13 ;
wa. w2 (b109.) ; update bankers time relative
rs. w2 (b109.) ;
rl. w3 b100.+2;
rl. w0 b69. ; if job was not started at all then
rx w0 x3+d107 ; begin
al w2 x3+d18 ; swop area name (1) := <:wrk:>;
se w0 (x3+d107) ; terminate access(prog name);
jl. w3 (b123.) ; end;
dl. w1 b117. ; w0w1:=boss private
rl. w3 b100.+2; w3:=ref(0)
jd 1<11+72 ; set catbase
al w3 x3+d107 ; w3:=ref swopareaname
jd 1<11+48 ; remove entry(w3)
rl. w3 b100.+2;
a0: rl. w2 (b96.) ; page3:=jobfile page
rl w0 x3+d0 ;
rs w0 x2+12 ;
jl. w3 (b60.) ; getpages;
\f
; boj 20.3.72 boss 2, psjobfinis ...56...
; this very code was once repeated on aux page.
; ( except for the end signal and the account counting)
rl. w1 b100.+6; w1:=ref job file page;
j10: rl w0 x1+179 ; if job printer allowed then
so w0 1<1 ;
jl. a3. ; begin
sz w0 1<6 ; if job printer not accounted then
jl. a6. ; begin
rl w2 x3+d111 ; rest accounts:=rest accounts + 1;
al w2 x2+1 ;
rs w2 x3+d111 ; end
jl. a3. ; else begin
a6: sz w0 1<4 ; if job printer not used then
jl. a7. ; begin
rl. w2 b101. ; lock chained(job printer operation);
jl. w3 (b114.) ;
al w0 3 ; send print-account record;
rs w0 x3+4 ; page 1 + 4:=print;
bz w0 x1+5 ;
rs w0 x3+20 ; +20:=last printed paper type;
dl w1 x1+46 ; + 6:=pages from operation;
ds w1 x3+8 ; + 8:=lines from operation;
rl. w1 b100.+4;
rl. w2 b101. ;
jl. w3 (b112.) ; open chained(job printer operation;
dl w1 x3+d23+2 ;
ds w1 x3+12 ; +(10-16):=user name;
dl w1 x3+d23+6 ;
ds w1 x3+16 ;
rl w1 x3+d20 ; +18:=project no;
rs w1 x3+18 ;
rl. w1 (b96.) ; page 3:=virt account buf;
rl. w0 b91. ;
rs w0 x1+12 ;
dl. w3 b89. ; call (outrec account);
jl. w1 (b95.) ;
rl w0 x3+d0 ;
rl. w2 (b96.) ; page 3:= job file page;
rs w0 x2+12 ;
jl. w3 (b60.) ; get pages;
jl. a3. ; end
\f
; re 20.3.74 boss 2, psjobfinis ...56a...
a7: ; else begin
la. w0 b10. ; -1-1<4;
j11: rs w0 x1+179 ; jobprinter used:= false;
j12: rl w0 x1+181 ;
se w0 0 ; if rest = 0 then
jl. a4. ; begin comment change share;
al w0 512 ;
j3: rs w0 x1+181 ; rest:= 512;
j4: wa w0 x1+183 ; share:= next share;
sl. w0 (b131.) ;
rl. w0 b130. ;
j5: rs w0 x1+183 ;
rl. w2 b133. ;
jl. w3 (b93.) ; open(full);
rl. w2 b132. ;
jl. w3 (b92.) ; lock(empty);
rl. w1 b100.+6;
a4: rl. w2 (b96.) ; end;
j6: rl w0 x1+183 ; page 2:= share;
rs w0 x2+10 ;
jl. w3 (b60.) ; getpages;
dl. w2 b100.+6; w1:=ref share; w2:=ref jobfile page;
rl. w3 (b96.) ; w3:=ref own description;
j7: ws w1 x2+181 ; buffer(512 - rest):= -2
al w0 -2 ; = end signal to printer.
rs w0 x1+512 ;
al w0 0 ; page 2:= 0;
rs w0 x3+10 ;
rl. w2 b133. ;
jl. w3 (b93.) ; open(full);
; end;
a3: ; end;
b134 = j10+1, b135 = j11+1, b136 = j12+1, b137 = j3 +1
b138 = j4 +1, b139 = j5 +1, b140 = j6 +1, b141 = j7 +1
\f
;boj 22.2.72 boss 2, psjobfinis ...57...
bl w0 x3+d88 ;
sz w0 1<3 ; if offline or internal job then
jl. a2. ; begin
j1: al w2 218 ;
wa. w2 b100.+6;
jl. w3 (b123.) ; terminate access(jobfile)
j2: al w2 218 ;
wa. w2 b100.+6;
al w0 0 ;
rs w0 x2+8 ; nametableaddress:=0
bl w0 x3+d88 ; if offline job then
so w0 1<8 ;
jl. a1. ;
al w3 x2 ;
jd 1<11+48; remove jobfile;
rl. w3 b100.+2;
a1: am 1 ; topkey:=3
a2: al w0 2 ; end else topkey:=2;
rs w0 x3+4 ;
dl w1 x3+d24 ; interval:=job standard
ds w1 x3+8 ;
rl. w2 (b96.) ; w2:= ref current corutine;
rl. w0 b65. ;
rl w1 x2+8 ; page 3:= save buffer;
ds w1 x2+14 ; page 4:= page 1; (job descr);
bz w0 x3+d134 ; if preserve yes then
se w0 0 ;
jl. a8. ; skip clean catalog
dl. w3 b25. ;
jl. w1 (b95.) ; call clean catalog;
a8: rl. w2 (b96.) ;
rl w0 x3+d0 ;
rs w0 x2+12 ; page 3:= job file page;
dl. w3 b110. ;
jl. w1 (b95.) ; call terminate bs adjust;
c.-1, o44, z. ; (bossfault xref)
jd -44 ; if claims exceeded then boss alarm;
dl. w3 b67. ;
jl. w1 (b95.) ; call empty files;
b125=j1+1,b126=j2+1
e. ; end a-names
\f
; boj 15.11.71 boss 2, psjobfinis ...58...
c. e25-1 ; if stations > 0 then
; begin
bl w0 x3+d98 ; if rest mounts = mounts then
bl w1 x3+d43 ; goto exit
sn w0 x1 ;
jl. c5. ;
rl. w1 (b96.) ;
dl. w0 b70. ; page 1:= mount table;
rx w3 x1+8 ; page 3:= descr;
ds w0 x1+14 ; page 4:= mount action table;
dl. w3 b80. ; w2w3:= ref finis entry in mounter;
jl. (b115.) ; page jump;
c5: ; return from mounter:
z. ; end stations > 0;
\f
; boj 15.11.71 boss 2, psjobfinis ...59...
b. a9, j9 w. ;
al w0 0 ; requestaddr := 0;
rx w0 x3+d93 ;
jl. w2 c22. ; release request;
bz w0 x3+d14+3 ;
se w0 2 ; if psjob nr = 2 then
jl. a0. ; begin
rl. w1 (b96.) ; comment account psjobnr;
dl. w0 b91. ;
rs w0 x1+12 ; page 3:= virt account buf;
rl. w2 b88. ; call terminate account;
jl. w1 (b95.) ; end;
c44: ; release:
a0: al w1 2 ; init banker operation(release) :
hs w1 x3+d14+2 ; op.2 := 2<12 + psjobno;
ld w1 -100 ; op.4 := converts, accounts := 0, 0;
ds w1 x3+d14+6 ; op.6 := entries , slices := 0, 0;
bz w0 x3+d88 ; if offline or internal job then
jd -1
sz w0 1<3 ; begin
jl. a6. ; remove or adjust primout :
rl w0 x3+d0 ;
rl. w2 (b96.) ;
rs w0 x2+12 ; page 3 := job file page;
rl. w2 b79. ;
jl. w3 (b92.) ; lock(catalock);
dl. w1 b117. ;
al w3 x3+d105 ;
jd 1<11+72; set catbase(boss own base);
rl w0 x3-d105+d5; if finis output.no then
jd -1
so w0 1<0 ; begin
jl. a2. ; remove primout :
al w3 x3-d105+d112;
jd 1<11+48; remove entry(primout);
al w2 1 ;
se w0 0 ; if not ok then
jd -46 ; *** bossfault(46,w2=1);
c.-1, o46, z. ; (bossfault xref)
al w0 1 ; accounts :=
hs w0 2 ; entries :=
hs w0 0 ; converts := 1;
hl w1 x3-d112+d90; slices to release := slices reserved;
jd -1 ; *** testoutput ***
ds w1 x3-d112+d14+6; store in banker operation;
jl. a5. ; end else
\f
; jma 1978.06.12 boss 2, psjobfinis ...59a...
; release (cont.)
a2: al w1 x3-d105+d89; begin
al w3 x3-d105+d112; adjust primout size :
jd 1<11+42; lookup entry(primout);
al w2 2 ;
se w0 0 ; if not ok then
jd -46 ; *** bossfault(46,w2=2);
c.-1, o46, z. ; (bossfault xref)
rl. w2 b100.+6; w2 := absref jobfile page;
j3: rl w2 x2+194 ; segments used := first buf byte
jd -1
ls w2 -9 ; // 512
al w2 x2+2 ; + 2; (because 2 segments still
rl w0 x1 ; remain to be written)
jd -1 ; *** testoutput ***
sn w0 x2 ; if old size = segments used
jl. a5. ; then skip change;
sl w0 x2 ;
jl. a3. ;
al w1 1 ; if old size < segments used then
jd -49 ; *** bossfault(49,w1=1);
c.-1, o49, z. ; (bossfault xref)
a3: rs w2 x1 ; set new size in tail;
jd 1<11+44; change entry(primout,new size);
al w1 2 ;
se w0 0 ; if not ok then
jd -49 ; *** bossfault(49,w1=2);
c.-1, o49, z. ; (bossfault xref)
al w1 0 ; slices used := segments used
wd. w2 b71. ; // slicelength on disc;
se w1 0 ;
al w2 x2+1 ; maybe round up;
bz w1 x3-d112+d90; slices to release :=
ws w1 4 ; slices reserved - slices used;
jd -1 ; *** testoutput ***
hs w2 x3-d112+d90; store(slices used);
hs w1 x3-d112+d14+7; store(slices to release);
a5: al w0 0 ; end;
rl. w2 (b96.) ;
rs w0 x2+12 ; page 3:= 0;
rl. w2 b79. ;
jl. w3 (b93.) ; open(catalock);
a6: ; end offline or internal;
\f
; jma 1978.06.12 boss 2, psjobfinis ...59b...
; release (cont.)
; release restclaims:
rl w0 x3+d111 ; converts:= converts + rest converts;
; accounts:= accounts + rest accounts
ba w0 0 ; + rest converts;
c.-i27,rl w1 x3+d58 z. ; entries:= entries
c. i27,rl w1 x3+d59 ; + rest maincat entries;
hl w1 x3+d58+1 ; slices:= slices + rest slices;
z., aa w1 x3+d14+6 ;
ds w1 x3+d14+6 ; add in operation;
al w1 x3+d14 ;
rl. w2 b111. ;
jl. w3 (b112.) ; open chained(banker,operation);
rl w2 x3+d82 ; (after return op.4 contains net run left)
jl. w3 (b92.) ; lock(psjob answer);
; save runtime:
rl w1 x3+d2 ; runtime := net time
ws w1 x3+d14+4 ; - net run left;
al w0 0 ;
ld w1 13 ; convert to seconds;
wd. w1 b14. ; store value for use in
rs w1 x3+d14+4 ; 'end job'-line and accountrecord;
\f
; jma 1978.06.12 boss 2, psjobfinis ...59c...
; check replace-jobfile (if any).
bz w0 x3+d88 ;
so w0 1<10 ; if replace then
jl. a1. ; begin
rl. w1 (b96.) ;
rl w0 x3+d0 ; page 1:= job file page;
rs w0 x1+8 ;
jl. w3 (b60.) ; get pages;
rl. w2 b100.+8;
dl w1 x2+d100+2 ;
ds w1 x3+6 ; param 1:= job file name;
dl w1 x2+d100+6 ;
ds w1 x3+10 ;
dl w1 x2+d101+2 ;
j2: ds w1 x3+227 ;
j1: al w0 x3+257 ; w0 call(get file);
dl. w3 b144. ;
jl. w1 (b128.) ; w0:= case return of
am -1 ; replace job file unreadable;
am 34 ; replace job file too long;
al w0 0 ; replace;
rl. w3 b100.+8; w3:= job descr page;
bl w1 x3+d104 ; if finis cause = normal finis
se w1 4 ; or finis cause = job file exhausted
sn w1 3 ; then finis cause:= w0;
hs w0 x3+d104 ;
bz w2 x3+d88 ;
la. w2 b121. ;
se w0 0 ; if w0 <> replace then
hs w2 x3+d88 ; replace bit:= 0;
a1: bz w0 x3+d88 ; end;
sz w0 1<3 ;
jl. a7. ;
rl w0 x3+d5 ; if (offline or internal)
sz w0 1<0 ; and finis output.no
jl. c50. ; then goto receipt;
a7: ;
b129=j1+1, b145=j2+1, b72=j3+1
e. ;
\f
; boj 15.11.71 boss 2, psjobfinis ...60...
; clear the remaining unused part of the primout buffer,
; thereby provoking a buffer change, which enables the end
; job message to start at the beginning of a segment.
b. a9, j9 w. ;
rl w0 x3+d0 ;
rl. w2 (b96.) ;
rs w0 x2+12 ; page 3:= job file page;
rl w0 x2+14 ;
rs w0 x2+8 ; page 1:= page 4(job descr);
jl. w3 (b60.) ; get pages;
rl. w2 b100.+6; w2:= abs ref job file page;
j0: rl w0 x2+193 ; comment move variables from job file page
rl. w1 (b96.) ; to job description page;
rs w0 x1+12 ; page 3:= virt buf;
j1: rl w0 x2+191 ; w30:= rest room on page;
j2: rl w1 x2+194 ; w32:= first buf byte;
ds w1 x3+d14+32 ; first buf byte:=
al w1 x1+512 ; first buf byte + 512;
j3: rs w1 x2+194 ;
j4: rl w0 x2+197 ;
rs w0 x3+d14+28 ; w28:= terminal full;
; comment w18...w26 unused;
jl. w3 (b60.) ; get pages;
rl. w2 b100.+6; clear rest:
al w1 x2 ;
ws w2 x3+d14+30 ; w2:= page - rest;
al w0 0 ; w1:= page;
a0: sl w2 x1 ; rep:
jl. a1. ; if w2 = w1 then goto exit;
rs w0 x2+512 ; page(w2 + 512):= 0;
al w2 x2+2 ; w2:= w2 + 2;
jl. a0. ; goto rep;
a1: jl. w2 c23. ; output page 3;
b74=j0+1, b75=j1+1, b76=j2+1, b77=j3+1, b78=j4+1
e. ; end a-names, j-names
\f
; boj 15.11.71 boss 2, psjobfinis ...61...
; comment pack finis text on primary output.
b. j90 w.
b. a20 w. ;
rl. w2 b100.+6;
j31=0
al w0 -2 ; start signal to printer
rs w0 x2+j31 ; or terminal output;
j31=j31+2
al w0 0 ;
al w1 x2+j51 ;
a10: rs w0 x1 ; clear the output buffer
al w1 x1-2 ;
sl w1 x2+j31 ;
jl. a10. ;
dl. w1 b34.+2 ; move 4 bytes;
ds w1 x2+j31+2 ;
j31=j31+4
; write runtime, 6 bytes:
rl w1 x3+d14+4 ; w1 := runtime;
al w2 x2+j31 ; w2:=current text base;
jl. w3 c8. ; write integer;
rl. w3 b100.+2; w3:=abs page 1;
al w2 x2-j31 ; w2:=text base;
j31=j31+6
bl w0 x3+d88 ; if information not wanted
bz w1 x3+d102 ; and online
sz w0 1<3 ; or convert from commandio
sn w1 0 ; then omit further textual information else
sz w0 1<9 ;
jl. a9. ; begin
dl. w1 b22.+2 ; move 4 bytes;
ds w1 x2+j31+2 ; <:sec :>;
j31=j31+4
dl. w1 b34.+6 ; <:<10><10>end :><:job :>;
ds w1 x2+j31+2 ; move 4 bytes;
j31=j31+4
dl w1 x3+d19+2 ; move 8 bytes;
ds w1 x2+j31+2 ;
dl w1 x3+d19+6 ; job name;
ds w1 x2+j31+6 ;
j31=j31+8
dl. w1 b23.+2 ; move 4 bytes;
ds w1 x2+j31+2 ; <: log :>;
j31=j31+4
rl. w3 b66. ; move 8 bytes;
dl w1 x3+2 ;
ds w1 x2+j31+2 ;
dl w1 x3+6 ; <operator name>;
ds w1 x2+j31+6 ;
j31=j31+8
dl. w1 b26.+2 ; move 4 bytes;
ds w1 x2+j31+2 ; <: date:>;
j31=j31+4
; end;
a9:
\f
; boj 15.11.71 boss 2, psjobfinis ...62...
; generate date and time:
jd 1<11+36; get clock(w0, w1);
ld w3 -100 ;
wd. w1 b27. ; w1:= fourmin:= clock // (10000 * 60 * 4);
wd. w0 b28. ; clock:= clock mod (10000 * 60 * 4);
wd. w3 b14. ; min:= clock // (10000 * 60);
rs. w0 b105. ; clock:= clock mod (10000 * 60);
al w0 0 ; w3:= sec:= clock // 10000;
wd. w1 b29. ; w1:= days:= fourmin // 360;
rx w3 0 ; w0:= w3:= sec; w3:= fourmin:= fourmin mod (15 * 24);
al w2 0 ; w3:= hour:= fourmin // 15;
wd. w3 b30. ; w2:= fourmin:= fourmin mod 15;
as w2 2 ;
wa. w2 b105. ; w2:= min:= fourmin * 4 + min;
ds. w3 b104.+2; save min, hour;
ds. w1 b104.+6; save sec days;
ld w0 -100 ; julian calendar:
wd. w1 b32. ; w1:= years:= days // 1461 * 4 + 64;
as w1 2 ; w0:= days:= days mod 1461;
al w1 x1+68 ;
se w0 59 ; if days = 59 then
jl. a1. ; begin comment leap year;
al w2 2 ; w2:= month:= 2;
al w3 29 ; w3:= date:= 29;
jl. a3. ; goto date found;
; end;
; comment b104: min, hour, sec, month, date, year
h. a0=k-1
-1, 30, 58, 89,119,150 ; month table:
180,211,242,272,303,333 ; accumulated -1
w.
a1: sl w0 59+1 ; if days > 59 then
bs. w0 1 ; days:= days - 1;
wd. w0 b33. ; year:= year + days // 365;
wa w1 0 ; days:= days mod 365;
al w2 13 ; w2:= month:= 13;
a2: al w2 x2-1 ; search month:
bl. w0 x2+a0. ; w2:= month:= month - 1;
sh w3 (0) ; if days <= month table(month)
jl. a2. ; then goto search month;
ws w3 0 ; date:= days - month table month;
a3: rs. w1 b104.+10; date found: save year;
ds. w3 b104.+8; save month, date;
al. w2 b104. ; index:= 0;
a4: rl w1 x2 ; rep: w1:= b104(index);
jl. w3 c41. ; ciffer 1;
rs. w0 b106. ;
jl. w3 c42. ; ciffer 2;
lo. w0 b106. ;
lo. w0 b18. ; b104(index):= point < 16 + ciffer 2 < 8 + ciffer 1;
rs w0 x2 ;
al w2 x2+2 ; index:= index + 2;
sh. w2 b104.+10; if index <= 10 then
jl. a4. ; goto rep;
\f
; boj 15.11.71 boss 2, psjobfinis ...63...
rl. w2 b100.+6; w2:= abs ref page 3;
rl. w0 b35. ; <: 19:>;
rl. w1 b104.+10; year;
ls w1 8 ; omit point;
ds w1 x2+j31+2 ;
dl. w1 b104.+8; month, date
ds w1 x2+j31+6 ;
al w3 32 ;
dl. w1 b104.+4; space, hours;
ld w0 8 ; convert point to space;
al w3 x3+32-46 ;
ds w0 x2+j31+10 ;
rl. w0 b104. ;
ds w1 x2+j31+14 ; min, secs;
j31=j31+16
rl. w0 b36. ; move 2 bytes;
rs w0 x2+j31 ; <:<10>:>;
j31=j31+2 ;
j51=j31
rl. w1 (b96.) ; move finis text:
rl. w0 b107. ; page 2:= finis cause text page;
rs w0 x1+10 ;
jl. w3 (b60.) ; get pages;
dl. w2 b100.+6; w2:= base of end job buffer page;
ba w1 x3+d104 ;
bl w1 x1+j80 ; w1:= abs ref finis text(finis cause);
wa. w1 b100.+4;
al w0 j31+2 ; w0:= length of previous text +
ba w0 x1-1 ; signal word + variable text;
wa w2 0 ; w2:= param base;
bl w3 x1-2 ;
rs. w1 b106. ; save finis text;
rl. w1 b100.+2; w1:= description page;
jl. x3+j32. ; goto param action;
j32: rl. w3 b100.+2; after param action:
rl. w1 b106. ; w1:= ref finis text;
wa w0 x3+d14+30 ;
rs w0 x3+d14+30 ; rest:= rest + w0;
rl. w0 b36. ;
rs w0 x2-2 ; <:<10>:>
al w0 -1 ; set signal to printer
rs w0 x2 ; or terminal output;
al w0 25 ; end signal, in case of
rs w0 x2+2 ; printing by saveconv;
rl. w2 b100.+6; w2:= text base;
al w3 x2 ; w3:= limit:=
ba w3 x1-1 ; text base + length(cause);
a5: sl w2 x3 ; while w2<limit
jl. a8. ; do begin
rl w0 x1 ; move(w1,w2)
rs w0 x2+j31 ;
al w1 x1+2 ; w1:=w1+2
al w2 x2+2 ; w2:=w2+2
jl. a5. ; end
a8: rl. w3 b100.+2;
jl. w2 c23. ; output page 3;
\f
; boj 15.11.71 boss 2, psjobfinis ...64...
c50: rl. w2 (b96.) ; receipt:
rl w0 x2+14 ;
rs w0 x2+8 ; page 1:= page 4; (job descr page)
al w0 0 ; page 3:= 0;
rs w0 x2+12 ;
jl. w3 (b60.) ; get pages;
rl w1 x3+d108 ; w1 := ref sender table entry;
al w2 0 ; w2 := ref message buffer;
rx w2 x1+8 ; ref message buffer := 0;
al w0 1 ; w0 := normal answer;
al w1 x3+d14+10 ; w1:= ref working space;
sl w2 2 ; if no one else did then
jd 1<11+22; send answer;
bz w0 x3+d88 ;
so w0 1<3 ; if job state = online then
jl. a6. ; begin
rl w2 x3+d14+28 ;
jl. w3 (b93.) ; open(terminal full);
rl w1 x3+d14+30 ; rest:= rest // 2 - 1;
ls w1 -1 ; comment rest does not contain the final nl
rl w2 x3+d14+28 ; w2:= abs ref terminal full
wa w1 x2 ; sem(w2):= sem(w2) + rest;
rs w1 x2 ;
jl. a7. ; end else
a6: rl w0 x3+d5 ; begin
sz w0 1<0 ; if primout.no then
jl. a7. ; skip convertion of primout
dl. w1 b117. ;
al w3 x3+d105 ; set base(boss private);
jd 1<11+72;
al w3 x3+d112-d105;
jd 1<11+64; remove process(primout);
se w0 0 ; if not ok then
c.-1, o47, z. ; (bossfault xref)
jd -47 ; boss fault(47);
rl. w2 b81. ;
jl. w3 (b114.) ; lock chained(convert free);
rl. w2 b150. ;
jl. w3 (b92.) ; lock(paper manipulation);
rl. w1 b100.+4;
bz w0 x3+d90 ; release slices:=output slices
ls w0 12 ; paper:=0
al w3 1 ; type:= prim output;
ds w0 x1+4 ;
ld w0 -100 ; op + 40, 42:=0;
ds w0 x1+42 ;
ds w0 x1+46 ; op+44, 46:=0;
rl. w2 b100.+2; w2:= abs ref page 1;
dl w0 x2+d112+2 ;
ds w0 x1+8 ; op + 6, ...,+12:= doc name
dl w0 x2+d112+6 ; primary output;
ds w0 x1+12 ;
dl. w0 b117. ; w3w0 := boss private interval;
ds w0 x1+18 ; op + 16, +18:= boss priv base;
\f
; boj 15.11.71 boss 2, psjobfinis ...65...
b. j5 w.
dl w0 x2+d23+2 ;
ds w0 x1+24 ; op + 24,...+28:= user name;
dl w0 x2+d23+6 ;
ds w0 x1+28 ;
rl w0 x2+d20 ; op + 20:= project;
rs w0 x1+20 ;
rl w0 x2+d61 ; op + 30:= addr of
rs w0 x1+30 ; user id in user cat;
dl w0 x2+d26 ;
ds w0 x1+66 ; set catalog base = project base (not maxbase)
dl w0 x2+d122 ; name table addr of parent rb device
ds w0 x1+50 ; creation number of parent rb device
rl w0 x2+d122 ; rb term ident
rs w0 x1+52 ;
dl w0 x2+ d121 ;
ds w0 x1+56 ; rb printername
al w0 14 ;
rs w0 x1+62 ; device kind:=printer;
c. i190-1
; if any printername in the convertbuffer then put it into the remote que
sn w3 0 ; and primout to rbprinter then
jl. a11. ; begin
rl. w2 b151. ;
jl. w3 (b112.) ; openchained(rbprinter queue)
rl. w2 b152. ;
jl. w3 (b93.) ; open(rbprinter wait)
jl. a12. ; end else
z. ; begin
a11: rl. w2 b82. ;
jl. w3 (b112.) ; openchained(paper queue)
rl. w2 b83. ;
jl. w3 (b93.) ; open(printer wait)
a12: ; end
rl. w2 b150. ; open (paper manipulation);
jl. w3 (b93.) ;
\f
; re 2.12.74 boss 2, psjobfinis ...65a...
a7: ; end offline or internal;
bl w0 x3+d43 ;
bs w0 x3+d98 ;
ls w0 12 ; page 1 + 8:= (mounts - rest mounts) <12 +
hl w0 x3+d92 ; tape count;
rs w0 x3+8 ; comment kind:= finis;
al w0 1 ; page 1 + 4:= 1;
rl w1 x3+d14+4 ; page1+6:=time used; comment is set by release all;
ds w1 x3+6 ;
dl w1 x3+d23+2 ;
ds w1 x3+12 ;
dl w1 x3+d23+6 ;
ds w1 x3+16 ; move username
rl w1 x3+d20 ;
rs w1 x3+18 ; move project no
rl. w2 (b96.) ;
rl w0 x3+d0 ; page 3:= job file page;
rs w0 x2+12 ;
jl. w3 (b60.) ; get pages;
rl w1 x3+d136 ; w1:=summa waiting times
al w0 0 ;
wd. w1 b17. ; / 60;
sl w1 2047 ; if w1>byte-size then
al w1 2047 ;
ls w1 12 ; w1:=byte-size;
hl w1 x3+d140 ; right byte(w1):=no of input lines;
bz w0 x3+d88 ; if online then
so w0 1<3 ; begin
jl. a13. ; w1:=w1+1;
al w1 x1+1 ;
am. (b100.+6);
j0: rl w0 +179 ; w0:=job state;
so w0 1<5 ; if conversational then
al w1 x1+1 ; w1:=w1+1;
a13: ; end;
rs w1 x3+20 ; page1+20:=waiting time, no of inputlines;
rl. w1 (b96.) ;
rl. w0 b91. ; page 3:= virt account buf;
rs w0 x1+12 ;
dl. w3 b89. ; call outrec account;
jl. w1 (b95.) ;
bz w0 x3+d14+3 ; w0:=psjob no;
bz w1 x3+d88 ; w1:=psjob status;
; if replace then
rl. w3 b84. ; rel entry:=replace rel;
sz w1 1<10 ;
jl. a15. ;
rl. w3 b73. ; if accountjob then
sn w0 2 ; rel entry:=accountjob rel;
jl. a15. ;
so w1 1<3 ; if offline then
am b85-b86; rel entry:=offline rel else
rl. w3 b86. ; rel entry:=online rel;
a15: rl. w2 b87. ; w2:=virt psjobstart;
jl. (b115.) ; page jump (rel entry);
b154 = j0+1
e.e. ; end j-names; end a-names
\f
; kll 15.3.72 boss 2, psjobfinis ...66...
j40: al w1 x1+d100-12; text on descr rel d100:
j33: ba. w0 j38. ; text param:
rs. w0 b104. ; save w0;
dl w0 x1+14 ;
ds w0 x2+0 ; move x1+12,...x1+18 to
dl w0 x1+18 ; param field;
ds w0 x2+4 ;
rl. w0 b104. ;
j38=k+1 ; displacement constant;
al w2 x2+8 ; w2:= w2 + param length;
jl. j32. ; goto after param action;
j39=k+1 ; displacement constant
j42: al w1 x1+6 ; integer on descr rel 20:
j34: ba. w0 j39. ; integer param:
al w2 x2-2 ; text base:= w2-2;
rl w1 x1+14 ;
jl. w3 c8. ; write integer(w1+14);
al w2 x2+8 ; w2:= w2 + param length;
jl. j32. ; goto after param action;
j44: rl w3 x1+12 ; integer or text:
se w3 0 ; if first word of text <> 0 then
jl. j33. ; goto text on descr else
jl. j34. ; goto integer param;
j46: ba. w0 j39. ; octal integer and text:
al w2 x2-2 ; text base:= w2-2;
rl w1 x1+20 ;
al w3 8 ; radix := 8;
rs. w3 b8. ;
jl. w3 c8. ; write integer(x1+20);
al w3 10 ; radix := 10 (normal);
rs. w3 b8. ;
al w2 x2+8 ; w2:= w2+param length;
rl. w1 b100.+2; restore w1:=desc;
jl. j33. ; goto text param;
f23: ; end of finis page:
\f
; boj 15.11.71 boss 2, psjobfinis ...67...
f21:j30: b. a50 w. ;start of finis text page
; j35 no param
; j36 text param on descr rel d100
; j41 text on descr rel 12...18
; j43 integer on descr rel 20
; j45 integer or text on descr rel 12...18
; j47 text on desc rel 12...18 and integer (octal) on desc rel 20
h. j36,a0 w. j0: <:replaced by job file: :>, a0=k-j0
h. j35,a1 w. j1: <:killed by user :>, a1=k-j1
h. j35,a2 w. j2: <:time exceeded :>, a2=k-j2
h. j35,a3 w. j3: <::>, a3=k-j3 ; normal finis
h. j35,a4 w. j4: <:job file exhausted:>, a4=k-j4
h. j35,a5 w. j5: <:job file unreadable:>, a5=k-j5
h. j35,a6 w. j6: <:killed by operator:>, a6=k-j6
h. j45,a7 w. j7: <:mode unknown:>, a7=k-j7
h. j35,a8 w. j8: <:output exceeded:>, a8=k-j8
h. j43,a9 w. j9: <:not special station: :>, a9=k-j9
h. j43,a10 w. j10: <:special station not ordered: :>, a10=k-j10
h. j41,a11 w. j11: <:ring not allowed on tape: :>, a11=k-j11
h. j41,a12 w. j12: <:tape reserved for other project: :>, a12=k-j12
h. j41,a13 w. j13: <:stations exceeded at mount :>, a13=k-j13
h. j35,a14 w. j14: <:suspends exceeded:>, a14=k-j14
h. j35,a15 w. j15: <:login claims exceeded:>, a15=k-j15 ;
h. j41,a16 w. j16: <:tape used by other job: :>, a16=k-j16
h. j35,a17 w. j17: <:accounts exceeded:>, a17=k-j17
h. j35,a18 w. j18: <:convert file unreadable:>, a18=k-j18
h. j35,a19 w. j19: <:max waiting time exceeded:>, a19=k-j19
h. j35,a20 w. j20: <:bad fp:>, a20=k-j20
h. j35,a21 w. j21: <:size too small for fp:>, a21=k-j21
h. j35,a22 w. j22: <:no interrupt address:>, a22=k-j22
h. j41,a23 w. j23: <:mount special after mount :>,a23=k-j23
h. j35,a24 w. j24: <:corelock not allowed:>, a24=k-j24
h. j35,a25 w. j25: <:corelock exceeded:>, a25=k-j25
h. j41,a26 w. j26: <:load area in use :>, a26=k-j26
h. j47,a27 w. j27: <:hard error on initial program or swop area, octal status = :>, a27=k-j27
h. j45,a28 w. j28: <:too few resources on :>, a28=k-j28
h. j35,a29 w. j29: <:job name conflict:>, a29=k-j29
h. j45,a30 w. j60: <:program does not exist :>, a30=k-j60
h. j35,a31 w. j61: <:size too small:>, a31=k-j61
h. j35,a32 w. j62: <:temp exceeded:>, a32=k-j62
h. j36,a33 w. j63: <:replace file unreadable :>, a33=k-j63
h. j36,a34 w. j64: <:replace file too long :>, a34=k-j64
h. j35,a35 w. j65: <:temp exceeded job file:>, a35=k-j65
h. j35,a36 w. j66: <:card deck exhausted:>, a36=k-j66
h. j45,a37 w. j67: <:limited :>, a37=k-j67
h. j45,a38 w. j68: <:option unknown :>, a38=k-j68
h. j45,a39 w. j69: <:param at :>, a39=k-j69
h. j45,a40 w. j70: <:syntax at :>, a40=k-j70
h. j45,a41 w. j71: <:line too long after :>, a41=k-j71
h. j45,a42 w. j72: <:device unknown :>, a42=k-j72
h. j47,a43 w. j73: <:hard error on convert file or temporary copy, octal status = :>,a43=k-j73
h. j35,a44 w. j74: <:job creation impossible:>, a44=k-j74
h. j35,a45 w. j75: <:file is no text file:>, a45=k-j75
e. ; a-names
h. j80=k-j30
j0-j30, j1-j30, j2-j30, j3-j30, j4-j30, j5-j30, j6-j30, j7-j30
j8-j30, j9-j30, j10-j30,j11-j30,j12-j30,j13-j30,j14-j30,j15-j30
j16-j30,j17-j30,j18-j30,j19-j30,j20-j30,j21-j30,j22-j30,j23-j30
j24-j30,j25-j30,j26-j30,j27-j30,j28-j30,j29-j30
j60-j30,j61-j30,j62-j30,j63-j30,j64-j30,j65-j30,j66-j30,j67-j30
j68-j30,j69-j30,j70-j30,j71-j30,j72-j30,j73-j30,j74-j30,j75-j30
w.
j35=j32-j32,j36=j40-j32,j41=j33-j32,j43=j42-j32,j45=j44-j32,j47=j46-j32
f22=k-f21 ; length of page
e. ; end j-names
\f
; boj 15.11.71 boss 2, psjobfinis ...68...
b. a9 w.
c24: ; start of init;
; initialization
; reserve virtual
al w1 f24 ; w1:= length of break page;
al w0 i28 ; w0:= drum (0) or disc (1);
jl. w3 (f11.) ; reserve virtual(w0, w1) virt ref page 0:=w2;
rs. w2 f16. ; save virt ref break
rl. w1 a1. ; w1:=length finis page
al w0 i28 ;
jl. w3 (f11.) ; reserve virt(finis page)
rs. w2 a2. ; save virt of finis page
am -2047 ;
am -2000 ;
rs. w2 b38.+4047; and on break page;
al w0 i28 ; disc
al w1 f20 ; length of clean catalog page
jl. w3 (f11.) ; reserve virt;
am -2047 ;
al. w0 f19.+2047; start
jl. w3 (f13.) ; move to virt;
am -2047 ;
rs. w2 b24.+2047; save virt of clean catalog
rs. w2 a3. ; on finis page;
al w0 i28 ; disc
al w1 f22 ; length of finis text page;
jl. w3 (f11.) ; reserve virt;
al. w0 f21. ; start
jl. w3 (f13.) ; move to virt;
am -2047 ;
rs. w2 b107.+2047; save virt on finis page;
; initialize page constants
rl w1 66 ;
rl w1 x1+76 ; boss private base
al w1 x1+1 ; on finispage:=
al w0 x1 ; boss std low+1;
am -2047 ;
ds. w1 b117.+2047;
\f
; kll 12 03 73 boss 2, psjob finis ...69...
; initialize externals
al w0 c20-f19;
am -2047 ;
rs. w0 b25.+2047;
al w0 c2-b100;
am -2047
am -2000 ;
rs. w0 b39.+4047
jl. w3 (2) ; set externals;
f25: 40 ;
a3: 0 , 495 ; virt ref clean catalog;
a2: 0 , 417 ; virt ref finis page;
f16: 0 , 426 ; virt ref break page;
c2-b100, 427 ; finis(finiscause);
c0-b0 , 353 ; receive timer operation;
c7-b0 , 352 ; terminate;
c9-b0 , 355 ; break request;
c10-b0 , 357 ; timer request;
c12-b0 , 351 ; user kill;
c13-b100, 354 ; finis request;
c14-b0 , 356 ; replace request;
c15-b0 , 358 ; input exhausted;
c16-b0 , 359 ; hard error primary input;
c17-b100, 360 ; end medium prim output;
c18-b0 , 361 ; mount error;
c46-b0 , 362 ; swop out and wait;
c20-f19 , 363 ; clean catalog;
c4-b0 , 481 ; corelock request;
c11-b0 , 482 ; coreopen request;
c38-b0 , 493 ; high priority start;
c. e25-1
c5-b100, 478 ; return from mounter finis;
z.
0 , -1000 ; end of externals;
\f
; kll 12 03 73 boss 2, psjob finis ...70...
; move to virtual w1 = length of code, w2 = virt ref page 0;
rl. w1 a5. ;
a4: al. w0 x1+0 ; w0:= abs ref breakpage;
rl. w2 f16. ; w2:=virt ref breakpage
al w1 f24 ; w1:=length breakpage
jl. w3 (f13.) ; move to virtual
am -2047 ;
al. w0 b100.+2047;
rl. w2 a2. ; virt finis
rl. w1 a1. ; w1:= length of finis page;
jl. w3 (f13.) ; move finispage to virtual
am.(4),jl.4,h1. ; goto next init
; variables used by initialisation
a1: f23-b100 ; length of finis page
a5: b0-a4 ; rel start of breakpage;
f11: 12 ; ref reserve virtual
f12: 0 ; ref externals
f13: 13 ; ref move to virtuals
f14: 15 ; ref end initialization
e. ; end a-names
e. ; end d-names
i.e. ; end b-names, c-names, f-names
h4=s0, h5=s1; final check sums
e.e.e. ; end hnames, options , tjob
\f
▶EOF◀