|
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◀