|
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: 170496 (0x29a00) Types: TextFile Names: »tjobstart«
└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ. └─⟦b2ec5d50f⟧ └─⟦0b92c64d5⟧ »ctb« └─⟦this⟧
(bjobstart = set 1 disc bjobstart = slang proc.options proc.jobdescr scope user bjobstart print bjobstart integer words.4 0.6 ) b. w. p.1 \f ; btj 20.12.72 contents boss 2, tjobstart ...0a... s. a5, b30, f9, g15, j260, h1 w. ; s0=0 , s1=1 h0 , h1 78 07 14, 134 ; version id: ; codepage 1 (ext 472) ; ; c60 3 job command ; c118 4 job birth ; prep bs ; create internal ; create swop area ; 5 change length of primary out ; set bsclaims for job ; c117 6 proc set bsclaim (kit on) ; 7 set param for copy ; 8 modify internal ; 9 start job ; 10 convert ; 12 alarms from code page 1 ; ; ; initialization ; 14 init external table ; 16 move definition to ext ; create device words ; 17 reserve and move code ; 18 init each incarnation ; ; ; codepage 2 (ext 451) ; ; 21 entries from codepage 5 ; c26(abs)22 catproc ; c27 25 set claims ; c25(abs) ; 27 expected finistime ; 27a create primary output area and process ; 28 init primary output ; 30 reservation of job tape area ; 31 output expected finistime ; ; 33 alarms from codepage 2 \f ; btj 20.12.72 contents boss 2, tjobstart ...0b... ; codepage 3 (ext 400) ; ; j36 36 wait for next job ; trf ; tre ; 36a card ; j37 37 online job ; wait for a job file ; c24(abs)38 prepare jobfile ; 38a convert from commandio ; j41 39 replace job ; internal job ; j83 39a accountjob entry ; 40 run job ; central read ; c23(abs)46 go job ; 47 command table ; 48 command actions ; pres ; onli ; mini ; cbuf ; prio ; susp ; stat ; int ; buf ; area ; key ; moun ; acco ; tape ; 48a size ; core ; prog ; output ; 49 late ; time ; perm ; 50 temp ; ; 51 alarms from codepage 3 ; ; \f ; sm 75.06.02 contents boss2, tjobstart ...0c... ; codepage 4 ( ext 473) ; ; c98 53 device command ; c39 54 include user and wait device ; c36 56 copy area ; c34 57 create job ; 58 reserve all ; ; 58a alarms from codepage 4 ; ; c110 60 request alarm ; c37 63 set alarm claims ; c80 64 create alarm job ; ; ; codepage 5 (ext 471) ; ; c62 66 load command ; c40 72 empty cardreader \f ; pm 20.12.72 contents boss 2, tjobstart ...0d... ; finis cause finis output request output and answers ; ; 0 replaced by job file ok ; 1 killed by user no psjob idle ; 2 time exceeded newjob file not permanent ; 3 (normal finis) newjob file not exist ; 4 job file exhausted ; 5 job file unreadable jobfile unreadable ; 6 killed by operator ; 7 mode unknown <file> user index too large <user> ; 8 output exceeded illegal identification <user> ; 9 not special station user index conflict <user> ; 10 special station not ordered ; 11 ring not allowed on tape job file too long ; 12 tape reserved for other project ; 13 stations exceeded at mount ; 14 suspends exceeded ; 15 login claim exceeded ; 16 tape used by other job ; 17 accounts exceeded for fp ; 18 convert file unreadable ; 19 max waiting time exceeded attention status at remote batch terminal(newjob-convert) ; 20 bad fp device unknown (newjob-convert-message) ; 21 size too small for fp device not printer (newjob-convert-message) ; 22 no interrupt address parent device disconnected(newjob-convert-message) ; 23 mount special after mount remote batch malfunction (not used) ; 24 corelock not allowed ; 25 corelock exceeded ; 26 load area in use <file> ; 27 hard error on <file> <status> ; 28 too few resources on <kit> ; 29 job name conflict ; 30 program does not exist <prog> ; 31 size too small ; 32 temp exceeded <file> temp exceeded ; 33 replace file unreadable ; 34 replace file too long ; 35 temp exceeded job file ; 36 card deck exceeded ; 37 limited <option> ; 38 option unknown <option> option unknown <option> ; 39 param at <option> param at <option> ; 40 syntax at <option> syntax at <option> ; 41 line too long after <option> line too long after <option> ; 42 device unknown <device> ; 43 hard error on convert file <file> <status> ; 44 job creation impossible ; 45 file is no text file \f ; pm 8.12.71 boss 2, tpsjobstart, ...1... m. boss 2 tjobstart a3: k=10000 ; b0., b1., b3., b4., b6., b7. f1., f5., f2., f4., f8., f9. j0., j1., j2., j3., j4., j5., j6., j7., j8., j9. j10., j11., j12., j13., j14., j15., j16., j17., j18., j19. j20., j21., j22., j23., j24., j25., j26., j27., j28., j29. j30., j31., j32., j33., j35., j45., j46., j47., j48., j49. j50., j51., j52., j53., j56., j57., j58., j59., j60., j61. j62., j63., j64., j66., j67., j68., j69., j70., j44., j38. j71., j72., j73., j74., j78., j79., j82., j84., j85., j86. j87., j88., j89., j91., j92., j97., j98., j99., j100. j101.,j106.,j107.,j108.,j109.,j110. j112.,j113.,j114.,j115.,j116.,j117.,j118.,j119.,j122.,j123. j124.,j126.,j127.,j128.,j129.,j130.,j131.,j132.,j65., j76. j90., j133.,j134.,j135.,j136.,j137.,j42., j54., j138.,j139. j140.,j141.,j142.,j39. ,j143.,j40. ,j144.,j125.,j145.,j146. j55. ,j120.,j77. ,j80. ,j81. ,j121.,j147.,j148.,j149.,j150. j151.,j152.,j153.,j154.,j155.,j156.,j157.,j158.,j159.,j161. j162.,j163.,j164.,j165.,j166.,j167.,j168.,j169.,j170.,j171. j172.,j173.,j174.,j94., j95., j160.,j175.,j176.,j177.,j178. j179.,j182.,j183.,j184.,j185.,j186.,j187. c. i178-1, j188., j189. z. j190.,j191.,j192.,j193.,j194.,j195.,j197.,j198.,j199. j200.,j201.,j202.,j203.,j204.,j205.,j206.,j207.,j208.,j209. j210.,j211.,j212.,j213.,j214., j216.,j217. 0 ; am. (4) ; jl. 2 ; g4. ; goto initialize; g3: ; base of psjobdescr b. c150 w. ; p.2 ; input psjob descr g2= d109 ; length of psjob descr g1: ; base of psjob code \f ; pm 3.2.72 boss 2, tpsjobstart, ...2... ; codepage 1 b. b90 w. b61: 0 ; page 0 base b14: 0 ; - 1 0 ; - 2 b2: 0 ; - 3 b11: 0 ; - 4 11<12 + 0 ; page ident: code page 1 b1: j140:7 ; get page j145:-2 ; boss privat interval b8: j125:-1 ; b16: j126:8 ; page jump b27: j136:1 ; send and wait b28: j127:25 ; call b29: j128:26 ; curr corutine descr b30: j129:6 ; open op b31: j87: 5 ; lock chained b33: j130:67 ; banker que b35: j137:4 ; open b36: j131:3 ; lock b63: <:disc:>,0,0 ; b39: j132:288 ;+8 slice length on disc b65: <:drum:>,0,0 ; b64: j44: 287 ; slice length on drum j134: 415 ; b40: j135: 413 ; prepare bsadjust j7: 415 ; b42: j119:414 ; terminate bs adjust j65: 473 ; copy area virt b62: c36 ; - - rel b69: j71: 290 ; base boss kit table b70: j72: 291 ; last - - - b71: j73: 32 ; prepare access b72: j74: 33 ; terminate - b79: j190:74 ; catalock sem j115:415 ; transfer perm claim virt b77: j116:428 ; - - - rel b80: j86: 233 ; savebuffer virt. \f ; pm 3.2.72 boss 2, tpsjobstart, ...3... ; job <username>, <index>, <project> b. a3 w. ; c60=-b61. ; rl w1 x3+d23 ; if named then goto next command; se w1 0 ; jl. a3. ; dl w1 x3+d11+2 ; username:= param(1); ds w1 x3+d23+2 ; dl w1 x3+d11+6 ; ds w1 x3+d23+6 ; dl w1 x3+d11+18 ; w1:= param(3); w0:= param type(3); se w0 -1 ; if w0 = end element then jl. a1. ; begin dl w1 x3+d11+10 ; w0:= 0; w1:= param(2); jl. 4 ; end else a1: rl w0 x3+d11+10 ; w0:= param(2); ds w1 x3+d20 ; index:= w0; project:= w1; a3: dl w1 x3+2 ; save return ds w1 x3+6 ; rl w0 x3+d69 ; save login restclaim rl w1 x3+d67 ; ds w1 x3+10 ; dl. w3 a2. ; w23:= init psjob var; jl. w1 (b28.) ; call; jl. c120. ; user index too big jl. c121. ; project or user unknown jl. c122. ; user index conflict dl w1 x3+10 ; get saved login restclaim rs w0 x3+d69 ; rs w1 x3+d67 ; al w1 c38 ; rs w1 x3+d13 ; command state:= c38; bl w0 x3+d88 ; if not card job then sz w0 1<5 ; jl. a0. ; bl w1 x3+d30 ; remove online card from sz w1 1<8 ; al w1 x1-1<8 ; std device word and from hs w1 x3+d30 ; bl w1 x3+d65 ; so w1 1<8 ; max device word; al w1 x1+1<8 ; hs w1 x3+d65 ; a0: dl w3 x3+6 ; return jl. (b16.) ; j4: 159 ; init psjob var (virt) a2: j5: 160 ; - - - (rel) e. ; \f ; pm 3.2.72 boss 2, tpsjobstart, ...4... b. a9 w. ; job birth a2: 7 ; constant pk mask c118=k-b61 ; prepare bs adjust: dl. w3 b40. ; jl. w1 (b28.) ; prepare bsadjust; al w0 0 ; swoparea name:= 0; rs w0 x3+d107 ; bl w0 x3+d88 ; sz w0 1<9 ; if not convert then jl. a8. ; begin rl w1 66 ; set catalog base to boss std interval; dl w1 x1+78 ; al w3 x3+d105 ; jd 1<11+72; ; create internal: bl w1 x3+d66-d105; protection key:= first key in al w1 x1-1<8 ; protection register; ns w1 3 ; ac w1 x1+15 ; la. w1 a2. ; hs w1 x3+d66+1-d105; al w1 x3+d53-d105; w1:= addr of job params; al w3 x3+d19-d105; w3:= addr of job name; jd 1<11+56; create process; se w0 0 ; if result <> 0 then jl. c112. ; goto create error; jd 1<11+4 ; rs w0 x3+d106-d19; process descr addr:= process descr addr(proc name); rl w1 x3+d108-d19; sendertable+0 := process descr addr(proc name); rs w0 x1+0 ; dl w1 x3+d24+4-d19; set catalogbase(job):=user interval jd 1<11+72; end; a8: dl. w1 b8. ; set catalog base to boss private base; rl. w3 b14. ; al w3 x3+d105 ; jd 1<11+72; al w3 x3-d105+d19; ; create swop area: bl w1 x3-d19+d95; tailsize:= swoparea length*slicelength wm. w1 b39. ; rs w1 x3-d19+d15; al w1 x3-d19+d15; w1:= tail addr; al w3 x3-d19+d107; w3:= swop area name addr; al w0 5 ; set timer op rs w0 x3+12 ; jd 1<11+40; create area; sn w0 0 ; if result = 0 then jd 1<11+52; create area process; se w0 0 ; if result <> 0 then c.-1, o10, z. ; (bossfault xref) jd -10 ; boss alarm; jd 1<11+8 ; reserve process; al w2 x3 ; w2:=name addr al. w1 0 ; w1:=dummy mess jl. w3 (b27.) ; send and wait(dummy) bl w0 x3+d88 ; sz w0 1<9 ; jl. c83. ; if not convert then begin \f ; pm 3.2.72 boss 2, tpsjobstart, ...5... ; change length of primary output area: dl. w1 b8. ; set catalogbase to boss privat interval al w3 x3+d105 ; jd 1<11+72; rl. w3 b11. ; bz w0 x3+d45 ; tail size; hs w0 x3+d90 ; output length:= output; wm. w0 b39. ; rl. w3 b11. ; rs w0 x3+d15 ; al w3 x3+d112 ; w3:= primary output area name addr; al w1 x3+d15-d112 ; jd 1<11+44; dl. w3 b42. ; terminate and prepare bsadjust jl. w1 (b28.) ; to update restclaims jl. c111. ; ; set bs claims for job process b. a20 w. jl. w2 a10. ; c117=k-b61 ; kit on: rl. w2 (b29.) ; w2:=curr coroutine descr rl w1 x2+8 ; page 4:=page 1 (=job descr) rx w1 x2+14 ; rs w1 x2+12 ; page 3:=page 4 (=operation) rl. w1 b61.+4 ; al w2 0 ; signal buffer free; hs w2 x1+2 ; a10: rs w2 x3+4 ; set start boolean; dl. w3 b77. ; transfer perm claims; jl. w1 (b28.) ; rl w1 66 ; dl w1 x1+78 ; al w3 x3+d105 ; jd 1<11+72; set catalog base(boss standard); al w0 0 ; rs. w0 a0. ; login disc entries:=temp incr:=0 c. i30-1, jl. a9. z. ; c. -i30 , jl. a2. z. ; a17: 0 ; work a0: 0 ; login disc entries, temp incr. a4: 0 ; saved privat kit adr a5: 0, 0 ; privat kit claim, key 1 and 2. a6: 0, r.2*4 ; claimlist for jd 1<11+78 a8=k+2, 0, 0 ; saved return and perm claim c. i30-1 a9: rl. w3 b11. ; w3:= job descr abs; al w1 x3+d28 ; w1:= first of private kit table; a1: rl w0 x1 ; next private kit: w1 = private kit addr. sn w0 0 ; if kit name = 0 then jl. a2. ; goto end set private claims; rl. w2 b69. ; w2:= base boss kit table; \f ; re 14.8.74 boss 2, tpsjobstart ...6... a3: al w2 x2+10 ; next boss kit: w2:= addr of next boss kit; sl. w2 (b70.) ; if w2 >= top boss kit then jl. a11. ; goto next private kit; dl w0 x2+2 ; w30:=first of boss kit name sn w0 (x1+2) ; se w3 (x1) ; jl. a3. ; if no match then goto next boss kit name dl w0 x2+6 ; w30:= last of boss kit name; sn w0 (x1+6) ; se w3 (x1+4) ; if no match then jl. a3. ; goto next boss kit; rs. w1 a4. ; save private kit addr; rl w0 x1+d57 ; w0:= perm job claim; al. w1 a5. ; w1:= claim 1 and 2; =0. jl. w3 a7. ; set bs claim; rl. w1 a4. ; al w0 0 ; rs w0 x1+d57 ; a11: al w1 x1+14 ; w1:= next private kit addr; jl. a1. ; goto next private kit; z. ; set bs claim: w0 = perm claim, w1 = addr of key 1 and 2 claim, ; w2 = addr of kit name and slice length, w3 = return. a7: ds. w0 a8. ; save return, perm claim; bl. w0 a8.+1 ; wm w0 x2+8 ; w0:= perm slices * slice length; bl. w3 a8. ; w3:= perm entries; ds. w0 a6.+14 ; save perm claim; bl w0 x1+3 ; wm w0 x2+8 ; w0:= key 2 slices* slice length; bl w3 x1+2 ; w3:= key 2 entries + login incr; wa. w3 a6.+12 ; wa. w0 a6.+14 ; ds. w0 a6.+10 ; key2 claims:=w30+perm claims ba. w3 a0. ; login entrysum:=login entrysum+loginentries. hs. w3 a0. ; bl w0 x1+1 ; wm w0 x2+8 ; w0:= key 1 slices * slice length; bl w3 x1 ; w3:= key 1 entries; ba. w3 a0.+1 ; wa. w3 a6.+8 ; wa. w0 a6.+10 ; key 1 claims:= key 0 claims ds. w0 a6.+6 ; := key 1 claims + key 2 claims; ds. w0 a6.+2 ; al w3 x2 ; w0:=abs ref device name jd 1<11+4 ; get process description of disc sh w0 0 ; if not found then jl. a16. ; skip am (0) ; rl w1 +24 ; w1:=abs ref chain table rl w1 x1-36 ; w1:=rel ref bs claims in process description wa w1 66 ; w1:=abs ref bs claims al. w3 a6. ; a15: sh. w3 a6.+4 ; if key 0 or 1 then jl. a18. ; skip entries rl w0 x3 ; jd-1 bz w0 x1 ; sh w0 (x3) ; set min(boss entry claim,computed entry claim) rs w0 x3 ; jd-1 a18: rl w0 x3+2 ; jd-1 bz w0 x1+1 ; w0:=boss slice claim rs. w3 a17. ; save w3 wm w0 x2+8 ; w0:=boss segment claim rl. w3 a17. ; reestablish w3 sh w0 (x3+2) ; rs w0 x3+2 ; set min(boss segm claim,computed segm claim) jd-1 al w1 x1+2 ; al w3 x3+4 ; if more keys of which to test claims sh. w3 a6.+12 ; jl. a15. ; then continue a16: rl. w3 b11. ; al w3 x3+d19 ; w3:= job name addr; al. w1 a6. ; w1:= claim list addr; jd 1<11+78; set bs claim; w2 = bs name addr. sn w0 0 ; if result ok then jl. (a8.-2) ; return; rl. w3 b11. ; if start then rl w0 x3+4 ; sn w0 0 ; am -2 ; call provoke instead of finis; jl. c108. ; goto insufficient resources on <w2>; \f ; re 16.8.74 boss 2, tpsjobstart ...7... a2: rl. w3 b11. ; end set private claims: w3:= job descr abs; rl w0 x3+4 ; se w0 0 ; if not start then jl. a12. ; begin dl. w3 b42. ; terminate bs adjust; jl. w1 (b28.) ; c.-1, o13, z. ; (bossfault xref) jd -13 ; rl. w2 (b29.) ; w2:=curr coroutine descr al w1 0 ; rx w1 x2+12 ; page 4:= page 3 (=operation); rs w1 x2+14 ; clear page 3; rl. w2 b11. ; rl w2 x2+d108 ; w2 := sender table entry; rl w1 x2+8 ; w1 := message buffer address (if any); sl w1 2 ; if message got then bz w1 x1+8 ; w1 := message code; rl. w2 (b29.) ; rl w0 x3+d0 ; if not mount kit then se w1 34 ; rs w0 x2+8 ; page 1:= job file page; se w1 34 ; if not mount kit message then am a14 ; pagejump to psjob io else dl. w3 a13. ; page jump to answer; jl. (b16.) ; (aux page) j175: 323 ; answer virt a13: j176: 350 ; answer rel j186: 320 ; psjob io virt a14=k-a13,j187: 321 ; psjob io rel a12: ; end; c.-i27 ; if no drum present then bz. w0 a0. ; temp incr := login disc entries hs. w0 a0.+1 ; z. rl w0 x3+d55 ; w0:= disc rest key 3; al w1 x3+d58 ; w1:= addr of disc rest key 1; al. w2 b63. ; w2:= addr of <:disc:> and slice length; jl. w3 a7. ; set bs claim; rl. w3 b11. ; c.i27 ; if drum present then begin bz. w0 a0. ; temp incr := login disc entries; hs. w0 a0.+1 ; \f ; pm 1.5.72 boss 2, tpsjobstart, ...8... rl w0 x3+d56 ; w0:= perm drum accumulated; al w1 x3+d59 ; w1:= addr of drum rest key 1; al. w2 b65. ; w2:= addr of <:drum:> and slice length; jl. w3 a7. ; set bs claim; rl. w3 b11. ; w3:= job descr abs; z. e. ; end ; lookup prog: al w2 x3+d18 ; w2:= prog name; dl w1 x3+d24 ; w01:= std interval; jl. w3 (b71.) ; prepare access; jl. c109. ;+2 goto prog does not exist; dl w1 x3+d24 ; al w3 x3+d105 ; jd 1<11+72; set catalog base(standard); al w3 x3-d105 ; al w1 x3+d11+4 ;+4 w1:= tail addr; al w3 x3+d18 ; w3:= prog name; jd 1<11+42; lookup prog; bz w0 x1+16 ; w0:= content; se w0 3 ; if content <> directly executable then jl. c81. ; goto prog does not exist; ; modify internal proc: w1 = param area addr. rl w1 66 ; set catalogbase(boss std) dl w1 x1+78 ; al w3 x3-d18+d105; jd 1<11+72; al w3 x3+d18-d105; al w1 x3-d18+d11+4; rl w0 66 ; primary input:= primary output rs w0 x1 ; := parent:= current process; rs w0 x1+2 ; mw0:= mw2:= current process descr addr; rs w0 x1+4 ; rl w0 x3+d106-d18; mw3:= process descr addr of job proc; rs w0 x1+6 ; al w0 0 ; rs w0 x1+8 ; mex:= 0; bz w0 x1+17 ; wa w0 x3+d53-d18; mic:= entry + first storage addr of job proc; rl w2 x1+18 ; wa w2 x3+d53-d18; sh w2 (x3+d47-d18); if proglength > jobsize or sl w0 (x3+d47-d18); entrypoint outside job then jl. c119. ; goto size too small rs w0 x1+10 ; rl w0 x1+18 ; save program length in hs w0 x3+d107+1-d18; swop area name(1); al w3 x3+d19-d18; jd 1<11+62; modify internal; se w0 0 ; if result <> 0 then c.-1, o11, z. ; (bossfault xref) jd -11 ; boss alarm; al w0 d18-d107; hs w0 x3+d107-d19; \f ; pm 3.2.72 boss 2, tpsjobstart, ...9... c83: dl. w3 b42. ; call(terminate bsadjust) jl. w1 (b28.) ; c.-1, o12, z. ; (bossfault xref) jd -12 ; bl w0 x3+d88 ; sz w0 1<9 ; jl. c84. ; if convert then goto convert; sz w0 1<3 ; if not online then jl. a3. ; begin comment prepare for recognition of convert areas; rl. w2 b79. ; lock(catalock); jl. w3 (b36.) ; dl. w1 b8. ; set catbase(boss private); al w3 x3+d105 ; jd 1<11+72; al w3 x3-d105+d112; w3 := primout name; al w1 x3-d112+d89; w1 := lookup area; jd 1<11+42; lookup entry; rl w0 x3-d112+d61; rs w0 x1+10 ; name table addr(cat entry) := user id; jd 1<11+44; change entry; al w1 2 ; jd 1<11+50; permanent entry(primout, key=2); rl. w2 b79. ; open(catalock); jl. w3 (b35.) ; end; a3: dl. w3 a1. ; call include user; jl. w1 (b28.) ; bl w0 x3+d51 ; tapes:= tapes + tape count; ba w0 x3+d92 ; hs w0 x3+d51 ; jl. w1 c131. ; ************************** testudskrift af job descr rl w0 x3+d93 ; se w0 0 ; if not wait devices then jl. a0. ; begin ;start job: al w0 16 ; opcode:=start job hs w0 x3+d14+2 ; rl. w2 (b29.) ; virt of swoparea descr:= virt of jobdescr+d107 rl w1 x2+8 ; al w1 x1+d107 ; rs w1 x3+d14+4 ; al w1 x3+d14 ; w1:=opadr rl. w2 b33. ; w2:=bankerque jl. w3 (b30.) ; open op(bankerque, start job) rl w2 x3+d82 ; lock(psjobbuf) jl. w3 (b36.) ; a0: rl. w2 (b29.) ; end; page 1 descr := jobfile rl w1 x3+d0 ; rs w1 x2+8 ; al w0 0 ; page 4 descr := 0 rs w0 x2+14 ; hs w0 x3+d104 ; finis cause:= 0; jl. w3 (b1.) ; get page j195=k+1 al w0 155 ; abs or page:=ext 155 (i.e. abs addr) (used by primary input) j139=k+1 rs w0 x3+188 ; jl. w1 c131. ; ************************** testudskrift af job file dl. w3 a7. ; jump to job running jl. (b16.) ; j67: 320 ; a7: j68: 321 ; j76: 473 ; include user virt a1: c39 ; - - rel \f ; pm 24.5.72 boss 2, tpsjobstart, ...10... ; convert: j88: 380 ; paper sem j89: 381 ; j118: 382 ; j191: 379 ; paper manipulation j193: 378 ; rb printer queue j194: 377 ; rb printer wait b. a9 w. c84: al w0 d18 ; al w1 d107 ; ds w1 x3+6 ; dl. w3 b62. ; call(copy area); jl. w1 (b28.) ; jl. c88. ; hard error; al w2 x3+d18 ; jl. w3 (b72.) ; release acces(prog name); rl. w2 b79. ; jl. w3 (b36.) ; lock(catalock); rl. w2 j118. ; jl. w3 (b31.) ; lock chained(convert buf); rl. w2 j191. ; lock(paper manipulation); jl. w3 (b36.) ; rl. w2 b61.+4 ; w2 := convert operation; ld w1 -100 ; ds w1 x2+42 ; ds w1 x2+46 ; rs w1 x2+2 ; code; rs w1 x2+14 ; name table addr; dl w1 x3+d107+2 ; name; ds w1 x2+8 ; dl w1 x3+d107+6 ; ds w1 x2+12 ; dl w1 x3+d18+2 ; ds w1 x2+34 ; op.file:= prog name; dl w1 x3+d18+6 ; (file in command) ds w1 x2+38 ; dl. w1 b8. ; ds w1 x2+18 ; interval:= boss private; al w3 x3+d105 ; set catbase(boss private); jd 1<11+72; al w3 x3-d105+d107; al w1 x3+d89-d107; jd 1<11+42; lookup entry; rl w0 x3+d61-d107; rs w0 x1+10 ; name table addr:=user id; bl w0 x3+d4-d107; hs w0 x1+17 ; entry point:=paper type; jd 1<11+44; change entry; al w1 2 ; jd 1<11+50; permanent entry(file, key = 2); al w3 x3-d107 ; \f ; re 20.3.74 boss 2, tpsjobstart ...11... rl w1 x3+d20 ; project; rs w1 x2+20 ; dl w1 x3+d23+2 ; user; ds w1 x2+24 ; dl w1 x3+d23+6 ; ds w1 x2+28 ; rl w1 x3+d61 ; user id; rs w1 x2+30 ; bl w0 x3+d95 ; length; hs w0 x2+4 ; dl w1 x3+d26 ; set catalog base = project base ds w1 x2+66 ; dl w1 x3+d122 ; set host description ds w1 x2+50 ; dl w1 x3+d121 ; ds w1 x2+56 ; set device name rl w0 x3+d123 ; rs w0 x2+62 ; set device kind rl. w3 b14. ; al w1 x2 ; bz w2 x3+d4 ; paper; hs w2 x1+5 ; c. i190-1 rl w0 x3+d121-2 ; w0:=first word of rbprintername; sn w0 0 ; if convert from rb terminal then jl. a4. ; rl. w2 j193. ; openchained(rb printer queue); jl. w3 (b30.) ; rl. w2 j194. ; jl. w3 (b35.) ; open(rb printer wait); jl. a5. ; z. a4: ; else sl w2 i78-1 ; al w2 i78-1 ; al w3 e13 ; wm w3 4 ; al w2 x3 ; wa. w2 j88. ; jl. w3 (b30.) ; open chained; rl. w2 j89. ; jl. w3 (b35.) ; open(printer wait); a5: rl. w2 j191. ; open (paper manipulation); jl. w3 (b35.) ; rl. w2 b79. ; jl. w3 (b35.) ; open(catalock); al w0 0 ; rest converts hs w0 x3+d111 ; := 0; al w0 3 ; finis cause:= normal finis; hs w0 x3+d104 ; dl. w3 j78. ; goto finis; jl. (b16.) ; e.e. \f ; pm 3.2.72 boss 2, tpsjobstart, ...12... ; alarms from code page 1. b. a4 w. ; c88: dl w1 x3+d1+2 ; hard error in copy; rs w0 x3+20 ; move status; se w1 3 ; am d107-d18; al w2 x3+d18 ; w2:= file name addr; al w0 -1 ; suppress terminate bs adjust; bl w1 x3+d88 ; if convert then sz w1 1<9 ; am 43-27 ; 43: hard error on convert file al w1 27 ; 27: hard error on jl. a3. ; c112:al w2 x3 ; create error: sn w0 1 ; am 44-29 ; 44: error at create internal process; am 1-100 ; 29: job name conflict am 100 ; c108-2: 28: (provoke instead of finis) c108:al w1 28 ; 28: too few resources on rl. w3 b11. ; al w0 0 ; jl. a3. ; c81: am w0 1 ; c109:al w0 0 ; rl. w3 b11. ; al w2 x3+d18 ; am -1 ; 30: prog does not exist c119:al w1 31 ; 31: size too small (w0=entry > 0) rl. w3 b11. ; a3: rs w0 x3+4 ; hs w1 x3+d104 ; set finis cause dl w1 x2+2 ; set param ds w1 x3+14 ; dl w1 x2+6 ; ds w1 x3+18 ; al w2 x3+d18 ; rl w0 x3+4 ; if called via c88, c81 or c119 then se w0 0 ; jl. w3 (b72.) ; release access(progname); rl. w3 b11. ; rl w0 x3+4 ; if not hard error in copy then dl. w3 b42. ; terminate bsadjust sn w0 -1 ; jl. a4. ; jl. w1 (b28.) ; c.-1, o13, z. ; (bossfault xref) jd -13 ;+2 claims exceeded a4: rl. w1 (b29.) ; page 1:= page 4(= job descr); rl w0 x1+14 ; rs w0 x1+8 ; clear page 2, 3, 4; al w0 0 ; rs w0 x1+10 ; rs w0 x1+12 ; rs w0 x1+14 ; rl. w3 b11. ; bl w2 x3+d104 ; if finiscause >= 100 then al w0 x2-100 ; begin sl w2 100 ; finiscause:= finiscause - 100; hs w0 x3+d104 ; call provoke instead of finis... sl w2 100 ; end; am +4 ; dl. w3 a2. ; goto finis; jl. (b16.) ; \f ; pm 15.8.72 boss 2, tpsjobstart, ...13... c111:al w0 2 ; clean catalog(2,stdint) rs w0 x3+4 ; dl w1 x3+d24 ; ds w1 x3+8 ; rl. w0 b80. ; page 3 descr := savebuffer rl. w1 (b29.) ; rs w0 x1+12 ; dl. w3 a0. ; jl. w1 (b28.) ; al w1 32 ; al w0 0 ; (terminate bsadjust := true) jl. a3. ; j84: 495 ; a0: j85: 363 ; c120:am -1 ; 7 user index too large c121:am -1 ; 8 illegal identification c122:al w0 9 ; 9 user index conflict hs w0 x3+d104 ; set finis cause dl w1 x3+d23+2 ; set param ds w1 x3+14 ; dl w1 x3+d23+6 ; ds w1 x3+18 ; dl. w3 a1. ; jl. (b16.) ; goto request alarm; j162:417 ; a2: j78: 427 ; finis j182:426 ;a2+2 j183:361 ;a2+4 provoke and finis (finiscause); j124:473 ; request alarm a1: c110 ; e. b.a6 w. a1=k+2, 0, 0 a2=k+2, 0, 0 j142: 21 ; priv... c131:ds. w1 a1. ; page 1 output: w1 = return... ds. w3 a2. ; rl. w2 (b29.) ; bz w0 x2+4 ; so w0 2 ; if -, test 2 then jl. a5. ; return; rl. w2 b14. ; a3: al w0 20<6+12 ; al w1 x2 ; jl. w3 (j142.) ; al w2 x2+20 ; am. (b14.) ; sh w2 +440 ; jl. a3. ; a5: dl. w1 a1. ; dl. w3 a2. ; jl x1 ; e. i. e. ; b names codepage 1 g0=k-g1, c. d109+f0.-1, h.r. d109+f0., w.z. \f ; pm 3.2.72 boss 2, tpsjobstart, ...14... ; initialization: b. a6 w. ; b0: 12 ; reserve virtual b1: 13 ; move to virtual b3: 15 ; end init b4: 24 ; put in active que b5: -1<20 ; const b6: 100 ; first psjob corutine b7: 0 ; ext base 0 ; work b8: 0 ; b9: e13 ; b10: h. e96, j36 ; entry off-line job b11: e96, j37 ; entry on-line job b12: e96, j83 ; entry account job w. b13: <:accountjob:> b14: 0, 0 ; account interval b15: 768 ; constant chars / segment b16: -1 ; constant -1 b17: 1<23-1 ; constant b18: g1. ; start of codepage 1 b19: g6. ; - - - 2 b20: g8. ; - - - 3 b21: g10. ; - - - 4 b2: g11. ; - - - 5 b22: j93. ; b23: j96. ; b24: j75. ; b25: g7 ; length of code page ; init external table: g4: jl. w3 (2) ; set externals; j216: 40 ; a0: d14+3 , 324 ; psjob nr (byte) d107 , 325 ; dump area spec d20 , 326 ; project no d91 , 327 ; job no d19 , 328 ; job name d19+2 , 329 ; - +2 d19+6 , 330 ; - +6 d96 , 331 ; psjob sem rel = psjob nr * e13 d87 , 332 ; psjob operation buffer d87+2 , 333 ; - - - +2 d87+4 , 334 ; - - - +4 d87+6 , 335 ; - - - +6, banker operation d98 , 336 ; rest mounts d99 , 337 ; rest suspends d0 , 338 ; job file virt d2 , 525 ; total net time d104 , 339 ; finis cause d30+2 , 340 ; device mask d65-d30, 422 ; maxdevice rel to std.device d108 , 341 ; sender table addr d106 , 342 ; proc descr addr d61 , 346 ; user ident in user cat d62 , 406 ; no of useable private kits d22 , 407 ; user cat ref disc rest key 3 d60 , 408 ; - - - drum - - 3 d69 , 409 ; disc rest key 2 d58 , 410 ; disc rest key 1 d67 , 411 ; drum rest key 2 d59 , 412 ; drum rest key 1 \f ; pm 20.4.72 boss 2, tpsjobstart, ...15... ; initialize d15 , 419 ; tail.size d74 , 479 ; convert claim: entries d74+1 , 480 ; slices d28 , 403 ; first of private kit table c61 , 401 ; include user d111 , 347 ; rest converts byte d43 , 344 ; mounts byte d111+1, 345 ; rest accounts byte j41 , 402 ; replace rel j36 , 404 ; off-line job j37 , 405 ; on-line job d14+2 , 348 ; opcode d14+4 , 349 ; 2. word of banker op d92 , 438 ; tape count d51 , 439 ; tapes d93 , 343 ; request line d24 , 421 ; standard interval d118+4, 371 ; card reader queue sem d119 , 423 ; rb device name table address d122 , 424 ; rb device creation number d121 , 425 ; rb printer name (last of db-word) c85 , 372 ; priority c86 , 373 ; wait c87 , 374 ; preserve c64 , 452 ; size c65 , 453 ; inte c66 , 454 ; prog c67 , 455 ; buf c68 , 456 ; area c69 , 457 ; key c70 , 526 ; link c90 , 458 ; perm c91 , 459 ; temp c93 , 460 ; late c94 , 461 ; moun c95 , 462 ; outp c96 , 463 ; time c97 , 464 ; acco c63 , 465 ; stat c98 , 466 ; devi c99 , 467 ; tape c92 , 468 ; cbuf c89 , 469 ; susp c58 , 484 ; corelock c59 , 483 ; online c56 , 420 ; minimal j111 , 364 ; banker kill c117 , 470 ; proc set bs claim d55 , 475 ; disc rest key 3 d56 , 476 ; drum rest key d77-d14,266 ; corelock time rel to banker op j83 , 492 ; account job entry c36 , 498 ; rel copy area; d1+2 , 499 ; status, operation (from copy area); d79 , 501 ; cpu used (0.8 sec) d85 , 502 ; temp drum, disc d49 , 503 ; stations d47 , 504 ; top addr d53 , 505 ; first addr d146 , 523 ; ref perm core (rel on job descr page) d148 , 527 ; rel link on job desc (:g2+511:)>9,508 ; length of job descr \f ; re 6.2.75 boss 2, tpsjobstart ...15a... ; initialize d131 , 148 ; (left byte = boss reader device, right job contr) d132 , 524 ; priority d137 , 376 ; waiting time d140 , 375 ; no of conversational input lines d141 , 149 ; reader table (rel on job descr page) d142 , 173 ; rel reader table (from reader operation); d143 , 172 ; terminal user rights (rel on jod descr page); 0 ,-1000 ; end of externals; \f ; pm 3.2.72 boss 2, tpsjobstart, ...16... rl w1 66 ; ext-4,-3:= boss std interval; dl w2 x1+78 ; rs. w1 j220. ; ext(-4); rs. w2 j221. ; ext(-3); al w2 x1 ; b14:= account interval; ds. w2 b14.+2 ; am -200 ; rl. w0 f8.+200; ext(76):= psjob buf sem; rs. w0 j222. ; ext(76); am -100 ; rl. w1 f2.+100; ext(151):= first sender table; rs. w1 j223. ; ext(151); al w1 x1+i45*10 ; rs. w1 j224. ; ext(153); ; create device words b. a2 w. ; a1=e25-e26 a2=e26+47-e17 al w2 e17-3 ; am -101 ; w01:= 0; a0: ld w1 1 ; for w2:= no of devices-3 step -1 al w2 x2-1 ; until no of stations do am. (b24.) ; bl. w3 x2+b24. ; w01:= 2*w01 + se w3 -1 ; if device table(w2) <> -1 then al w1 x1+1 ; 1 else 0; se w2 e25 ; jl. a0. ; rl. w3 b7. ; w3:= ext base; ld w1 a1 ; w01:= (w01) shift no of proc devices and spec stations; ds. w1 b8. ; includeable devices:= w01; al w1 x1+1<a1-1 ; w01:= (w01 + 1 shift no of spec ld w1 a2 ; stations -1) shift wa. w0 b5. ; +1<23 rs. w0 j225. ; ext(-6); rs. w1 j226. ; ext(-5); lx. w0 b17. ; lx. w1 b16. ; rs. w0 j227. ; ext(-8); rs. w1 j228. ; ext(-7); dl. w1 b8. ; w01:= includeable devices; ld w1 a2 ; rl. w2 b23. ; ds. w1 x2+b23. ; includeable devices:= w01; e. \f ; pm 3.2.72 boss 2, tpsjobstart, ...17... ; initialize ; reserve and move code: rl. w0 j26. ; disc slice in byte:= disc slice in segments * 512 ls w0 9 ; rs. w0 j34. ; rl. w1 j26. ; disc slice in chars:= wm. w1 b15. ; disc slice in segments * 768; rl. w2 b22. ; rs. w1 x2+b22. ; al w0 i80 ; reserve and move codepage 1 al w1 g0 ; jl. w3 (b0.) ; rl. w3 b18. ; al. w0 x3+b18. ; jl. w3 (b1.) ; rs. w2 j229. ; ext(472); al w0 i80 ; reserve and move codepage 2 al w1 g5 ; jl. w3 (b0.) ; rl. w3 b19. ; al. w0 x3+b19. ; jl. w3 (b1.) ; rs. w2 j230. ; ext(451); al w0 i80 ; reserve and move codepage 3 rl. w1 b25. ; jl. w3 (b0.) ; rl. w3 b20. ; al. w0 x3+b20. ; jl. w3 (b1.) ; rs. w2 j231. ; ext(400); al w0 i80 ; reserve and move codepage 4 al w1 g9 ; jl. w3 (b0.) ; rl. w3 b21. ; al. w0 x3+b21. ; jl. w3 (b1.) ; rs. w2 j232. ; ext(473); al w0 i80 ; reserve and move codepage 5 al w1 g12 ; jl. w3 (b0.) ; rl. w3 b2. ; al. w0 x3+b2. ; jl. w3 (b1.) ; rs. w2 j233. ; ext(471); jl. w3 (2) ; set externals; j217: 40 ; j220: 0 , -4 ; boss std interval upper; j221: 0 , -3 ; boss std interval lower; j222: 0 , 76 ; psjob answer; j223: 0 , 151 ; first sender table; j224: 0 , 153 ; top sender table; j225: 0 , -6 ; device bits 2 for banker; j226: 0 , -5 ; device bits 1 for banker; j227: 0 , -8 ; device mask 2; j228: 0 , -7 ; device mask 1; j229: 0 , 472 ; virt codepage 1; j230: 0 , 451 ; virt codepage 2; j231: 0 , 400 ; virt codepage 3; j232: 0 , 473 ; virt codepage 4; j233: 0 , 471 ; virt codepage 5; 0 , -1000 ; end of externals; \f ; pm 3.2.72 boss 2, tpsjobstart, ...18... ; initialize dl. w0 b13.+2 ; jobfilename:=accountjob al. w2 f0.+1000; al w2 x2-1000 ; ds w0 x2+d100+2 ; dl. w0 b13.+6 ; ds w0 x2+d100+6 ; dl. w0 b14.+2 ; jobfileinterval:=accountinterval ds w0 x2+d101+2 ; al w0 1<2 ; jobstate:=1<2 hs w0 x2+d88 ; al w0 16 ; rs w0 x2+d107-4 ; harderror op := free; al w0 0 ; login claims := 0 rs w0 x2+d69 ; rs w0 x2+d67 ; hs w0 x2+d104 ; finis cause:=0; al w2 2 ; w2:=psjobno:=2 ; initialize each incarnation of psjob descr and corutine descr: a3: am -1000 ; rs. w2 f3.+1000; psjob no:= w2; al w2 x2-2 ; wm. w2 b9. ; am -1000 ; rs. w2 f7.+1000; psindex:= (psjobnr - dummys) * e13; rl. w3 b6. ; rl w0 x3+12 ; am -1000 ; rs. w0 f6.+1000; psjob file descr:= page 3 descr; al w0 0 ; page 3 descr:=0 rs w0 x3+12 ; al w0 i81 ; w0:= psjob descr on disc; al w1 g2 ; w1:= length of psjob descr; jl. w3 (b0.) ; reserve virt for psjob descr; am -1000 ; al. w0 g3.+1000; w0:= base of psjob descr; jl. w3 (b1.) ; move to virt; rl. w1 b6. ; w1:= corutine descr; al w2 x2+1 ; set writebit rs w2 x1+14 ; page 4 := page 1:= psjob descr; rs w2 x1+8 ; rl. w3 b7. ; rl w0 x3+400<1 ; page 0 := psjob code; rs w0 x1+6 ; am -1000 ; rl. w3 f3.+1000; w3:= psjob no; se w3 2 ; if psjob no = 2 then jl. a4. ; begin am -1000 ; page1descr := jobfiledescr rl. w0 f6.+1000; rs w0 x1+8 ; rl. w0 b12. ; waitingpoint := accountjob entry jl. a5. ; end; \f ; pm 3.2.72 boss 2, tpsjobstart, ...19... ; initialize a4: rl. w0 b10. ; if psjob no > i45 - i4 then sh w3 i45-i4 ; waiting point := on-line entry jl. a5. ; else rl. w0 b11. ; waiting point := off-line entry; a5: rs w0 x1+4 ; end; a6: al w2 200<3+e96; hs w2 x1+4 ; store corutine ident; al w2 x2+1<3 ; hs. w2 a6.+1 ; next corutine; jl. w3 (b4.) ; put in active que; al w1 x1+e12 ; after psjob start: w1 = corutine, w2 = psjob que. rs. w1 b6. ; corutine descr addr:= next corutine descr addr; am -1000 ; rl. w2 f1.+1000; w2:=psjobque al w0 x2+e13 ; psjob que:= next psjob que; am -1000 ; rs. w0 f1.+1000; am -1000 ; rl. w1 f5.+1000; psjob in core:= next psjob in core; al w1 x1+e13 ; am -1000 ; rs. w1 f5.+1000; am -1000 ; rl. w1 f4.+1000; w1:= psjob buf; al w1 x1+e13 ; psjob buf:= next psjob buf; am -1000 ; rs. w1 f4.+1000; am -1000 ; rl. w1 f2.+1000; sender table addr:= next sender table addr; rs w2 x1+2 ; sendertable(psjobno).sem:=psjobque; al w1 x1+10 ; am -1000 ; rs. w1 f2.+1000; am -1000 ; rl. w2 f9.+1000; perm core:=next perm core al w2 x2+r99 ; am -1000 ; rs. w2 f9.+1000; am -1000 ; rl. w2 f3.+1000; w2:= next psjob no; al w2 x2+1 ; sh w2 i45+1 ; if w2 <= i45+1 then jl. a3. ; goto next corutine; jl. w3 (b3.) ; end init; e. ; \f ; pm 3.2.72 boss 2, tpsjobstart, ...20... ;2. code page g6: b. b80 w. b61: 0 ; page 0 base b14: 0 ; - 1 0 ; - 2 b2: 0 ; - 3 b11: 0 ; - 4 12<12 + 0 ; page ident: code page 2 b1: j56: 7 ; get page j144:-2 ; b8: j40: -1 ; boss private interval b3: i31 ; time for mount b16: j57: 8 ; page jump b19: 10 ; constant b26: j17: 2 ; send and wait fast b27: j18: 1 ; send and wait b28: j58: 25 ; call b29: j59: 26 ; curr corutine descr b30: j60: 6 ; open op b31: j61: 5 ; lock op b33: j62: 67 ; banker que b34: 1<12 ; constant b35: j63: 4 ; open b36: j64: 3 ; lock b39: j26: 288 ; slice length on disc j29: 415 ; b40: j30: 413 ; prepare bs adjust j32: 415 ; b42: j33: 414 ; terminate bs adjust b71:j184: 32 ; prepare access b72:j185: 33 ; terminate access b41: <:primout:>,0; name of online-job primary output area b47: j27: 52 ; request line free b48: j28: 51 ; request que b57: 3<12 ; constant b59: j34: 0 ; 512 * c(b39) b60: 2<12 ; constant b74: 4<12 ; constant b75: 1<2 ; constant b76: 1<(:e25-e26:)-1; mask b77: -1-1<22 ; remove reader b79: 5<12 ; constant b80: i16 ; gross run for conversational jobs b4: 1<23 ; infinite time j178: 162 ;-2 virt, b6: j179: 214 ; rel pack date and time \f ; re 14.8.74 boss 2, tpsjobstart ...21... ; calls from codepage 5 b. a5 w. c137=k-b61 jl. w1 c25. ; call set claims al w3 c147 ; jl. a5. ; c144=k-b61 jl. w2 c143. ; call catproc (create entry) 1<12 ;+2 : parameter am -2 ;+4 : alarm return al w3 c148 ;+6 : normal return jl. a5. ; c145=k-b61 jl. w2 c143. ; call catproc (increase entry) 4 + 1<12 ;+2 : parameter am -2 ;+4 : alarm return al w3 c149 ;+6 : normal return jl. a5. ; c146=k-b61 jl. w2 c143. ; call catproc (remove entry) 5 ;+2 : parameter am -2 ;+4 : alarm return al w3 c150 ;+6 : normal return a5: rl. w2 j198. ; rs. w0 (b14.) ; save error param at start of page 1; jl. (b16.) ; page jump to return j198: 471 ; virt of codepage 5 e. \f ; re 14.8.74 boss 2, tpsjobstart ...22... b. a13 w. ; ; cat proc: ; call: w0:= 2 * page no < 12 + rel addr of name ; w1:= abs addr of interval ; w3:= page 1 base = psjob descr base ; jl. w2 c26. ; w2: <code> + <length in slices> < 12 ; +2 alternative return; w0 = 0 if killed, = 1 if claims exceeded ; +4 normal return ; ; <code> ; 0,1,2,3 ; create entry and permanent with <code> ; 4 ; increase entry ; 5 ; remove entry ; 6 ; - - with exact interval ; 8 ; create temp entry and reserve accounts and converts a12: 2<12+d11+8 ; page 1, rel of name c143:rl. w0 a12. ; entry from load command: al w1 x3+d24 ; w0,w1 := params as specified; c26: rs w0 x3+d1 ; name addr:= x0; dl w1 x1 ; interval:= store w1; ds w1 x3+d1+4 ; rl w1 x2 ; w1:= funcno; ws. w2 b61. ; w2:= return rel to b61 ds w2 x3+d1+8 ; code:= w1; return:= w2; sn w1 5 ; if remove entry then jl. a0. ; goto prep bs; bl w1 x3+d1+6 ; w2:= length in slices; al w2 x1 ; wm. w1 b39. ; w1:= length in segments; bl w0 x3+d1+7 ; w0:= code; sn w0 4 ; if increase entry then wa w1 x3+d15 ; w1:= tailsize + disc slice; se w0 4 ; else wa. w2 b34. ; w2:=1<12+length rs w1 x3+d15 ; tailsize:=w1 sz w0 3 ; if not (create temp ! increase) then jl. a0. ; goto prep bs; al w1 0 ; disc claim:= w2; sn w0 8 ; all:= if reserve acc and conv then rl. w1 a13. ; 6 else 0; ds w2 x3+d14+6 ; stations:= 0; al w1 1 ; hs w1 x3+d14+2 ; opcode:= reserve; al w1 x3+d14 ; w1:= opaddr; rl. w2 b33. ; w2:= banker que; jl. w3 (b30.) ; open(banker que, reserve); rl w2 x3+d82 ; w2:= psjob buf; jl. w3 (b36.) ; lock(psjob buf); bl w0 x3+d14+2 ; sn w0 0 ; if opcode = 0 then jl. a3. ; goto alternative return; comment killed; \f ; pm 3.2.72 boss 2, tpsjobstart, ...23... ; catproc a0: dl. w3 b40. ; prep bs: jl. w1 (b28.) ; call prepare bs adjust; rl. w3 b14. ; a9: dl w1 x3+d1+4 ; set base: w01:= interval; al w3 x3+d105 ; w3:= nul addr; jd 1<11+72; set catalog base; se w0 0 ; if result <> 0 then c.-1, o15, z. ; (bossfault xref) jd -15 ; boss alarm; al w1 x3-d105+d15; w1:= tail addr; bl w3 x1-d15+d1 ; w3:= page base of name; rl. w3 x3+b61. ; ba w3 x1-d15+d1+1; w3:= name addr(abs); bl w2 x1-d15+d1+7; w2:= code; a2: bl. w0 x2+a4. ; try again: call func no(w2); jd-1 ;******testoutput hs. w0 3 ; jd ; func no sn w2 6 ; if selective clear then jl. a11. ; goto clear sel; se w0 0 ; if result <> 0 then jl. a5. ; goto not done; sn w2 8 ; if reserve account then jl. a1. ; goto create area process; sl w2 4 ; if clear or increase then jl. a6. ; goto terminate bs; sh w2 0 ; if -, create temp then begin jl. a1. ; al w1 x2 ; w1:= code; jd 1<11+50; permanent (name, code); se w0 0 ; if result <> 0 then jl. a7. ; goto boss claim exceeded; ; end; a1: jd 1<11+52; create area process; sn w0 0 ; if result = 0 then jd 1<11+8 ; reserve process; se w0 0 ; if result <> 0 then c.-1, o16, z. ; (bossfault xref) jd -16 ; boss alarm; rs w0 x3+8 ; clear nametableaddr al w2 x3 ; send and wait dummy mess al. w1 b60. ; to get name table addr; jl. w3 (b27.) ; a6: dl. w3 b42. ; terminate bs adjust; jl. w1 (b28.) ; if claim exceeded then jl. a8. ;+2 goto claim exceeded; al w0 1 ;+4 result:= claims exceeded; rl w1 x3+d1+8 ; jl. x1+b61.+4 ; return; c.-1,o35,z. ; bossfault xref a4: h. 1<11+40, r.4, 1<11+44, 1<11+48, 1<11+40 ,-35 ,1<11+40 w. ; func no a13: 6<12 ; const. \f ; pm 3.2.72 boss 2, tpsjobstart, ...24... ;catproc a3: rl w1 x3+d1+8 ; alternative return: jl. x1+b61.+2 ; goto return - 2; a5: sn w2 0 ; not done: if code = 0 and res = 3 then se w0 3 ; begin jl. a10. ; jd 1<11+48; clear entry; sn w0 0 ; if res = 0 then jl. a2. ; goto try again; ; end; a10: rl. w3 b11. ; rl w1 x3+d1+8 ; al w1 x1-2 ; return:= return - 2; rs w1 x3+d1+8 ; sn w2 4 ; if result <> (if code = increase entry am 2 ; then 6 else 4) sn w0 4 ; sn w2 5 ; ! code = remove entry then c.-1, o17, z. ; (bossfault xref) jd -17 ; boss alarm; jl. a6. ; goto terminate bs; a11: al w2 5 ; clear sel: code:= clear; se w0 0 ; if result = 0 or result = 3 then sn w0 3 ; jl. a2. ; goto try again; c.-1, o18, z. ; (bossfault xref) jd -18 ; boss alarm; a7: se w0 6 ; boss claim exceeded: c.-1, o19, z. ; (bossfault xref) jd -19 ; if result <> 6 then boss alarm; rl. w3 b14. ; w3:= page 1 base; a8: rl w1 x3+d1+8 ; return:= return - 2; al w1 x1-2 ; al w0 5 ; code:= remove; ds w1 x3+d1+8 ; jl. a9. ; goto set base; e. ; \f ; pm 3.2.72 boss 2, tpsjobstart, ...25... b. a17 w. ; ; set claims: c27=k-b61 dl w1 x3+2 ; pagejump entry to set claims ds w1 x3+d64 ; jl. w1 c25. ; dl w3 x3+d64 ; jl. w1 (b16.) ; c25: ws. w1 b61. ; rs w1 x3+d6 ; d6:= return - c25; jd 1<11+36; get clock ld w1 5 ; w0:=short clock al w1 0 ; clear w1 ds w1 x3+d15+12 ; name table addr, file count:= date, time; bl w1 x3+d88 ; if reader reserved jd-1 ;******testoutput so w1 1 ; then begin jl. a8. ; al w1 x1-1 ; hs w1 x3+d88 ; rl. w0 b74. ; op.code:= release reader; rs w0 x3+d87+2 ; bz w0 x3+d131 ; op.device no := rs w0 x3+d87+6 ; reader device number al w1 x3+d87 ; rl. w2 b33. ; jl. w3 (b30.) ; open op(banker que, release reader); rl w2 x3+d82 ; jl. w3 (b36.) ; lock(psjob buf); ; end; a8: al w0 8 ; hs w0 x3+d14+2 ; opkind:= set claims; rl w1 x3+d47 ; w1:= opsize:= size; rs w1 x3+d14+22 ; al w0 0 ; w1:= size //(512 * disc slice); wd. w1 b59. ; w0:= size mod(512 * disc slice); se w0 0 ; al w1 x1+1 ; w1:= upround(size/(512 * disc slice)); bl w0 x3+d88 ; sz w0 1<9 ; if convert then bz w1 x3+d95 ; w1:= temp area length; hs w1 x3+d95 ; dump area length:= w1; bz w2 x3+d58+1 ; w2:=dumparea+temp disc wa w2 2 ; c.-i27,rl w1 x3+d58 z. ; c.i27, rl w1 x3+d59 z. ; w1:= temp drum claim + 1 entry; wa. w1 b34. ; rs w1 x3+d74 ; convert claim:=w1,w2 hs w2 x3+d74+1 ; bl w0 x3+d88 ; if -,jobstate online then sz w0 1<3 ; jl. a5. ; begin bz w0 x3+d45 ; wa w2 0 ; w2:=w2+outputarea wa. w1 b34. ; w1:= w1 + 1 entry; a5: ; end; \f ; re 14.8.74 boss 2, tpsjobstart ...25a... bl w0 x3+d88 ; if tape job so w0 1<8 ; or card job then jl. a2. ; begin rl w0 x3+d83 ; al w3 0 ; w2 := w2 + job file size (in slices); wd. w0 b39. ; wa w2 0 ; wa. w1 b34. ; w1 := w1 + 1 entry; rl. w3 b14. ; a2: ; end; sz w2 -1<11 ; if w2>2047 then jl. c115. ; goto no claiming hl w0 x3+d49 ; + stations; ds w1 x3+d14+6 ; stations:= w0; op temp entries:= w1; hs w2 x3+d14+7 ; op temp disc slices:= w2; hs w2 x3+d85+1 ; save disc slices; c.-i27,rs w1 x3+d58 z. ; c.i27, rs w1 x3+d59 z. ; temp drum:= w1; hs w2 x3+d58+1 ; temp disc slices:= w2; rl. w0 a6. ; opreader:= 1<12 c.e53-1 rl w1 x3+d119 ; if rbreaders exist and host id <> 0 se w1 0 ; then ba. w0 1 ; claim rbreader z. rl w1 x3+d68 ; opconverts:= converts+(if online then 0 else 1); rs w1 x3+d111 ; rest converts,accounts:= converts,accounts; \f ; pm 20.4.72 boss 2, tpsjobstart, ...26... ; set claims b. a9 w. ; bl w2 x3+d88 ; so w2 1<3 ; wa. w1 b34. ; ba w1 2 ; al w1 x1+1 ; bl w2 x3+d30 ; sz w2 1<9 ; op.accounts:=accounts+1+op.converts al w1 x1+1 ; + if job printer then 1 else 0; bl w2 x3+d14+3 ; if account job then sn w2 2 ; am -2 ; op.all:= 5 al w2 7 ; else op.all:= 7; hs w2 x3+d14+4 ; ds w1 x3+d14+10 ; store op.reader, op.accounts, op.converts; dl w2 x3+d39 ; opbufs:= bufs+1; opareas:= areas + 1; wa. w1 b34. ; al w1 x1+1 ; hl w2 x3+d71 ; opsuspends:= suspends; wa. w2 b34. ; op internals:= internals + 1; ds w2 x3+d14+14 ; bz w1 x3+d59+1 ; optemp drum:= temp drum slices; rs w1 x3+d14+16 ; hs w1 x3+d85 ; save drum slices; bl w1 x3+d71 ; rest suspends:= suspends; hs w1 x3+d99 ; bl w1 x3+d43 ; se w1 0 ; w1:= mounts jl. a0. ; if mounts = 0 then begin dl w1 x3+d30+2 ; mounts:= stations + spec. stations; ld w1 e17-e26-23; la. w0 b76. ; al w1 0 ; a1: sz w0 1 ; al w1 x1+1 ; ls w0 -1 ; se w0 0 ; jl. a1. ; ba w1 x3+d49 ; end; a0: ; opgross time:= time + mounts + mount time; hs w1 x3+d43 ; hs w1 x3+d98 ; rest mounts:= mounts; wm. w1 b3. ; opnet time:= time; rl w2 x3+d53 ; rs w2 x3+d2 ; net time:= time; wa w1 4 ; ds w2 x3+d14+28 ; e. ; \f ; pm 27.12.72 boss 2, tpsjobstart, ...26a... ; set claims b. a9 w. dl w1 x3+d30+2 ; opdevice:=device; la. w0 b77. ; remove reader; ds w1 x3+d30+2 ; ds w1 x3+d14+20 ; ld w1 e17+1-e28-e19; ld w1 -48+e19 ; w1:=simulated proc devices required; bl w0 x3+d75 ; w0:=conversational job; sn w1 0 ; if w1 or w0 <>0 then se w0 0 ; begin jl. 4 ; jl. a1. ; rl. w0 b80. ; wa w0 x3+d14+26 ; rs w0 x3+d14+26 ; op gross run:=option (great) + op gross run; am -1 ; abs core place:=true; a1: al w0 0 ; end else abs core place := false; rs w0 x3+d14-6 ; bz w0 x3+d41 ; opkeys:=keys; bz w1 x3+d88 ; if not alarm claims sh w0 0 ; and no keys wanted then sz w1 1<9+1<4; jl. 4 ; jl. c124. ; goto limited key; sh w0 7 ; if all keys wanted then ls w0 12 ; keys:=0; hl w0 x3+d132 ; rs w0 x3+d14+24 ; oppriority:=priority; rl w1 x3+d14+28 ; w1:= net run; bz w2 x3+d88 ; w2:=jobstatus sl w1 i161 ; longjob2:=nettime>i161 lo. w2 b75. ; hs w2 x3+d88 ; al w0 i5 ; rs w0 x3+d115+2 ; n r l at provoke before finis:= i5; al w0 -1 ; rs w0 x3+d115+0 ; n r l at finis:= rs w0 x3+d115+4 ; n r l at dump:= rs w0 x3+d115+6 ; n r l at provoke before dump:= rs w0 x3+d115+8 ; n r l at high priority exceeded:= rs w0 x3+d115+10; n r l at corelock exceeded:= -1; ld w1 -100 ; summa waiting time:= ds w1 x3+d137 ; actual waiting time:=0; dl w1 110 ; arrival:= clock * 2**-13; ld w1 -13 ; oparrival:= arrival mod 2**24; ds w1 x3+d17+2 ; rl w2 x3+d66 ; opmax wait:= max wait; ds w2 x3+d14+32 ; al w1 x3+d14 ; w1:= op; rl. w2 b33. ; w2:= banker que; jl. w3 (b30.) ; open op; e. \f ; pm 27.12.72 boss 2, tpsjobstart, ...27... ;set claims rl w2 x3+d82 ; jl. w3 (b36.) ; lock(psjob buf); bl w2 x3+d14+2 ; if result <> 0 then goto not claimed; se w2 0 ; jl. c104. ; bl w0 x3+d14+3 ; if accountjob then begin se w0 2 ; jl. a12. ; al w0 20 ; op.code=activate hs w0 x3+d14+2 ; rl. w2 b33. ; al w1 x3+d14 ; jl. w3 (b30.) ; open(bankerque,wait activate) rl w2 x3+d82 ; jl. w3 (b36.) ; lock(psjobbuf) dl w2 110 ; w2:=time ld w2 -11 ; jl. a13. ; end else begin ; expected finis time: a12: rl w2 x3+d14+4 ; w2:= finis time mod 2**24 - arrival mod 2**24 ws w2 x3+d17+2 ; := finis time - arrival; al w1 0 ; aa w2 x3+d17+2 ; w12:= finis time(sec * 10**4 * 2**-13) ld w2 2 ; (sec * 10**4 * 2**-11) a13: wd. w2 a0. ;end w1:= finis time mod 24 h (sec * 10**4 * 2**-11); al w0 0 ; hs w0 x3+d92 ; tapecount:=0 rs w0 x3+d79 ; cputime used:=0 rs w0 x3+d106 ; proc descr addr := 0; ld w1 7 ; w01:= - - -(sec * 10**4 * 2**-4); wd. w1 a1. ; w1:= finis time in sec after midnight; rs w1 x3+d84 ; finis time:= w1; bl w0 x3+d14+24 ; protection reg:= opkeys; hs w0 x3+d66 ; rl w1 x3+d14+22 ; first storage addr:= opsize; rs w1 x3+d47-2 ; wa w1 x3+d47 ; top storage addr:= opsize + size; rs w1 x3+d47 ; \f ; re 14.8.74 boss 2, tpsjobstart ...27a... ;create primary output area and process al w0 0 ;area name:=0 rs w0 x3+d112 ; bl w2 x3+d88 ; sz w2 1<6+1<3; if not (online or internal) then jl. 4 ; jl. a17. ; goto reserve output; rx w0 x3+d114 ; page3 := virt op addr from commandio; rl. w1 (b29.) ; virt op addr := 0; (i.e. answer send := true) rs w0 x1+12 ; jl. w3 (b1.) ; get pages; rl. w1 b2. ; rl w2 x1+4 ; w2 := answer semafor; jl. w3 (b35.) ; send answer; bl w2 x3+d88 ; so w2 1<3 ; if jobstateonline then jl. a17. ; begin al w0 b41-b61; rel addr of <:primout:>; al w1 x3+d24 ; std interval; jl. w2 c26. ; remove entry with exact interval; 6 ; c.-1, o30, z. ; (bossfault xref) jd -30 ; dl. w1 b41.+2 ; primary output name := <:primout:>; ds w1 x3+d112+2 ; dl. w1 b41.+6 ; ds w1 x3+d112+6 ; rl. w0 a4. ; w0:= rel name addr; al w1 x3+d24 ; w1:= abs addr of private interval; \f ; pm 20.4.72 boss 2, tpsjobstart, ...28... ; set claims bl w2 x3+d45 ; set length to output; hs w2 x3+d90 ; output length:= output; hs. w2 4 ; jl. w2 c26. ; create login area; 2 ; + length < 12 ; jl. c139. ; if error then goto login claims exceeded; al w0 1 ; reserve accounts: hs w0 x3+d14+2 ; op.code:= reserve; al w0 2 ; op.all:= accounts; hs w0 x3+d14+4 ; al w0 0 ; hs w0 x3+d14+5 ; op.stat:= op.temp:= 0; rs w0 x3+d14+6 ; al w1 x3+d14 ; rl. w2 b33. ; jl. w3 (b30.) ; open(banker que, reserve); rl w2 x3+d82 ; jl. w3 (b36.) ; lock(psjob buf); bl w0 x3+d14+2 ; if killed then begin se w0 0 ; jl. a3. ; am 6-15 ; cause 6 : killed c139:al w0 15+100 ; cause 15: login claim exceeded hs w0 x3+d104 ; al w1 0 ; sn w0 15+100 ; if login claims exceeded then rs w1 x3+d112 ; clear primout name; end; jl. a3. ; end else begin a17: al w0 1 ; reserve output: hs w0 x3+d90 ; output length:= 1; rl. w0 a4. ; al. w1 b8. ; jl. w2 c26. ; reserve temp area, accounts and converts 1<12+8 ; and create temp area for primout; jl. c113. ; end; a3: rl. w1 (b29.) ; page 1 descr:= job file; rl w0 x3+d0 ; rs w0 x1+8 ; jl. w3 (b1.) ; get pages; ; initialize job file descr for run: rl. w2 b11. ; w2:= job descr base; bz w1 x2+d45 ; super buffer length:= output * slice length; wm. w1 b39. ; ls w1 9 ; al w0 x1-512 ; j45=k+1 rs w0 x3+196 ; \f ; pm 29.4.72 boss 2, tpsjobstart, ...29... ; set claims al w0 -512 ; buf byte:=-512; j46=k+1 rs w0 x3+302 ; al w0 0 ; j47=k+1 rs w0 x3+299 ; state:= 0; j50=k+1 rs w0 x3+301 ; next byte:= 0; j25=k+1 rs w0 x3+194 ; bufbyte ps:=0 j141=k+1 rs w0 x3+180 ; exhaust count:=0 j117=k+1 hs w0 x3+447 ; start rel reader:=0 j158=k+1 hs w0 x3+474 ; al w0 512 ; j53=k+1 rs w0 x3+191 ; restroom on primary output:= j133=k+1 rs w0 x3+181 ; restroom on jobcontr. printer:=512 rl. w0 a16. ; virt get jobcontr. printer buf j163=k+1 rs w0 x3+183 ; :=start virt. jobcontr. printer buf al w0 i3 ; appetite:= i3; j48=k+1 rs w0 x3+304 ; dl w1 x2+d47 ; first and top storage on jobfil descr:= j138=k+1 ds w1 x3+186 ; first and top storage on jobdescr j49=k+1 al w3 x3+195 ; super buffer name:= primary output name; rl w1 x2+d112 ; rs w1 x3 ; dl w1 x2+d112+4 ; ds w1 x3+4 ; dl w1 x2+d112+8 ; ds w1 x3+8 ; rl. w3 b14. ; al w0 -6 ; j69=k+1 hs w0 x3+198 ; job card state:= -6; j70=k+1 hs w0 x3+446 ; job reader state:= -6; bz w1 x2+d30 ; job type:= off line < 3 + job reader < 2 + ls w1 -8 ; job printer < 1 + job card; bl w0 x2+d51 ; if control se w0 0 ; then al w1 x1+1<2 ; set job controlled reader bit bl w0 x2+d88 ; job printer used:= 1<4:= false; so w0 1<3 ; job printer accounted:=false; (1<6) al w1 x1+1<3 ; bl w0 x2+d75 ; sn w0 0 ; al w1 x1+1<5 ; jobtype:=jobtype+no conversation<5 am 1 ; store job state j114=k+1 hs w1 x3+179 ; rl. w3 b11. ; al w0 c16 ; rs w0 x3+d13 ; command state:= claims set; bl w1 x3+d104 ; al w0 x1-100 ; if alarmcause > 99 then sl w1 100 ; goto create alarm job (w0 = alarmcause); jl. c140. ; nb: online job; \f ; pm 20.4.72 boss 2, tpsjobstart, ...30... ;set claims ; reservation of jobtape area: bl w0 x3+d88 ; if reader was reserved then sz w0 1<8 ; sz w0 1<5 ; jl. a9. ; begin al w0 3 ; reserve reader; hs w0 x3+d14+2 ; rl w0 x3+d119 ; set host ident, bz w1 x3+d131 ; reader device no ds w1 x3+d14+6 ; in operation al w1 x3+d14 ; rl. w2 b33. ; jl. w3 (b30.) ; open op(banker que, reserve reader); rl. w3 b11. ; rl w2 x3+d82 ; jl. w3 (b36.) ; lock(psjob buf); rl. w3 b11. ; bl w0 x3+d14+2 ; sn w0 0 ; if killed then jl. c101. ; goto killed during reserve job file; bl w1 x3+d88 ; al w0 x1+1 ; hs w0 x3+d88 ; a9: so w0 1<8 ; end; jl. a11. ; if card job or tape job then begin a10: al w0 1 ; op.code:= reserve; hs w0 x3+d14+2 ; al w0 0 ; op.all:= 0; op.stations:= 0; rl w1 x3+d83 ; op.entries:= 1; op.slices:= job tape area length; wd. w1 b39. ; bz w2 x3+d58+1 ; ws w2 2 ; hs w2 x3+d58+1 ; temp disc slices:= temp disc slices - c.-i27 bl w2 x3+d58 ; al w2 x2-1 ; hs w2 x3+d58 ; z. c.i27 bl w2 x3+d59 ; job tape area length; al w2 x2-1 ; hs w2 x3+d59 ; temp entries:= temp entries - 1; z. wa. w1 b34. ; ds w1 x3+d14+6 ; al w1 x3+d14 ; rl. w2 b33. ; jl. w3 (b30.) ; open(banker que, reserve area); rl. w3 b11. ; rl w2 x3+d82 ; jl. w3 (b36.) ; lock(psjob buf); rl. w3 b11. ; bl w0 x3+d14+2 ; sn w0 0 ; if op.code = 0 then jl. c101. ; goto killed; bl w0 x3+d88 ; sz w0 1<5 ; am 18 ; \f ; pm 20.4.72 boss 2, tpsjobstart, ...30a... al w0 5 ; op.code:= release if card job then job card area else job tape area; hs w0 x3+d14+2 ; al w1 x3+d14 ; rl. w2 b33. ; jl. w3 (b30.) ; open(banker que, release job tape area); rl. w3 b11. ; rl w2 x3+d82 ; jl. w3 (b36.) ; lock(psjob buf); rl. w3 b11. ; bl w2 x3+d58+1 ; bs w2 x3+d45 ; if temp disc < swoparea + output - 1 then bs w2 x3+d95 ; goto temp exceeded job file; c. -i27 bl w1 x3+d58 ; z. c. i27 bl w1 x3+d59 ; z. sl w1 1 ; sh w2 -2 ; jl. c138. ; \f ; pm 4.5.72 boss 2, tjobstart, ...31... ; set claims a11: al w2 x3 ; end; rl. w3 b14. ; b. a12 w. ; output expected finis time: bl w0 x2+d88 ; sz w0 1<4+1<9; if job state error or convert then return jl. a3. ; so w0 1<3 ; if job state online then jl. a1. ; begin j38=k+1 rl w1 x3+193 ; page 3 descr:= virt output buffer; rl. w3 (b29.) ; rs w1 x3+12 ; jl. w3 (b1.) ; get page; rl. w3 b11. ; w3:= job descr base; rl. w2 b2. ; w2:= text base; jl. a2. ; end else begin a1: so w0 1<2 ; if gross time < i161 then jl. a3. ; goto no time output; rl. w2 (b29.) ; page 1 descr:= job descr; rl x2+14 ; rs x2+8 ; rl. w2 b47. ; lock(request line free); jl. w3 (b31.) ; al w2 x1+6 ; w2:= text base; a2: ; end; dl. w1 a4. ; ds w1 x2+2 ; text(0,3):= <:finis :>; dl. w1 a5. ; ds w1 x2+6 ; dl w1 x3+d19+2 ; text(4,7):= job name; ds w1 x2+10 ; dl w1 x3+d19+6 ; ds w1 x2+14 ; rl. w1 a6. ; text(8):=<: at:> rs w1 x2+16 ; rl w1 x3+d84 ; w1:=expected finistime al w1 x1+30 ; rs w2 x3+d84 ; d84:=text base al w2 x2+6 ; for n:=3 step -1 until 1 do a7: al w0 0 ; begin wd. w1 b19. ; text(8+n):= w1 mod 10 rs w0 x2+16 ; w1:= w1 // 10 al w0 0 ; wd. w1 a8. ; text(8+n):= ls w0 8 ; (w1 mod 6) shift 8 wa w0 x2+16 ; +text(8+n) wa. w0 a9. ; +<: 00:> rs w0 x2+16 ; al w2 x2-2 ; se w2 (x3+d84) ; jl. a7. ; end al w0 10 ; text(12):=<:<10>:> rs w0 x2+22 ; \f ; pm 3.2.72 boss 2, tpsjobstart, ...32... ; set claims ; w2 = text base; bz w0 x3+d88 ; so w0 1<3 ; if jobstate online then jl. a10. ; begin rl. w1 (b29.) ; page 1 descr:= jobdescr rl w0 x1+14 ; rs w0 x1+8 ; al w0 0 ; page 3 descr:= 0 rs w0 x1+12 ; rl. w1 b14. ; w1:= jobfile base rs. w3 b14. ; bl w0 x3+d102 ; if information not wanted then skip the line se w0 0 ; jl. a11. ; al w0 512-24 ; restroom:=512-24 j51=k+1 rs w0 x1+191 ; j52=k+1 rl w2 x1+197 ; open(terminal full) rs w2 x3+d84 ; jl. w3 (b35.) ; rl w1 (x3+d84) ; terminal full:=terminal full+11 al w1 x1+11 ; rs w1 (x3+d84) ; jl. a11. ; end else begin a10: al w0 3 ; opcode:=printline al w1 22 ; length:=22 (notice: skip the newline char) ds w1 x2-2 ; al w1 x2-6 ; w1:=linebase rl. w2 b48. ; w2:=requestlineque jl. w3 (b30.) ; open op(requestlineque, print) ; end a3: rl. w1 (b29.) ; no timeoutput: rl w0 x1+14 ; page 1 descr := jobdescr rs w0 x1+8 ; rl. w3 b11. ; w3:=page 1 base := jobdescr base rs. w3 b14. ; a11: ; return: rl w1 x3+d6 ; jl. x1+b61. ; a4=k+2, <:finis :> ; a5=k+2, <: :> ; a6: <: at:> ; a8: 6 ; a9: <: 00:> ; e. ; a0: 3*15*15*625 ; 24*60 *60*10000*2**-11 a1: 625 ; 10000*2**-4 a4: 2<12+d112 ; c.e55-1 a6: 1<12 ; opreader z. c.-e55 a6: 0 ; opreader z. a16: j164:383 ; start job controlled printer buf e. ; \f ; pm 3.2.72 boss 2, tpsjobstart, ...33... ; alarms from code page 2. b. a3 w. ; c113:al w0 6 ; cause 6 : killed hs w0 x3+d104 ; al w3 c110 ; goto request alarm; jl. a1. ; a0: 2<12+d100 ; c101: ; killed during reserve jobfile: rl. w3 b14. ; w3:=page 1 (=job file page); j192=k+1 ; al w2 x3+218 ; al w0 x2+8 ; rs. w0 b61.+6 ; jl. w3 (b72.) ; release access(jobfile); al w0 0 ; rs. w0 (b61.+6); name table address := 0; rl. w1 (b29.) ; rl w2 x1+14 ; page 1:= page 4; rs w2 x1+8 ; rl. w3 b11. ; rs. w3 b14. ; rl. w0 a0. ; remove job file; al w1 x3+d101+2 ; jl. w2 c26. ; 6 ; c.-1, o31, z. ; (bossfault xref) jd -31 ; bl w0 x3+d88 ; release if card job then job card area sz w0 1<5 ; else job tape area; am 18 ; al w0 5 ; hs w0 x3+d14+2 ; al w1 x3+d14 ; rl. w2 b33. ; jl. w3 (b30.) ; rl w2 x3+d82 ; jl. w3 (b36.) ; \f ; pm 27.9.72 boss 2, tpsjobstart, ...34... ; alarms am -29 ; cause 6 : killed c138:al w0 35 ; cause 35: temp exceeded job file c140:hs w0 x3+d104 ; cause w0: rl. w1 (b29.) ; page 1 := page 4 ( = job descr page); rl w2 x1+14 ; rs w2 x1+8 ; al w3 c80 ; goto create alarm job; a1: rl. w2 j90. ; jl. (b16.) ; c124:am 20-3 ; c115:al w2 3 ; c104:ls w2 3 ; dl. w1 x2+a2. ; ds w1 x3+d11+10 ; dl. w1 x2+a3. ; ds w1 x3+d11+14 ; al w0 37 ; cause 37: limited <option> hs w0 x3+d104 ; al w3 c37 ; goto set alarm claims; jl. a1. ; j90: 473 ; alarm page a2=k-6, a3=k-2 ; <:stations:>, 0 ; 1 <:entries:>, 0 ; 2 <:disc slices:> ; 3 <:readers:>, 0 ; 4 <:readers:>, 0 ; 5 <:converts:>, 0 ; 6 <:accounts:>, 0 ; 7 <:bufs:>, 0, 0 ; 8 <:areas:>, 0, 0 ; 9 <:internals:>, 0 ;10 <:suspends:>, 0 ;11 <:drum slices:> ;12 <:drum slices:> ;13 <:spec. device:> ;14 <:spec. device:> ;15 <:spec. device:> ;16 <:spec. device:> ;17 <:size:>, 0, 0 ;18 <:size:>, 0, 0 ;19 <:keys:>, 0, 0 ;20 e. i. e. ;end b names codepage 2 g5=k-g6 \f ; pm 3.2.72 boss 2, tpsjobstart, ...35... g8: ; codepage 3 ; constants b. b80, g5 w. ; b61: 0 ; page 0 base b14: 0 ; page 1 base 0 ; page 2 base b2: 0 ; page 3 base b11: 0 ; page 4 base 13<12 + 0 ; page ident: code page 3 b1: j15: 7 ; get page j143:-4 ; b5: j39: -3 ; boss std interval b6: j42: 400 ; virt of codepage 3 j165:-2 ; boss privat interval b8: j166:-1 ; b16: j16: 8 ; page jump b19: 10 ; constant b20: -1<16 ; -1<16 mask b22: j167:34 ; w0call b28: j19: 25 ; call b29: j2: 26 ; current corutine descr b30: j20: 6 ; open op b31: j21: 5 ; lock op b32: j31: 72 ; card reader free operation sem b33: j22: 67 ; bankque b34: 1<12 ; b35: j23: 4 ; open b36: j24: 3 ; lock b39: j94: 288 ; slicelength on disc b66=-b61. ; virtual codepage 5 j54: 471 ; b63: <:disc:>,0,0 ; j109:288 ; disc slice length b65: <:drum:>,0,0 ; j110:287 ; drum slice length b70: j108: 33 ; term access b71: j95: 32 ; prepare access b72: j160:21 ; j106:162 ;-2 virt, b73: j107:229 ; rel general print \f ; pm 3.2.72 boss 2, tpsjobstart, ...36... ; psjob idle b. a25 w. ; ; page 4 = psjob descr a20: rl. w1 (b29.) ; page 1 := page 4; rl w2 x1+14 ; rs w2 x1+8 ; rl. w3 b11. ; rs. w3 b14. ; ; page 1 = psjob descr ; wait for next job: j36=k-b61 ; entry off-line job; ext(404). al w0 9 ; hs w0 x3+d14+2 ; opkind:= psjob idle; rl. w2 b33. ; w2:= bankque sem; al w1 x3+d14+4 ; w1:= op; rl w0 x3+d91 ; answersem:=psjobque rl w3 x3+d14+2 ; ds w0 x1+4 ; jl. w3 (b30.) ; open(banker que, psjob idle); rl. w1 (b29.) ; w1:= corutine descr; rl w2 x1+8 ; page 4:= page 1; rs w2 x1+14 ; jl. a13. ; a17: am 4 ; trf: w2:= 6; a18: al w2 2 ; tre: w2:= 2; rl. w3 b11. ; al w0 0 ; w0:= 0; hs w0 x3+d92 ; tapeno:=0 dl w1 x1+8 ; ds w1 x3+d122 ; set host description rs w0 x3+d119 ; al w0 1 ; rs w0 x3+d121-2 ; rb printer name:=1; al w0 1<8 ; w0:=1<8 al w1 i162 ; w1:= max length of job tape area; jl. a15. ; goto a15; \f ; re 14.8.74 boss 2, tpsjobstart ...36a... a19: rl. w2 b32. ; card: jl. w3 (b31.) ; lock chained(card reader free sem); al w2 x1 ; w2:=operation; ; initialize on job file page: dl w1 x2+24 ; first virt job buffer j97=k+1 ds w1 x3+370 ; top - - - dl w1 x2+28 ; free job sem j98=k+1 ds w1 x3+368 ; full - - rl. w3 b11. ; initialize on job descr page: dl w1 x2+8 ; parent rb device name table addr ds w1 x3+d120 ; - - - creation number rl w0 x2+10 ; rb term ident rs w0 x3+d122 ; dl w1 x2+32 ; rb printername ds w1 x3+d121 ; dl w1 x2+16 ; first virt boss buffer ds w1 x3+d118+8 ; top - - - dl w1 x2+20 ; free boss sem ds w1 x3+d118+12; full - - rl w0 x2+12 ; card queue sem rs w0 x3+d118+4 ; al w0 0 ; rs w3 x3+d118 ; cardfilecount:=great hs w0 x3+d116 ; cardfileno:=0 al w0 1<5+1<8; w0:= 1<5+1<8; al w1 i163 ; w1:= max length of job card area; al w2 i118 ; a15: rs w2 x3+d11+2 ; mode:= standard mode; al w2 0 ; w2:= 0; c.-i27,wa. w1 b34. ; if no drum then w1:=w1+ 1 entry; z. ds w2 x3+d69 ; temp disc rest:= w1; login disc rest:= 0; rl. w1 b34. ; temp entries:=1 c.-i27,al w1 0 ; if no drum then temp entries:=0; z. ds w2 x3+d67 ; login drum rest:= 0; rs w2 x3+d22 ; perm claims := not defined; rs w2 x3+d60 ; prepares for creation of load area by rs w2 x3+d28 ; means of prep and term bsadjust. rs w2 x3+d11+8 ; name:= 0; rs w2 x3+d23 ; user name:=0 dl. w2 b8. ; std interval := job file interval ds w2 x3+d24 ; := boss priv interval; ds w2 x3+d101+2 ; hs w0 x3+d88 ; job state:= w0; rl. w1 (b29.) ; page1 := jobdescr rl w2 x1+14 ; rs w2 x1+8 ; rs. w3 b14. ; so w0 1<5 ; w3:= if tape job then c30+c29 am c30 ; else c29; al w3 c29 ; rl. w2 j54. ; w2:= virt of code page 5; am. (b11.) ; al w0 d64 ; jl. w1 (b22.) ; w0call; \f ; pm 3.2.72 boss 2, tpsjobstart, ...37... rl w0 x3+d15 ; rs w0 x3+d83 ; job file length:= segment; dl w1 x3+d11+10 ; job file name:= name; ds w1 x3+d100+2 ; dl w1 x3+d11+14 ; ds w1 x3+d100+6 ; rl. w1 (b29.) ; page 1 descr:= job file descr rl w0 x3+d0 ; rs w0 x1+8 ; jl. w3 (b1.) ; jl. a14. ; ; online job: j37=k-b61 ; entry online job; ext(405). a13: rl w0 x3+d0 ; page 1:= job file; rl. w1 (b29.) ; w1:= corutine descr; rs w0 x1+8 ; rs. w3 b11. ; page 4 base:= w3; rl w0 x3+d69 ; rl w1 x3+d67 ; ds w1 x3+4 ; al w2 x3+2 ; get commandio jobvariables a8: dl w1 x2+d117 ; ds w1 x2+d18 ; al w2 x2+4 ; sh w2 x3+d65+4-d18; jl. a8. ; dl w1 x3+4 ; rs w0 x3+d69 ; rs w1 x3+d67 ; al w0 1<3 ; jobstate online:= true; hs w0 x3+d88 ; ; wait for a job file: a0: rl. w3 b11. ; w3:= psjob descr base; al w0 c15 ; commandstate:= start; rs w0 x3+d13 ; al w2 c54 ; switch := <:start:>; rs w2 x3+d12 ; rl w2 x3+d91 ; w2:= psjob que; jl. w3 (b31.) ; lock op; ; page 1=job file page, page 4=job descr page bl w2 x1+3 ; w2:= op kind; ba. w2 x2+a1. ; goto kindtable(op kind); jl. x2+a1. ; ; switch kind table: opkind a1=k-1, h. a2. ; 1 mag tape ready a7. ; 2 kill a10. ; 3 terminate a7. ; 4 answer a7. ; 5 time up a5. ; 6 internal a6. ; 7 run c23. ; 8 go a4. ; 9 submit a16. ;10 convert a7. ;11 kit on a19. ;12 card job a18. ;13 tre job a17. ;14 trf job a9. ;15 replace operation a7. ;16 harderror swopin w. \f ; pm 25.4.72 boss 2, tpsjobstart, ...38... ; dummy answer in case of operation to the foregoing job: a4: am b35-b30; w3:= open; a2: rl. w3 b30. ; w3:= open op; rl w2 x1+4 ; w2:= answer sem; jl w3 x3 ; open or open op; jl. a0. ; goto wait for a job file; a10: rl. w3 b11. ; kill: hs w2 x3+d104 ; finis cause:= <>0; a7: al w0 0 ; signal opbuffer free hs w0 x1+2 ; jl. a0. ; ;prepare job file: page 1 = job file page, page 4 = job descr page 0 ; saved return c24: al w0 0 ; line got:= 0; rs. w2 c24.-2 ; save return; j10=k+1 rs w0 x3+190 ; j35=k+1 rl w0 x3+189 ; page 3 descr:= job file buf; rl. w3 (b29.) ; rs w0 x3+12 ; rl w1 x3+10 ; if onlinejob then d114:=virt of commandio opbuf rl. w3 b11. ; rs w0 x3+d3 ; d3:=virt of job file buf al w0 c15 ; command state:= start; rs w0 x3+d13 ; bl w0 x3+d88 ; sz w0 1<3 ; rs w1 x3+d114 ; al w2 x3+2 ; save commandio jobvariables a3: dl w1 x2+d18 ; ds w1 x2+d117 ; al w2 x2+4 ; sh w2 x3+d65+4-d18; jl. a3. ; rl. w2 b14. ; j168=k+1 al w0 x2+257 ; rl. w1 c24.-2 ; w1:= return; dl. w3 a12. ; call init line; jl. (b22.) ; j11: 206 ; init job file: a11: j12: 235 ; j13: 157 ; init line: a12: j14: 161 ; \f ; pm 24.5.72 boss 2, tpsjobstart, ...38a... ; convert from commandio: ; page 1 = job file page, page 4 = job descr page a16: rl. w2 b11. ; dl w0 x1+8 ; param2:= file name; ds w0 x2+14 ; dl w0 x1+12 ; ds w0 x2+18 ; rl w0 x1+14 ; hs w0 x2+d4 ; dl w0 x1+18 ; move rb printer name; ds w0 x2+d121 ; rl w0 x1+24 ; rs w0 x2+d123 ; set device kind rl. w3 b14. ; jl. w2 c24. ; prepare job file; jl. c107. ; io alarm; rl. w1 (b29.) ; page 1:= page 4; rl w0 x1+14 ; rs w0 x1+8 ; rl. w3 b11. ; rs. w3 b14. ; dl w1 x3+14 ; progname:= file name; ds w1 x3+d18+2 ; dl w1 x3+18 ; ds w1 x3+d18+6 ; al w2 x3+d18 ; prep access(prog); dl w1 x3+d24 ; jl. w3 (b71.) ; jl. c82. ; file does not exist; dl w1 x3+d24 ; al w3 x3+d105 ; jd 1<11+72; set catalog base(std); al w3 x3+d18-d105; al w1 x3+d11-d18; jd 1<11+42; lookup (prog); bz w0 x1+16 ; w0:=entry.content se w0 0 ; if content<>text then jl. a21. ; goto terminate al w0 1<9+1<7+1<3; jobstate:=online and convert hs w0 x3+d88-d18; al w0 0 ; rl w1 x1+0 ; wd. w1 b39. ; swop area length:= length / slice length; se w0 0 ; round up(swop area); al w1 x1+1 ; hs w1 x3+d95-d18; al w3 c37 ; rl. w2 j77. ; jl. (b16.) ; goto set alarm claims; a21: al w2 x3 ; w2:=prog name jl. w3 (b70.) ; terminate access(program name) jl. c132. ; alarm (file no text file) \f ; pm 25.4.72 boss 2, tpsjobstart, ...39... ;replace job: j41=k-b61 bl w1 x3+d88 ; w1:=old jobstate al w0 0 ; clear jobstate; hs w0 x3+d104 ; finis cause:= 0; hs w0 x3+d88 ; bl w2 x3+d14+3 ; if username change wanted then sz w1 1<1 ; rs w0 x3+d23 ; clear jobname sn w2 2 ; if accountjob then am -8 ; send run job operation else al w0 15 ; send replace job operation rs w0 x3+d87+2 ; to psjobque rl w2 x3+d91 ; al w1 x3+d87 ; jl. w3 (b30.) ; rl. w1 (b29.) ; page 1 :=jobfilepage rl w0 x3+d0 ; rs w0 x1+8 jl. a0. ; a9: rl. w2 b11. ; replace operation: bl w0 x2+d104 ; if finis cause = ok then sn w0 0 ; goto run job jl. a6. ; j101=k+1 al w2 x3+218 ; jl. w3 (b70.) ; term access(jobfile) jl. a20. ; goto offline job(psjob idle) ; page 1 = job file page, page 4= job descr page a5: rl. w3 b11. ; internal: al w0 1<6 ; jobstate.internal:=true; hs w0 x3+d88 ; rl. w2 (b29.) ; d114:=virt of operation; rl w1 x2+10 ; rs w1 x3+d114 ; al w0 c15 ; command state := start; rs w0 x3+d13 ; al w0 0 ; login claim:=0 rs w0 x3+d23 ; username := 0; rs w0 x3+d69 ; rs w0 x3+d67 ; rl. w2 b61.+4 ; w2:= op addr; dl w1 x2+8 ; param(2):= job file name; ds w1 x3+d100+2 ; dl w1 x2+12 ; ds w1 x3+d100+6 ; dl w1 x2+20 ; move rb printer name; ds w1 x3+d121 ; dl w1 x2+24 ; rs w0 x3+d119 ; move parent rb device name table addr; ds w1 x3+d122 ; set host description dl w1 x2+16 ; std interval:= job file interval; ds w1 x3+d101+2 ; al w3 x3+d105 ; jd 1<11+72; set base; rl. w1 b11. ; al w3 x1+d100 ; jd 1<11+76; lookup head and tail(job file) rl. w3 b11. ; al w2 7 ; la w2 x1 ; w2 := key; se w0 0 ; if result <> 0 then jl. c141. ; goto newjob file not exist; se w2 3 ; if key <> 3 then jl. c142. ; goto newjob file not permanent; rl. w3 b14. ; jl. a14. ; go and get a jobfile; \f ; re 13.8.74 boss 2 , tpsjobstart, ...39a... ;accountjob entry: j83=k-b61 rl. w2 b11. ; w2:= psjob descr base; rl w0 x2+d0 ; rl. w1 (b29.) ; page 1 := job file page; rs w0 x1+8 ; al w0 0 ; rs w0 x2+d23 ; username:=0; rs w0 x2+d119 ; parent rb name table addr:=0; rs w0 x2+d120 ; host description:=0; rs w0 x2+d122 ; rs w0 x2+d121-2 ; rb printername:=0; jl. w3 (b1.) ; get pages; ; get a jobfile: a14: rl. w2 b11. ; w2:=job descr base; dl w1 x2+d100+2 ; param(2):=area name; ds w1 x3+6 ; dl w1 x2+d100+6 ; ds w1 x3+10 ; dl w1 x2+d101+2 ; ext(227):= std interval; j6=k+1 ds w1 x3+227 ; j169=k+1 al w0 x3+257 ; dl. w3 a11. ; w23:= init jobfile; jl. w1 (b22.) ; call init job file; jl. c107. ; io alarm; jl. c136. ; file too long; \f ; pm 20.4.72 boss 2, tpsjobstart, ...40... ; run job: a6: jl. w2 c24. ; prepare job file jl. c107. ; io alarm al w0 8 ; abs or page:= 8; j8=k+1 rs w0 x3+188 ; al w0 d94 ; last of line; al w1 d4-2 ; line base; j9=k+1 ds w1 x3+187 ; rl. w3 b11. ; al w0 c21 ; state:= start; hs. w0 c1. ; al w0 x3+d11-2 ; addr:= param - 2; rs w0 x3+d8 ; e. ; central read b. a8 w. ; ; next char: al w1 0 ; a8: sn w1 25 ; if char=EM then jl. c107. ; goto jobfile unreadable jl. w2 c20. ; next line: rl. w3 b11. ; load w3: w3:= psjob descr; c0: dl. w2 a6. ; next char: w2:= partial word; w1:= 0; sn w2 0 ; jl. a1. ; if w2 = 0 then goto next word; a3: ld w2 8 ; w1:= char; w2:= next partial word; rs. w2 a6. ; partial word:= w2; bl. w2 x1+a0. ; w2:= class(char); sl w1 128 ; if char > 127 then al w2 10 ; state:=10; sn w2 -1 ; jl. c0. ; if class = -1 then goto next char; c1=k+1 rl. w2 x2+0 ; state:= state( class + state); bl w0 4 ; hs. w0 c1. ; bl w2 5 ; w2:= action(class + state); c2: jl. x2 ; goto action; c17=a8-c2, c13=c0-c2 ; a1: rl. w2 a7. ; next word: al w2 x2+2 ; w2:= curr addr:= curr addr + 2; rs. w2 a7. ; rl w2 x2-2 ; w2:= curr word; jl. a3. ; 0 ; nul a6: 0 ; partial word a7: c32: 0 ; curr addr \f ; pm 3.2.72 boss 2, tpsjobstart, ...41... ; central read ; next line: c20: ws. w2 b61. ; w2:= rel return; bl. w1 c1. ; return:= rel return; ds w2 x3+d6 ; state save:= state; rl. w2 (b29.) ; w2:= corutine descr; dl w1 x3+d3 ; rs w0 x2+8 ; page 1 descr:= job file; rs w1 x2+12 ; page 3 descr:= get line buf; rl w2 x3+d8 ; ws w2 6 ; rs w2 x3+d8 ; jl. w3 (b1.) ; get pages j170=k+1 al w0 x3+257 ; dl. w3 a5. ; get line point; jl. w1 (b22.) ; call get line; jl. c107. ; io alarm; jl. c103. ; line too long; al w1 d4-2 ; line got: j3=k+1 rx w1 x3+187 ; line base:= d4; w1:= last word; rl. w3 b11. ; rs. w3 b14. ; page 1:= page 4; al w2 x3 ; wa w2 x3+d8 ; rs w2 x3+d8 ; rl. w2 (b29.) ; rl w0 x2+14 ; rs w0 x2+8 ; al w0 0 ; rs w0 x2+12 ; page 3:= empty; bl w0 x2+4 ; if testmode 2 then so w0 2 ; jl. a2. ; begin al w1 x1-d4+2 ; w0:= no of bytes < 6 +15; ls w1 6 ; al w0 x1+15 ; al w1 x3+d4 ; w1:= first byte; jl. w3 (b72.) ; prive out; a2: al w1 x3+d4 ; end; al w0 0 ; ds. w1 a7. ; curr word:= line base; partial word:= 0; dl w2 x3+d6 ; hs. w1 c1. ; state:=statesave jl. x2+b61. ; j1: 157 ; get line(virt): a5: j0: 158 ; get line(rel): \f ; pm 3.2.72 boss 2, tpsjobstart, ...42... ; central read ; class (char) ; -1: blind ; 0: letter ; 2: digit ; 4: , ; 6: SP ; 8: ; NL FF EF ; 10: other h. ; a0: -1, 10, 10, 10, 10, 10, 10, 10, ; NUL ... 10, 10, 8, 10, 8, -1, 10, 10, ; BS HT NL VT FF VR ... 10, 10, 10, 10, 10, 10, 10, 10, ; DL E ... 10, 8, 10, 10, 10, 10, 10, 10, ; CAN EM ... 6, 10, 10, 10, 10, 10, 10, 10, ; SP ... 10, 10, 10, 10, 4, 10, 10, 10, ; ( ) * + , ... 2, 2, 2, 2, 2, 2, 2, 2, ; 0 1 2 3 4 5 6 7 2, 2, 10, 8, 10, 10, 10, 10, ; 8 9 : ; ... 10, 10, 10, 10, 10, 10, 10, 10, ; A ... 10, 10, 10, 10, 10, 10, 10, 10, ; H ... 10, 10, 10, 10, 10, 10, 10, 10, ; P ... 10, 10, 10, 10, 10, 10, 10, -1, ; X ... 10, 0, 0, 0, 0, 0, 0, 0, ; ... a b c d e f g 0, 0, 0, 0, 0, 0, 0, 0, ; h i j k l m n o 0, 0, 0, 0, 0, 0, 0, 0, ; p q r s t u v w 0, 0, 0, 0, 0, 0, 10, -1, ; x y z æ ø aa ... e. ; \f ; pm 3.2.72 boss 2, tpsjobstart, ...43... ; central read b. a8 h. ; ; letter digit , SP NL other a0=1-c1., a6,c3, a0,c11, a0,c17, a0,c13, a0,c17, a0,c11 ; start a1=1-c1., a6,c9, a8,c5, a1,c17, a1,c13, a0,c10, a0,c11 ; int or command a2=1-c1., a6,c9, a0,c11, a2,c17, a2,c13, a0,c10, a0,c11 ; command a3=1-c1., a0,c11, a8,c5, a3,c17, a3,c13, a0,c11, a0,c11 ; int a4=1-c1., a7,c3, a0,c11, a4,c17, a4,c13, a0,c11, a0,c11 ; text a5=1-c1., a7,c3, a8,c5, a5,c17, a5,c13, a0,c11, a0,c11 ; int or text a6=1-c1., a6,c4, a6,c4, a1,c18, a1,c7, a0,c11, a0,c11 ; in command a7=1-c1., a7,c4, a7,c4, a1,c19, a1,c8, a0,c10, a0,c11 ; in text a8=1-c1., a0,c11, a8,c6, a1,c19, a1,c8, a0,c10, a0,c11 ; in integer g1=a8-a7, g2=2*g1, g3=3*g1, g4=4*g1 c. i178-1 , g5 = g4 z. ; size max allowed c. -i178 , g5 = g2 z. ; size max not allowed c21=a0, c33=a6 ; the g names are used in parameter syntax lists ; 0 integer or command ; g1 command ; g2 integer ; g3 text ; g4 integer or text ; g5 integer or optionally text ; the syntax actions are: ; c3 start text: text:= char; count:= count + 1; ; c4 in text: text:= text shift 8 + char; ; c5 start integer: integer:= char; count:= count + 1; ; c6 in integer: integer:= 10 * integer + char; ; c7 after command name: lookup name; count:= command base; goto c8; ; c8 after param: state:= state + kind(count); ; c9 next command name: text:= char; switch to command action; ; c10 last command: switch to command action; goto create job; ; c11 syntax alarm: ; ; c13 blind: goto next char; ; c17 skip line: goto next line; ; c18 skip line after command name: next line; goto c7; ; c19 skip line after param: next line; goto c8; e. ; \f ; pm 3.2.72 boss 2, tpsjobstart, ...44... ; central read ; syntax actions: b. a10 w. ; ; start text: c3=-c2. rl w2 x3+d7 ; count:= count + 1; al w2 x2+1 ; rs w2 x3+d7 ; rl w2 x3+d8 ; w2:= addr; al w0 x2+8 ; addr:= w2 + 8; rs w0 x3+d8 ; ld w0 -100 ; param(w2):= 0; ds w0 x2+4 ; ds w0 x2+8 ; rl. w3 b11. ; w3:= psjob descr; jl. a0. ; goto next textword; ; in text: c4=-c2. bl w2 x3+d9 ; w2:= text shift - 8; al w2 x2-8 ; sl w2 0 ; if w2 >= 0 then jl. a1. ; begin rl w2 x3+d10 ; w2:= text addr; a0: sl w2 (x3+d8) ; next textword: if w2>= addr then jl. b17. ; error(text too long); al w2 x2+2 ; text addr:= w2:= w2+2; rs w2 x3+d10 ; w2:= 16; al w2 16 ; end; a1: hs w2 x3+d9 ; text shift:= w2; ls w1 x2 ; param(addr):= param(addr) con char; wa w1 (x3+d10) ; rs w1 (x3+d10) ; jl. c0. ; goto next char; ; start integer param: c5=-c2. rl w2 x3+d7 ; count:= count + 1; al w2 x2+1 ; rs w2 x3+d7 ; rl w2 x3+d8 ; w2:= addr:= addr + 8; al w2 x2+8 ; rs w2 x3+d8 ; al w1 x1-48 ; w1:= digit; al w0 0 ; w0:= 0; ds w1 x2-4 ; param(addr):= digit; jl. c0. ; goto next char; ; in integer: c6=-c2. rl w2 x3+d8 ; param(addr):= rl w0 x2-4 ; param(addr) * 10 + char; wm. w0 b19. ; al w1 x1-48 ; wa w0 2 ; rs w0 x2-4 ; jl. c0.-2 ; goto load w3; \f ; pm 3.2.72 boss 2, tpsjobstart, ...45... ; central read c18=-c2. jl. w2 c20. ; next line; ; after command name: c7=-c2. al w2 b51 ; w2:= chain head; dl w1 x3+d11+2 ; w01:= command name; la. w1 b20. ; ds. w1 x2+b53. ; dummy name:= command name; ; search command: a2: ba. w2 x2+b55. ; w2:= next command chain; sn. w0 (x2+b54.) ; if name(w2) <> command name se. w1 (x2+b53.) ; jl. a2. ; then goto search command; rs w2 x3+d7 ; rs w2 x3+d12 ; count:= switch:= w2; sn w2 b51 ; if w2 = chain head then goto jl. c105. ; command not found; sl w2 (x3+d13) ; if w2 >= command state jl. c106. ; then syntax error; al w0 x3+d11-2 ; addr:= -2; rs w0 x3+d8 ; ; set kind: a4: bl. w0 x2+b56. ; state:= state + kind(count); ba. w0 c1. ; hs. w0 c1. ; jl. c0. ; goto next char; ; skip line after param: c19=-c2. jl. w2 c20. ; next line; ; after param: (test state text max 11 chars and integers<=8388607) c8=-c2. rl w2 x3+d8 ; w2:=ptr to last param word rl w0 x2-6 ; w0:=first word of param se w0 0 ; if text (w0<>0) then jl. a8. ; goto test textparam rl w0 x2-4 ; w0:=integer param sh w0 -1 ; if integer param < -1 then jl. b17. ; goto alarm - number too large jl. a9. ; a8: ; test text param: rl w0 x2 ; w0:=last word of text param sz w0 255 ; if last char<>0 then jl. b17. ; goto alarm - text too long a9: ; rl w2 x3+d7 ; w2:= count; jl. a4. ; goto set kind; \f ; pm 3.2.72 boss 2, tpsjobstart, ...46... ; central read ; last command: c10=-c2. rl w2 x3+d8 ; if text is more than 11 chars then rl w0 x2-6 ; error(text too long); se w0 0 ; rl w0 x2 ; sz w0 255 ; jl. b17. ; rl w2 x3+d7 ; if kind(count) >= g2 then bl. w0 x2+b56. ; sl w0 g2 ; jl. c106. ; syntax error; al w1 -1 ; ; next command name: c9=-c2. rs w1 x3+d7 ; count:= if last command then -1 else char; al w1 -1 ; param(addr + 8):= -1; am (x3+d8) ; rs w1 2 ; ; switch to command action: dl. w1 c32. ; save input buffer point; ws w1 6 ; ds w1 x3+d5 ; rl w1 x3+d12 ; w1:= switch; bl. w2 x1+b67. ; w2:= rel ref virt page; bl. w3 x1+b68. ; w3:= rel entry; rl. w2 x2+b61. ; w2:= virt page; jl. w1 (b28.) ; call(commandaction) jl. a7. ;+2 ok jl. c114. ;+4 limited jl. b17. ;+6 param jl. c41. ;+8 device unknown a7: dl w1 x3+d5 ; set 32 to input buffer point; wa w1 6 ; ds. w1 c32. ; rl w1 x3+d7 ; next command: sn w1 -1 ; if w1 = -1 then goto create job; jl. b21. ; al w0 c33 ; set state to in command; hs. w0 c1. ; al w0 x3+d11-2 ; addr:= -2; rs w0 x3+d8 ; jl. c3+c2. ; goto start text; j55: 473 ; virt of create job page; a6: c34 ; rel entry of create job page; ;go job: c23: ; jl. w2 c24. ; prepare jobfile jl. c107. ; io alarm b21: dl. w3 a6. ; jl. (b16.) ; e. \f ; pm 3.2.72 boss 2, tpsjobstart, ...47... b. a4 w. ; command table: a2=b6-b61 ; name , chain , virt, rel, param types <:job:>,0, h. b55. ,g0=k, a3 , c60, g3, g2, 0, g1, w. a0: <:load:> , h. g0.-1,g0=k, b66 , c62, g4, g3, g1, w. a1: <:stat:> , h. g0.-1,g0=k, a2 , c63, g2, g1, w. <:size:> , h. g0.-1,g0=k, a2 , c64, g5, g1, w. <:inte:> , h. g0.-1,g0=k, a2 , c65, g2, g1, w. <:prog:> , h. g0.-1,g0=k, a2 , c66, g3, g1, w. <:buf:>,0, h. g0.-1,g0=k, a2 , c67, g2, g1, w. <:area:> , h. g0.-1,g0=k, a2 , c68, g2, g1, w. <:key:>,0, h. g0.-1,g0=k, a2 , c69, g2, g1, w. <:perm:> , h. g0.-1,g0=k, a2 , c90, g3, g2, 0, g1, w. <:temp:> , h. g0.-1,g0=k, a2 , c91, g3, g2, 0, g1, w. <:late:> , h. g0.-1,g0=k, a2 , c93, g2, 0, g1, w. <:moun:> , h. g0.-1,g0=k, a2 , c94, g2, g1, w. <:outp:> , h. g0.-1,g0=k, a2 , c95, g2, g1, w. <:time:> , h. g0.-1,g0=k, a2 , c96, g2, 0, 0, g1, w. <:acco:> , h. g0.-1,g0=k, a2 , c97, g2, g1, w. <:devi:> , h. g0.-1,g0=k, a4 , c98, g4, g1, w. <:tape:> , h. g0.-1,g0=k, a4 , c99, g2, g1, w. <:cbuf:> , h. g0.-1,g0=k, a2 , c92, g2, g1, w. <:susp:> , h. g0.-1,g0=k, a2 , c89, g2, g1, w. <:core:> , h. g0.-1,g0=k, a2 , c58, g2, g1, w. <:onli:> , h. g0.-1,g0=k, a2 , c59, g3, g1, w. <:mini:> , h. g0.-1,g0=k, a2 , c56, g3, g1, w. <:prio:> , h. g0.-1,g0=k, a2 , c85, g2, g1, w. <:wait:> , h. g0.-1,g0=k, a2 , c86, g2, g1, w. <:pres:> , h. g0.-1,g0=k, a2 , c87, g3, g1, w. <:cont:> , h. g0.-1,g0=k, a4 , c74, g3, g1, w. <:link:> , h. g0.-1,g0=k, a2 , c70, g2, g1, w. ;param type: 0 integer or next command ; g1 next command ; g2 integer ; g3 text ; g4 integer or text ; g5 integer or optionally text b51=0 b54: 0 ; name b53: 0 ; name + 2 b55: h. g0.-1, w. ; chain <:start:> ; initial text for error printout c54=k-2-b53 ; b67= b55 +1 ; rel addr of virt b68= b67 +1 ; rel start addr b56= b68 +1 ; parameter type list c22=0, c15=a0-b55, c16=a1-b55, c38=0 a3=k-b61, j120: 472 ; virt of codepage 1 a4=k-b61, j146: 473 ; virt of codepage 4 e. \f ; pm 3.2.72 boss 2, tpsjobstart, ...48... ; command actions b. a15 w. ; a11: <:no:> a12: <:yes:> a15: <:max:> c87=k-b61 ; preserve catalog: am d134-d75; c59=k-b61 ; online conversation: am d75-d102; c56=k-b61 ; information option: al w2 d102 ; dl w1 x3+d11+2 ; sn. w0 (a11.) ; param:= jl. a13. ; if <:no:> then 0 else sn. w0 (a12.) ; if <:yes:> then 1 else se w1 0 ; goto param; jl. c72. ; am 1 ; a13: al w0 0 ; rs w0 x3+d11+2 ; param:=1 am x2 -d148; c70=k-b61, am d148-d68; link c92=k-b61, am d68-d132; cbuf c85=k-b61, am d132-d71; priority c89=k-b61, am d71-d49; suspends c63=k-b61, am d49-d39; stations c65=k-b61, am d39-d35; internals c67=k-b61, am d35-d33; buf c68=k-b61, am d33-d41; areas c69=k-b61, am d41-d43; key c94=k-b61, am d43-d31; mounts c97=k-b61 ; account al w1 d31 ; w1:=kind; rl w0 x3+d11+2 ; w0:= param; a1: wa. w1 b11. ; bz w2 x1+d81 ; test against max byte: sl w0 x2+1 ; if w0 > max byte(kind) then jl. a8. ; goto alarm; hs w0 x1 ; resource(kind) := w0; dl w3 x3+2 ; jl. (b16.) ; return; \f ; re 14.8.74 boss 2, tpsjobstart ...48a... c64=k-b61 ; size: c. i178-1 dl w1 x3+d11+2 ; sn w0 0 ; if text param then jl. a14. ; begin sn. w0 (a15.) ; if param <> <:max:> then se w1 0 ; jl. c72. ; goto param; al w0 0 ; j188=k+1 ac w1 29 ; param(1) := maxsize; j189=k+1 al w1 x1+16 ; ls w1 9 ; ds w1 x3+d11+2 ; z. ; end; a14: am d47-d138; c86=k-b61 ; am d138-d77; wait: c58=k-b61 ; corelock: al w1 d77 ; size:= param(1); rl w0 x3+d11+2 ; a4: wa. w1 b11. ; test against max word: sh w0 (x1+d81) ; if w0 > max word(kind) then jl. 4 ; jl. a8. ; goto alarm; rs w0 x1 ; resource(kind):= w0; dl w3 x3+2 ; jl. (b16.) ; return; a8: dl w3 x3+2 ; alarm: al w3 x3+2 ; return:= return + 2; jl. (b16.) ; return ...; c66=k-b61 ; program: rl. w2 b11. ; dl w1 x3+d11+2 ; ds w1 x2+d18+2 ; program name:= param(1); dl w1 x3+d11+6 ; ds w1 x2+d18+6 ; dl w3 x3+2 ; jl. (b16.) ; return; c95=k-b61 ; output: rl w1 x3+d11+2 ; al w0 0 ; wd. w1 a0. ; al w0 x1+1 ; w0:= param / chars per disc slice; al w1 d45 ; w1:= kind; jl. a1. ; goto test again max byte; a0: j93: 0 ; chars per disc slice; \f ; pm 3.2.72 boss 2, tpsjobstart, ...49... ;command actions c93=k-b61 ; latest: rl w2 x3+d11+2 ; wm. w2 a5. ; w2:= 60 * param(1); dl w1 x3+d11+10 ; sn w0 0 ; if param(2) then wa w2 2 ; w2:= w2 + param(1); wm. w2 a6. ; ld w2 -7 ; w2:= w2 * 600000 shift(-13); rl. w1 b11. ; sh w2 (x1+d27) ; max wait:= max(w2, respite); rl w2 x1+d27 ; rs w2 x1+d66 ; dl w3 x3+2 ; jl. (b16.) ; return; a5: 60 ; a6: 600000>6 ; c96=k-b61 ; time: al w2 x3+d11 ; i:= 1; rl w1 x2+2 ; w1:= param(i); a2: rl w0 x2+8 ; next param: se w0 0 ; if param(i+1) then begin jl. a3. ; w1:= 60 * w1 + param(i+1); wm. w1 a5. ; i:= i + 1; al w2 x2+8 ; goto next param; wa w1 x2+2 ; end; jl. a2. ; a3: wm. w1 a7. ; w0:= w1 * 10000 shift(-13); ld w1 15 ; al w1 d53 ; goto test against max word; jl. a4. ; a7: 625 ; e. ; b. a11 w. ; c90=k-b61 ; perm: jl. w2 a3. ; check disc or drum; jl. a5. ; if not then goto search kit; rl. w2 b11. ; al w2 x2+d55+1 ; ref slices:= disc rest key 3; ; set(slices): a0: wa w2 2 ; ref slices:= ref slices + disc or drum; al w1 x2-1 ; ref entries:= ref slice -1; a1: ds. w1 a8. ; set(entries, slices): al w0 0 ; rl w1 x3+14 ; wd. w1 a7. ; slices:= slice param / se w0 0 ; al w1 x1+1 ; sl w1 2047 ; if slices > byte value then al w1 2047 ; slices:=max slices; hs w1 x2 ; slice length; dl w1 x3+22 ; sn w0 0 ; if param type = integer then hs. w1 (a8.) ; entries:= entries param; dl w3 x3+2 ; jl. (b16.) ; page jump(return); \f ; pm 20.4.72 boss 2, tpsjobstart, ...50... ; command actions c91=k-b61 ; temp: jl. w2 a3. ; check disc or drum; jl. a10. ; if not then goto param error; rl. w2 b11. ; al w2 x2+d58+1 ; ref slices:= disc rest key 1 wa w2 2 ; + disc or drum; rl. w1 b11. ; c.i27,al w1 x1+d59 z. ; ref entries:= drum rest key 1; c.-i27,al w1 x1+d58 z. ; jl. a1. ; goto set(entries, slices); a3: dl w1 x3+6 ; test disc or drum: sn. w1 (b63.+2); se. w0 (b63.) ; if not disc then jl. a4. ; goto test drum; al w1 0 ; w1:= disc; rl. w0 b63.+8 ; w0:= slice length disc; jl x2+2 ; goto return + 2; a4: c.i27 ; test drum: sn. w1 (b65.+2); se. w0 (b65.) ; if not drum or drum not present then z. jl x2 ; goto return; rl. w0 b65.+8 ; w0:= slice length drum; al w1 6 ; w1:= drum; jl x2+2 ; goto return + 2; a7: 0 ; a8: 0 ; a10: am -2 ; param c72=a10 a11: al w1 6 ; device unknown dl w3 x3+2 ; wa w3 2 ; jl. (b16.) ; a5: a2=d28+d57+1-14 ; search kit: rl. w2 b11. ; al w2 x2+a2 ; w2:= kit:= kit table base; a6: al w2 x2+14 ; rep: w2:= kit:= kit + length; dl w1 x2-9 ; sn w0 0 ; if empty(kit) then jl. a11. ; goto unknown kit; sn w0 (x3+4) ; se w1 (x3+6) ; jl. a6. ; if name(kit) <> dl w1 x2-5 ; name param then sn w0 (x3+8) ; goto rep; se w1 (x3+10) ; jl. a6. ; ; w2:= ref slices(kit); al w1 x2-1 ; w1:= ref entries(kit); rl w0 x1+2 ; w0:= slice length(kit); jl. a1. ; goto set(entries, slices); e. ; \f ; pm 20.4.72 boss 2, tpsjobstart, ...51... ; alarms from code page 3. b. a1 w. ; c103:rl. w3 b11. ; am 1 ; cause 41: line too long after <> c106:am 1 ; cause 40: syntax at <> b17: am 1 ; cause 39: param at <> c105:am 1 ; cause 38: option unknown <> c114:al w0 37 ; cause 37: limited <> hs w0 x3+d104 ; rl w1 x3+d12 ; dl. w1 x1+b53. ; w0,w1 := name of option ds w1 x3+14 ; store option for use in error printing ld w1 -100 ; ds w1 x3+18 ; jl. a1. ; c11=c106-c2 ; syntax alarm from state table c41: dl w1 x3+6 ; ds w1 x3+14 ; dl w1 x3+10 ; ds w1 x3+18 ; am 42-45 ; cause 42: device unknown <dev> c132:am 45-18 ; cause 45: file is no text file c82: am 18-11 ; cause 18: convert file unreadable; c136:am 11-5 ; cause 11: job file too long c107:am 5-3 ; cause 5 : job file unreadable c141:am 3-2 ; cause 3 : newjob file not exist c142:al w0 2 ; cause 2 : newjob file not permanent rl. w3 b11. ; hs w0 x3+d104 ; a1: rs. w3 b14. ; rl. w1 (b29.) ; current coroutine desc rl w0 x1+14 ; rs w0 x1+8 ; rl w0 x3+d13 ; load command state rl w1 x3+d23 ; load user name al w3 c37 ; set alarm claim; sn w0 c16 ; al w3 c80 ; create alarm job; sn w1 0 ; al w3 c110 ; request alarm; rl. w2 j77. ; jl. (b16.) ; j77: 473 ; virtual add of include user e. ; i. e. ; b and g names code page 3 g7=k-g8 \f ; pm 3.2.72 boss 2, tpsjobstart, ...52... ; codepage 4 g10: b. b80 w. b61: 0 ; page 0 base b14: 0 ; - 1 0 ; - 2 b2: 0 ; - 3 b11: 0 ; - 4 14<12 + 0 ; page ident: code page 4 b1: j147:7 ; get page b4: j80: 74 ; catalog sem j161:-2 ; boss private interval b8: j91: -1 ; b16: j148:8 ; page jump b20: -1<16 ; constant b26: j149:2 ; send and wait fast b28: j122:25 ; call b29: j150:26 ; curr corutine descr b30: j151:6 ; open op b31: j152:5 ; lock op b33: j153:67 ; banker que b35: j154:4 ; open b36: j155:3 ; lock b47: j156:52 ; request line free b48: j157:51 ; request que j75: h. 0,r.e17 ; device no table b78: w. ; top deviceno table b73: 0, 0 ; device name tables <:plot:>, <:punc:>, <:card:>, <:prin:>, 0,0 b75: b76=b73-b75 ; b72: j92: 33 ; release access b74: 4<12 ; constant \f ; pm 3.2.72 boss 2, tpsjobstart, ...53... b. a10 w. ; control command c74=k-b61 al. w2 j75.+e51-e24-1; w2:=ref first std reader device - 1 rs w2 x3+d11+8 ; save table reference a10: rl w2 x3+d11+8 ; al w2 x2+1 ; w2:=ref next device sl. w2 j75.+e51+e52-e24; if top of readers then jl. a4. ; goto device unknown rs w2 x3+d11+8 ; bz w2 x2 ; w2:=device number ls w2 1 ; wa w2 74 ; w2:=name table address of device rl w2 x2 ; w2:=process description of device dl w1 x2+4 ; sn w0 (x3+d11) ; test device name se w1 (x3+d11+2) ; jl. a10. ; if not ok dl w1 x2+8 ; sn w0 (x3+d11+4) ; se w1 (x3+d11+6) ; jl. a10. ; then goto next reader bz w0 x3+d51 ; se w0 0 ; if <tapes> set already then jl. a5. ; goto limited rl w1 x3+d11+8 ; w2:=ref reader device sh. w1 j75.+e51+e55-1; if not exclusive reader ba. w0 1 ; then simulate <tapes 1> hs w0 x3+d51 ; bz w1 x1 ; w1:=reader device no al w0 0 ; ds w1 x3+d11+2 ; set parameter for <device command> ; device command: c98=k-b61 ; dl w1 x3+d11+2 ; if param = text then sn w0 0 ; jl. a0. ; begin sn. w0 (a6.) ; if param= <:no:> then jl. a7. ; goto clear; la. w1 b20. ; reduce to 4 characters; ds. w1 b73.+2 ; al w2 0 ; i:= 0; a1: al w2 x2-4 ; rep1: i:= i - 1; sn. w0 (x2+b75.) ; if w01 <> device name(i) then se. w1 (x2+b75.+2); jl. a1. ; goto rep; sn w2 b76 ; if i = dev name base then jl. a4. ; goto device alarm; as w2 -2 ; jl. a2. ; end else begin a0: hs. w1 b78. ; sz w1 -1<11 ; if device > 2047 then jl. a4. ; goto device alarm; al w2 -e17-1 ; i:= - no of devices; a3: al w2 x2+1 ; rep2: i:= i + 1; bl. w0 x2+b78. ; se w0 x1 ; if w1 <> dev no(i) then jl. a3. ; goto rep; sn w2 0 ; if i = 0 then jl. a4. ; goto device alarm; a2: al w0 1 ; end; al w1 0 ; ld w1 x2+23 ; device:= device or 1 shift (23-i); rl. w2 b11. ; lo w0 x2+d30 ; lo w1 x2+d30+2 ; sz w0 (x2+d65) ; if device and device max <> 0 then jl. a5. ; goto device alarm; sz w1 (x2+d65+2) ; jl. a5. ; ds w1 x2+d30+2 ; a8: dl w3 x3+2 ; return; jl. (b16.) ; a7: rl.w2 b11. ; clear: rl w0 x2+d30 ; la. w0 a9. ; device:= 1 special bit in device al w1 0 ; the rest is cleared; ds w1 x2+d30+2 ; jl. a8. ; goto return; a4: am w0 4 ; device unknown: a5: al w0 2 ; limited: dl w3 x3+2 ; wa w3 0 ; jl. (b16.) ; a6: <:no:> ; a9: 1<23 ; ; tape command c99=k-b61 al w1 d51 ; w1:=address of <tapes> wa. w1 b11. ; rl w0 x3+d11+2 ; w0:=param 1 bz w2 x1+d81 ; if w0>max value then sl w0 x2+1 ; jl. a5. ; goto limited bz w2 x1 ; se w2 0 ; if <tapes> set already then jl. a5. ; goto limited hs w0 x1 ; else set tapes rs w2 x3+d11+2 ; simulate <device 0> jl. c98.+b61; e. ; \f ; pm 3.2.72 boss 2, tpsjobstart, ...54... ; include user: b. a15 w. ; a1=k+1, <: <0>0:> ; const. a6: 0 ; work a7: 10 ; constant a9: 0 ; line addr a11: <: clear:> c39=k-b61 ; include user and wait device: rl. w2 b47. ; lock request line free; jl. w3 (b31.) ; al w2 x1 ; line:= <(job name)>; dl w1 x3+d19+2 ; ds w1 x2+8 ; dl w1 x3+d19+6 ; ds w1 x2+12 ; dl. w1 a11.+2 ; <: clear:>; ds w1 x2+16 ; rl. w1 (b29.) ; rl w0 x1+10 ; rs w0 x3+d93 ; am x2+20 ; c61=k-b61 ; include user: al w1 0 ; rs. w1 a9. ; rl. w2 b11. ; w2:= psjobdescr abs; al w3 x2+d105 ; w3:= addr of 0; rl w1 66 ; w01:= boss std interval; dl w1 x1+78 ; jd 1<11+72; set base; al w3 x2+d19 ; w3:= job name addr; dl w1 x2+d30+2 ; w01:= device bits; al. w2 b78.-1 ; w2:= top of device no table -1; la. w0 a3. ; w01:= w01 and includable devices; la. w1 a5. ; a0: nd. w1 3 ; rep: for w01:= w01 shift 1 until al w2 x2 ; w01 >= 1 shift 46 do w2:= w2 - 1; sn w0 0 ; if w01 = 0 then jl. a2. ; goto exit; ds. w1 b73.+2 ; b73:= w01; bz w1 x2 ; w1:= device no(x2); sh. w2 b78.-e17+e25-1; if device index < mt then jl. a12. ; goto next; al w0 0 ; sl. w2 b78.-e17+e28+e19 ; if device not disc then sl. w2 b78.-e17+e28+e19+e52+e23; jd 1<11+12; include user(device no, job name); se w0 0 ; if result <> 0 then c.-1, o32, z. ; (bossfault xref) jd -32 ; boss alarm; sn. w0 (a9.) ; if wait device jl. a12. ; sh. w2 b78.-e17+e28+e19+e52-1; and device index >= process device jl. a12. ; then \f ;pm 17.3.72 boss 2, tpsjobstart, ...55... ;include user rs. w0 a6. ; convert devno to text a10: sh w1 9 ; jl. a8. ; wd. w1 a7. ; ba. w0 a1. ; rx. w1 a6. ; ld w1 -8 ; rx. w1 a6. ; jl. a10. ; a8: wa. w1 a1. ; al w0 x1 ; rl. w1 a6. ; ds. w1 (a9.) ; rl. w1 a9. ; al w1 x1+4 ; rs. w1 a9. ; a12: dl. w1 b73.+2 ; w01:= a1 - 1 shift 46; ws. w0 a4. ; jl. a0. ; goto rep; a2: rl. w3 b14. ; exit: rl. w1 a9. ; sn w1 0 ; jl. a13. ; if wait device then al w0 x1-8 ; begin rl. w1 b61.+4 ; ws w0 2 ; sn w0 12 ; if any included then jl. a14. ; al w3 1<3+1<1; set line ds w0 x1+4 ; jl. a15. ; else a14: rl. w1 b61.+4 ; w1:= request line abs; al w0 0 ; rs w0 x3+d93 ; request line pending:= false; am b47-b48; opench(request free); a15: rl. w2 b48. ; jl. w3 (b30.) ; end; a13: dl w3 x3+2 ; jl. w1 (b16.) ; return jump; a3: 0 ; includeable devices; a5: j96: 0 ; a4: 1<22 ; e. ; \f ; pm 3.2.72 boss 2, tpsjobstart, ...56... ;copy area: page 1=job descr page ; page 1 + 0: return virt ; 2: - rel ; 4: relative of input area name ; 6: - - output - - b. a6 w. ; c36=-b61. rl. w0 a5. ; page 3 descr := savebuf rl. w1 (b29.) ; rs w0 x1+12 ; rl. w2 b4. ; lock(catalock) jl. w3 (b36.) ; al w1 -i62 ; segm := -length savebuf al w2 0 ; mode:= 0; rs w2 x3+d89 ; al w2 5 ; op := output ds w2 x3+d1+2 ; a1: dl w2 x3+d1+2 ; rep: ac w2 x2-8 ; op:=messop:=if op=input then output else input hs w2 x3+d89 ; sn w2 3 ; if op=input then al w1 x1+i62 ; segm:=mess segm:=segm+length savebuf rs w1 x3+d89+6 ; ds w2 x3+d1+2 ; rl. w1 b2. ; messfirst:=bufbase al w0 x1 ; messlast:=bufbase+length-2 wa. w1 a2. ; ds w1 x3+d89+4 ; al w1 x3+d89 ; w1:=messadr wa w2 6 ; w2:=nameadr wa w3 x2+1 ; al w2 x3 ; jl. w3 (b26.) ; send and wait fast rl w1 x1+2 ; w1:=bytes transferred sz. w0 (a3.) ; if hard error then jl. a0. ; sz. w0 (a4.) ; if -, end of medium or se w1 0 ; bytes transferred<>0 then jl. a1. ; goto rep rl w2 x3+d1+2 ; se w2 5 ; if operation = input then jl. a1. ; goto rep; a6: rl. w2 (b29.) ; page 3 descr := 0 rs w1 x2+12 ; rl. w2 b4. ; open(catalock) jl. w3 (b35.) ; dl w3 x3+2 ; return al w3 x3+2 ; jl. (b16.) ; a0: rl w2 x3+2 ; al w2 x2-2 ; rs w2 x3+2 ; rs w0 x3+d1 ; save status; jl. a6. ; a2: i62*512-2 ; a3: -1-1<18-1<1 ; a4: 1<18 ; a5: j66: 233 ; e. \f ; pm 3.2.72 boss 2, tpsjobstart, ...57... b. a11 w. ; ; create job: c34=-b61. ; rl. w1 (b29.) ; page 1 descr:=page 4 descr:=psjobdescr rl w0 x1+14 ; rs w0 x1+8 ; rl. w3 b11. ; w3:=jobdescr base rs. w3 b14. ; rl w1 x3+d13 ; if commandstate<> claims set then se w1 c16 ; jl. w1 c135. ; set claims bl w0 x3+d88 ; so w0 1<5 ; if card job then jl. a0. ; begin bl w1 x3+d30 ; if online card then so w1 1<8 ; begin jl. a5. ; al w1 x1-1<8 ; if card file no + 1 >= card file count then bl w2 x3+d116 ; al w2 x2+1 ; online card := false; sl w2 (x3+d118) ; hs w1 x3+d30 ; end jl. a0. ; else a5: al. w1 a0. ; c123:dl. w3 a1. ; call empty cardreader; jl. (b28.) ; end; j123:471 ; a1: c40 ; a0: bl w0 x3+d88 ; if reader reserved then so w0 1 ; jl. a9. ; begin rl. w0 b74. ; rs w0 x3+d87+2 ; bz w0 x3+d131 ; set reader device number rs w0 x3+d87+6 ; in operation al w1 x3+d87 ; rl. w2 b33. ; open op(banker que, release reader); jl. w3 (b30.) ; rl w2 x3+d82 ; jl. w3 (b36.) ; lock(psjob buf); ; end; a9: bl w0 x3+d51 ; if tapes = 0 then se w0 0 ; jl. a10. ; begin al w0 19 ; hs w0 x3+d14+2 ; al w1 x3+d14 ; rl. w2 b33. ; jl. w3 (b30.) ; open op(banker que, unclaim reader); rl w2 x3+d82 ; jl. w3 (b36.) ; lock(psjob buf); a10: ; end; bl w0 x3+d88 ; if alarm job then sz w0 1<4 ; goto end alarm job; jl. a11. ; \f ; pm 3.2.72 boss 2, tpsjobstart, ...58... ; reserve all: al w0 1 ; hs w0 x3+d14+2 ; opcode:= reserve; al w0 7 ; hs w0 x3+d14+4 ; all:= true; al w0 0 ; hs w0 x3+d14+5 ; stations:= 0; c.-i27,rl w0 x3+d58 z. ; c.i27,rl w0 x3+d59 ; hl w0 x3+d58+1z.; rs w0 x3+d14+6 ; discclaim:= temp entries, temp disc slices; al w1 x3+d14 ; w1:= op addr; rl. w2 b33. ; w2= banker que sem; jl. w3 (b30.) ; open op(banker que, reserve); rl w2 x3+d82 ; jl. w3 (b36.) ; lock(psjob buf); bl w0 x3+d14+2 ; sn w0 0 ; if job killed then jl. c134. ; goto kill; bl w0 x3+d14+3 ; se w0 2 ; if accountjob then jl. a2. ; begin al w0 1<10 ; hs w0 x3+d88 ; set jobstate, replace; rl. w1 (b29.) ; page 3 := virt account buf; rl. w0 a3. ; rs w0 x1+12 ; dl. w3 a4. ; call (prepare account); jl. w1 (b28.) ; end; a2: dl. w3 6 ; goto job birth jl. (b16.) ; j121: 472 c118 a3: j172: 435 ; virt account buf j173: 436 ; virt, a4: j174: 432 ; rel prepare account j159:451 ; call set claims c27 c135:dl. w3 -2 ; jl. (b28.) ; \f ; re 6.2.75 boss 2, tpsjobstart ...58a... ; alarms from code page 4. a11: ; end alarm job: e. b. a8 w. ; rl. w3 b11. ; bl w0 x3+d104 ; sn w0 6 ; if killed then release kill op; c134:jl. w1 c133. ; al w2 x3+d18 ; w2:=addr of progname; bl w0 x3+d88 ; sz w0 1<9 ; if convert then jl. w3 (b72.) ; release access(prog name); rl. w3 b11. ; ld w1 -100 ; restclaim:=0 rs w1 x3+d58 ; ds w1 x3+d59 ; rs w1 x3+d56 ; dl. w3 a8. ; goto finis; jl. (b16.) ; j79: 417 ; finis a8: j82: 427 ; \f ; pm 20.4.72 boss 2, tpsjobstart, ...59... ; alarms j111=k-b61 ; jl. w1 c133. ; banker kill; rl. w1 (b29.) ; page1 descr := page4 descr; rl w0 x1+14 ; rs w0 x1+8 ; dl. w3 a7. ; goto terminate; jl. (b16.) ; c133: ; release kill op: rl. w3 b11. ; kill; ws. w1 b61. ; rs w1 x3 ; a3: rl w2 x3+d91 ; jl. w3 (b31.) ; lock chain(psjob que); bl w2 x1+3 ; ba. w2 x2+a0. ; jl. x2+a0. ; goto action(code); a0=k-1, h. a1. ; 1 tape ready a5. ; 2 killed by user a6. ; 3 killed by operator a4. ; 4 answer a4. ; 5 time up a2. ; 6 internal a2. ; 7 run a2. ; 8 go a2. ; 9 submit a2. ; 10 convert a4. ; 11 kit on a3. ; 12 card job a3. ; 13 tre job a3. ; 14 trf job a3. ; 15 replace operation a4. ; 16 harderror swopin w. a2: am b35-b30; open answer sem; a1: ; rl. w3 b30. ; - - - chained; rl w2 x1+4 ; w2:= answer sem; jl w3 x3 ; rl. w3 b11. ; jl. a3. ; goto banker kill; a4: al w0 0 ; signal free; hs w0 x1+2 ; rl. w3 b11. ; jl. a3. ; goto banker kill; a6: am 5 ; a5: al w0 1 ; rl. w3 b11. ; hs w0 x3+d104 ; al w0 0 ; hs w0 x1+2 ; \f ;pm 17.3.72 boss 2, tpsjobstart, ...60... ;alarms rl w1 x3 ; jl. x1+b61. ; j112:426 ; a7: j113:361 ; e. b. a15 w. ; a10: <:accountjob not ok<0>:> ; request alarm: c110=k-b61 ; bl w0 x3+d104 ; if killed then sn w0 6 ; jl. w1 c133. ; release kill op; bl w0 x3+d88 ; ; testing sz w0 1<3 ; if online job then c.-1, o34, z. ; (bossfault xref) jd -34 ; bossfault 34 sz w0 1<6 ; if not internal job then jl. a0. ; begin so w0 1<5 ; jl. a9. ; bl w0 x3+d104 ; if card job and sn w0 5 ; alarm = jobfile unreadable then jl. a4. ; skip the request alarm; a9: ; rl. w2 b47. ; lock request line free; jl. w3 (b31.) ; bl w3 x3+d104 ; w3:= cause; ba. w3 x3+a1. ; w3:= text(cause); rl. w2 x3+a1. ; w2:= param(cause); a2: al w1 x1+2 ; al w3 x3+2 ; rl. w0 x3+a1. ; rs w0 x1+4 ; sz w0 255 ; jl. a2. ; se w2 1 ; if w2 then jl. a3. ; rl. w3 b11. ; line:= text param; al w2 x1+8 ; dl w1 x3+14 ; ds w1 x2+0 ; dl w1 x3+18 ; ds w1 x2+4 ; al w1 x2 ; a3: al w0 x1 ; rl. w1 b61.+4 ; ws w0 2 ; al w3 3 ; ds w0 x1+4 ; rl. w2 b48. ; jl. w3 (b30.) ; opench(request que, print); jl. a4. ; end else begin \f ;pm 27.12.72 boss 2, tpsjobstart, ...61... ;requestalarm a0: rl. w1 (b29.) ; page 3:= op; rl w0 x3+d114 ; rs w0 x1+12 ; sn w0 0 ; if answer is send then jl. a4. ; goto answer send; jl. w3 (b1.) ; get page; rl. w1 b61.+6 ; rl w2 x1+4 ; bl w0 x3+d104 ; answer:= cause; hs w0 x1+2 ; jl. w3 (b35.) ; open answer; ; end; a4: rl. w1 (b29.) ; answer send: rl w0 x3+d0 ; page 3:= job file; rs w0 x1+12 ; jl. w3 (b1.) ; get page; bl w0 x3+d88 ; so w0 1<8 ; if offline job then jl. a5. ; begin sz w0 1<5 ; if cardjob then jl. w1 c123. ; call empty cardreader; rl. w2 b4. ; lock catalog; jl. w3 (b36.) ; ; end; a5: rl. w2 b61.+6 ; j171=k+1 al w2 x2+218 ; al w0 x2+8 ; rs. w0 b61.+6 ; jl. w3 (b72.) ; release access(job file); al w0 0 ; rs. w0 (b61.+6); name table address:=0; rl. w1 (b29.) ; rs w0 x1+12 ; page 3 descr:=0; bl w0 x3+d88 ; sn w0 0 ; if started as replace job then jl. a12. ; skip release of resources; ; if offline job then so w0 1<8 ; begin jl. a6. ; dl. w1 b8. ; catalog base:= boss private; al w3 x3+d105 ; jd 1<11+72; al w3 x3+d100-d105; remove job file; jd 1<11+48; rl. w2 b4. ; open catalog; jl. w3 (b35.) ; bl w0 x3+d88 ; sz w0 1<5 ; if card job then am 18 ; release job card area else al w0 5 ; release job tape area; hs w0 x3+d14+2 ; al w1 x3+d14 ; rl. w2 b33. ; jl. w3 (b30.) ; rl w2 x3+d82 ; jl. w3 (b36.) ; lock answer; bl w1 x3+d88 ; so w1 1<0 ; if reader reserved then jl. a6. ; al w1 x1-1<0 ; release reader; hs w1 x3+d88 ; rl. w0 b74. ; rs w0 x3+d87+2 ; bz w0 x3+d131 ; rs w0 x3+d87+6 ; al w1 x3+d87 ; rl. w2 b33. ; jl. w3 (b30.) ; rl w2 x3+d82 ; lock answer; jl. w3 (b36.) ; end; \f ;pm 17.3.72 boss 2,tpsjobstart, ...62... ;requestalarm a6: al w1 x3+d14 ; release all; al w0 2 ; hs w0 x1+2 ; al w0 0 ; rs w0 x1+4 ; rs w0 x1+6 ; rl. w2 b33. ; jl. w3 (b30.) ; rl w2 x3+d82 ; jl. w3 (b36.) ; a12: bl w0 x3+d14+3 ; if accountjob then se w0 2 ; jl. a11. ; begin rl. w2 b47. ; jl. w3 (b31.) ; lock(request free); rs w1 x3+d93 ; save request line addr; al w2 x1 ; dl. w1 a10.+2 ; move ds w1 x2+8 ; dl. w1 a10.+6 ; <:accountjob not ok:> ds w1 x2+12 ; dl. w1 a10.+10; to request line ds w1 x2+16 ; al w1 12 ; length of line al w0 2 ; insert line ds w1 x2+4 ; al w1 x2 ; rl. w2 b48. ; jl. w3 (b30.) ; open(requestque,insert line); al w0 20 ; hs w0 x3+d14+2 ; op.code:=activate; rl. w2 b33. ; al w1 x3+d14 ; jl. w3 (b30.) ; open(bankerque,wait activate); rl w2 x3+d82 ; jl. w3 (b36.) ; lock(psjobbuf); rl w1 x3+d93 ; get request line addr; al w0 1 ; rs w0 x1+2 ; remove line; rl w0 x3+d82 ; rs w0 x1+4 ; answ sem:= psjob buf sem addr; rs w1 x1+6 ; rl. w2 b48. ; jl. w3 (b30.) ; open(request que, remove line); rl w2 x3+d82 ; jl. w3 (b36.) ; lock(psjobbuf); rl. w1 (b29.) ; rl w0 x3+d0 ; page 1 := jobfile page; rs w0 x1+8 ; al w0 0 ; rs w0 x3+d93 ; rl. w2 a7. ; al w3 j83 ; pagejump to accountjob entry; jl. (b16.) ; end; a11: \f ; re 14.8.74 boss 2, tpsjobstart ...63... al w3 j36 ; rl. w2 a7. ; jl. w1 (b16.) ; a7: j81: 400 ; start page ; set alarm claims: c37=k-b61 ; bl w2 x3+d88 ; ld w1 -100 ; ds w1 x3+d77 ; conversational:=core lock time:=0; hs w1 x3+d70 ; tape table entries:= 0; rs w1 x3+d62 ; no of useable kits:= 0; rs w1 x3+d58 ; temp disc slices:= 0; ds w1 x3+d59 ; perm disc:= temp entries:= temp drum slices:= 0; rs w1 x3+d56 ; perm drum claim:= 0; ds w1 x3+d43 ; keys:= stations:= mounts:= tapes:= 0; ds w1 x3+d47 ; time:= size:= 0; ds w1 x3+d30+2 ; devices:= 0; ds w1 x3+d45 ; conv:= acc:= out:= susp:= 0; ds w1 x3+d39 ; buf:= area:= int:= func:= 0; al w0 1 ; hs w0 x3+d102 ; mini:=yes; hs w0 x3+d45 ; outp:= 1; sz w2 1<7 ; if convert claim then hs w0 x3+d68 ; converts:= 1; ld w1 -2 ; rs w1 x3+d66 ; max wait:= 1<22; al w0 -1 ; hs w0 x3+d39 ; internal:= -1; b. a0 w. so w2 1<8 ; if offline job then begin jl. a0. ; sz w2 1<5 ; temp disc entries:=if cardjob am i163-i162; then jobcard area length al w0 i162 ; else jobtape area length rs w0 x3+d58 ; al w0 1 ; temp entries:=1 c.i27, hs w0 x3+d59 z. ; c.-i27,hs w0 x3+d58 z. ; a0: e. \f ;pm 29.5.72 boss 2, tjobstart, ...64... ; create alarm job: c80=k-b61 ; bl w1 x3+d88 ; set error mode; la. w1 a8. ; sz w1 1<7 ; if convert claim then al w1 x1-1<7-1<4; convert claim:= false else alarm mode:= true; al w1 x1+1<4 ; hs w1 x3+d88 ; jl. c34+b61.; goto create job; a8: -1-1<4-1<2-1<1 ; a1: e. ; b. a10 h. ; ; finis causes ; 0 1 2 3 4 5 6 7 8 9 a0., a0., a0., a0., a0., a10., a1., a2., a3., a4. ; 0 a0., a5., a0., a0., a0., a0., a0., a0., a0., a0. ; 10 a0., a0., a0., a0., a0., a0., a0., a0., a0., a0. ; 20 a0., a0., a5., a0., a0., a0., a0., a0., a6., a7. ; 30 a8., a9. ; 40 w. a0: 0, <:boss alarm<0>:> a1: 0, <:killed by operator <0>:> a2: 1, <:user index too large <0>:> a3: 1, <:illegal identification <0>:> a4: 1, <:user index conflict <0>:> a5: 0, <:jobfile too long<0>:> a6: 1, <:option unknown <0>:> a7: 1, <:param at <0>:> a8: 1, <:syntax at <0>:> a9: 1, <:line too long after <0>:> a10: 0, <:jobfile unreadable<0>:> e. i. e. ;b names codepage 4 g9=k-g10 \f ; re 14.8.74 boss 2, tpsjobstart ...65... ; 5. codepage g11: ; start of page b. b80 w. b61: 0,r.5 ; page addresses 15<12 + 0 ; page ident: codepage 5 b16: j200: 8 ; page jump b19: 10 ; constant b26: j201: 2 ; send and wait fast b28: j202: 25 ; call b29: j203: 26 ; current coroutine descr b30: j204: 6 ; open chained b31: j205: 5 ; lock chained b33: j206: 67 ; banker queue b35: j207: 4 ; open b36: j208: 3 ; lock b47: j209: 52 ; request line free b48: j210: 51 ; request queue b71: j211: 32 ; prepare access b72: j212: 33 ; terminate access j213: 140 ; -2 virt rb procedures b73: j214: 141 ; rel lookup and reserve b75: <:clock:>,0,0,0 ; timer b76: 0, 5 ; timermessage b77: j99: 1 ; send and wait b79: 5<12 ; constant b43: <:tro:>, 0 ; tape modes <:tre:>, 2 ; <:trn:>, 4 ; <:trf:>, 6 ; b44: <:crc:>, 10 ; card modes <:crd:>, 8 ; <:crb:>, 0 ; b42: ; end modes b41: <:primout:>,0; name of online-job primary output area j100: 56 ; std reader operation semaphore; \f ; re 14.8.74 boss 2, tpsjobstart ...66... ; page 4 = psjobdescr, x3 = page 4 addr. ; page 1 = page 4. ; load <mode> <name> b. a60 w. ; a35=d11+8+8 ; rel on job descr after second parameter c62=k-b61 ; dl w1 x3+2 ; save return ds w1 x3+d64 ; rl w1 x3+d13 ; se w1 c16 ; if first load command then jl. w1 a29. ; call set claims; c147=k-b61 dl w1 x3+d11+2 ; w1:=mode; sn w0 0 ; if mode is an integer then jl. a1. ; goto test card mode; jl. a43. ; goto search modetable; a43: dl w1 x3+d11+2 ; search mode table: se w1 0 ; if mode is more than 3 letters then jl. a34. ; goto not in mode table; al. w2 b43. ; w2:=ref first mode; a2: sn w0 (x2) ; rep: if this mode then jl. a3. ; goto mode found; al w2 x2+4 ; w2:=ref next mode; se. w2 b42. ; if not end element then jl. a2. ; goto rep; a34: al w1 10 ; rs w1 x3+a35+r3 ; set mode,kind dl w1 x3+d122 ; ds w1 x3+a35+r2+2; set host description se w0 0 ; if rbjob then jl. a44. ; goto nonstd mode found; a18: dl w3 x3+d64 ; parameter error: al w3 x3+4 ; jl. (b16.) ; goto return + 4; a1: sz w1 2 ; test card mode: sz w1 8 ; if (bit 1 & -, bit 3) ! bit 0 ! sz w1 -1<8+1<6+1 ; mode > 128 or mode = 64 then jl. a18. ; goto parameter error; \f ; re 75.06.24 boss 2, tpsjobstart ...66a... a4: bl w0 x3+d88 ; test card job: so w0 1<5 ; if not card job jl. a18. ; then goto parameter error; rs w1 x3+d11+2 ; save mode; bl w1 x3+d116 ; card file no:= card file no + 1; al w1 x1+1 ; hs w1 x3+d116 ; rl w0 x3+d118 ; if card file no = card file count sn w0 x1 ; jl. c100. ; card exhausted; jl. a5. ; ; procedures for call of rb procedures a42: rl. w1 b73. ; lookup and reserve: ws. w2 b61. ; save rel rb entry ds w2 x3+2 ; and rel return; dl w1 x3+d11+2 ; ds w1 x3+a35+r1+2; move name; dl w1 x3+d11+6 ; ds w1 x3+a35+r1+6; dl w1 x3+d26 ; set catalog base = project base ds w1 x3+a35+r6+2; rl. w2 (b29.) ; rl w1 x2+8 ; al w1 x1+a35 ; page1:=page1+a35; rs w1 x2+8 ; al w1 x3+a35 ; rs. w1 b61.+2 ; rl. w2 b73.-2 ; rl w3 x3 ; jl. w1 (b28.) ; call rb procedure; am -1 ; +2: not ok al w1 0 ; +4: ok rl. w2 (b29.) ; rl w0 x2+14 ; rs w0 x2+8 ; page1:=page4(=page1-a35); rl. w3 b61.+8 ; rs. w3 b61.+2 ; am (x3+2) ; jl. b61. ; return; ; procedure set reader device no ; ; if another reader is reserved already then release it ; ; call return ;w0 irrelevant destroyed ; w1 device no destroyed ; w2 irrelevant destroyed ; w3 return abs page 1 a47: ws. w3 b61. ; w3:=rel return al w2 x3 ; rl. w3 b61.+2 ; w3:=page 1 abs rs w2 x3+d144 ; save rel return bz w2 x3+d131 ; w2:=old device no hs w1 x3+d131 ; set new device no bl w0 x3+d88 ; so w0 1 ; if reader reserved and jl. a55. ; sn w2 x1 ; old reader<>new reader then jl. a48. ; begin al w0 4 ; hs w0 x3+d87+2 ; opcode:=release reader rs w2 x3+d87+6 ; device:=reserved reader device no al w1 x3+d87 ; w1:=abs ref operation rl. w2 b33. ; jl. w3 (b30.) ; open(banker queue,release reader) rl w2 x3+d82 ; jl. w3 (b36.) ; lock(psjob buf) bl w2 x3+d88 ; al w2 x2-1 ; clear reader reserved bit hs w2 x3+d88 ; bz w0 x3+d131 ; sn w0 0 ; if new reader = std reader then jl. a18. ; goto alarm rl w0 x3+d87+6 ; se w0 0 ; if old reader = std reader then jl. a48. ; begin a56: al w1 x3+d14 ; al w0 31 ; hs w0 x1+2 ; opcode := unclaim std reader rl. w2 b33. ; jl. w3 (b30.) ; open(banker queue,unclaim std reader) rl w2 x3+d82 ; jl. w3 (b36.) ; lock(psjob buf); jl. a48. ; end a55: ; end else bz w0 x3+d131 ; begin se w0 0 ; if new reader = rb reader jl. a56. ; then goto unclaim std reader a48: am (x3+d144 ); end jl. b61. ; return \f ; re 75.06.24 boss 2, tpsjobstart ...66b... a0=k-b61 ; job tape entry: rl w2 x3+d11+2 ; w2:=mode; al w1 10 ; hs w2 2 ; w1:=mode kind; rs w1 x3+a35+r4 ; set mode,kind dl w1 x3+d122 ; set host description ds w1 x3+a35+r2+2; rs w0 x3+d14+4 ; rl. w1 j100. ; w1:=std reader operation sem; se w0 0 ; if host ident<>0 then al w1 x1+e13 ; w1:=rb reader operation sem; hs w0 x3+d131 ;********** device=0 - removed at new job command rs w1 x3+d141+4 ; set reader operation sem in reader table; am x2 ; rl. w0 x2+b43. ; mode name:= al w1 0 ; mode name(mode); ds w1 x3+d11+2 ; al w0 0 ; ds w1 x3+d11+6 ; jl. a46. ; goto test rb reader; a3: rl w1 x2+2 ; mode found: sl. w2 b44. ; if card mode then jl. a4. ; goto test card job; rs w1 x3+a35+10 ; save mode al w1 0 ; reader:=std ************changed at new load command jl. w3 a47. ; set reader device no al w0 0 ; host id:=0 rl w2 x3+a35+10 ; w2:=mode a44: rs w0 x3+d14+4 ; nonstd mode found: (w0=host ident); rl. w1 j100. ; w1:=std reader operation sem; se w0 0 ; if host ident <> then al w1 x1+e13 ; w1:=rb reader operation sem; rs w1 x3+d141+4 ; set reader operation sem in reader table; bl w1 x3+d92 ; al w1 x1+1 ; tape count:=tape count+1; hs w1 x3+d92 ; am 127-1 ; a46: al w0 1 ; test rb reader: rs w0 x3+a35+r5 ; time out:=if jobtape then 1 else 127; rs w2 x3+a35+10 ; save mode in case of std reader rl w0 x3+d14+4 ; if std reader then sn w0 0 ; goto reserve reader; jl. a7. ; rl w0 x3+d146 ; set abs ref message area rs w0 x3+a35+r0 ; dl w1 x3+d122 ; set host description ds w1 x3+a35+r2+2; jl. w2 a42. ; lookup and reserve; rl w0 x3+a35+r100; w0:=result or name table addr; sh w0 (72) ; if w0 not name table address then jl. a18. ; parameter error sl w1 0 ; if subprocess reserved (by boss) then jl. a49. ; begin al. w1 b76. ; w1:=message al. w2 b75. ; w2:=name jl. w3 (b77.) ; send and wait timermessage jl. a46.-2 ; try reservation once again a49: ; end dl w2 x3+a35+8 ; w1w2:=deviceno,rckind se w2 10 ; or rckind<>reader then jl. a18. ; goto parameter error; jl. w3 a47. ; set reader device no \f ; pm 3.2.72 boss 2, tpsjobstart, ...67... a7: bl w1 x3+d88 ; reserve reader: sz w1 1 ; if reader reserved then jl. a6. ; goto request for load; al w0 3 ; hs w0 x3+d14+2 ; opcode:=reserve reader; bz w1 x3+d131 ; rs w1 x3+d14+6 ; set host ident, device no in operation; al w1 x3+d14 ; w1:=operation; rl. w2 b33. ; jl. w3 (b30.) ; open(banker queue,reserve reader); rl w2 x3+d82 ; jl. w3 (b36.) ; lock(psjob buf); bl w0 x3+d14+2 ; se w0 3 ; jl. c35. ; job killed; al w0 1 ; jobstate.reader reserved:=true ba w0 x3+d88 ; hs w0 x3+d88 ; a6: rl. w2 b47. ; lock(request line free); jl. w3 (b31.) ; a39=32 ; length of text if jobfile a40=48 ; length of text if not jobfile c.6+a40+4-e10-1, m.*** e10 too small z. c.6+a39+4-e10-1, m.*** e10 too small z. al w2 x1 ; w2:=line buffer addr; ld w1 -100 ; set empty text (12*null) ds w1 x2+8 ; ds w1 x2+12 ; dl. w1 a11. ; <:load :> ds w1 x2+16 ; bz w1 x3+d131 ; w1:=device no ls w1 1 ; wa w1 74 ; w1:=name table address rl w3 x1 ; w3:=process description address dl w1 x3+4 ; move device name ds w1 x2+20 ; dl w1 x3+8 ; lo. w1 a17. ; ds w1 x2+24 ; rl. w3 b61.+2 ; reestablish w3 dl w1 x3+d11+2 ; ds w1 x2+28 ; dl w1 x3+d11+6 ; mode name; lo. w1 a17. ; ds w1 x2+32 ; dl. w1 a15. ; ds w1 x2+36 ; <: job:> rl. w1 a45. ; rs w1 x2+38 ; <:<13><10><127>:> rs w1 x2+54 ; bz w0 x3+d92 ; w0:=tape number sn w0 0 ; if job tape then jl. a12. ; goto a12 jl. w1 a27. ; w1:=tape number in text form rs w1 x2+42 ; al w1 32 ; rs w1 x2+44 ; space dl w1 x3+d19+2 ; move job name ds w1 x2+36 ; dl w1 x3+d19+6 ; lo. w0 a17. ; ds w1 x2+40 ; dl w1 x3+d11+10 ; move area name ds w1 x2+48 ; dl w1 x3+d11+14 ; ds w1 x2+52 ; \f ; sm 75.06.02 boss 2, tpsjobstart ...68... am a40-a39; a12: al w0 a39 ; w0:=length of text rs w0 x2+4 ; rl w0 x3+a35+10 ; get mode for send operation; rs w0 x3+d11+2 ; rl w1 x3+a35+12 ; rl w0 x3+a35+4 ; ds w1 x2+e10-2 ; se w0 0 ; am 1<2-1<3; a14: al w0 1<3+1<1; operation code; rs w0 x2+2 ; al w1 x2 ; w1:= buffer addr; rl. w2 (b29.) ; request line:= virtual buf addr; rl w0 x2+10 ; rs w0 x3+d93 ; bz w1 x3+d131 ; w1:= reader device number ds w1 x3+d87+14 ; am 0-2 ; a5: c29=k-b61 ; card entry: c30=a0-c29 ; define job tape entry relative to card entry. al w0 2 ; w0:=tape- or card-reader (0 or 2); se w0 2 ; am d141-d118; w1:=rel base of tape reader table; al w1 d118 ; w1:=rel base of card reader table; ds w1 x3+d11+6 ; ; send operation to psreader al w0 1 ; op.code:= 1; rs w0 x3+d87+2 ; rl w1 x3+d11+2 ; op.mode:= mode; rs w1 x3+d87+6 ; rl. w1 (b29.) ; rl w1 x1+8 ; wa w1 x3+d11+6 ; w1:=virt addr of reader table (on job ; descr page); rs w1 x3+d87+10 ; al w1 x3+d87 ; w1:= op; jl. w2 a36. ; w2:=abs base of reader table; rl w2 x2+4 ; w2:=reader queue sem; jl. w3 (b30.) ; open op(reader que); rl w2 x3+d82 ; jl. w3 (b36.) ; lock(psjob buf); rl w0 x3+d11+4 ; if tape reader then sn w0 0 ; ignore the answer; jl. a38. ; rl w0 x3+d87+2 ; w0:=answer; se w0 0 ; if answer not ok then jl. a37. ; goto mode unknown; a38: \f ; re 14.8.74 boss 2, tpsjobstart ...69... ; create area ; check for area in use al w0 0 ; mess.segm := 0; rs w0 x3+d86 ; dl w1 x3+d11+8+2; if area name = <:primout:> sn. w0 (b41.) ; se. w1 (b41.+2); jl. a28. ; dl w1 x3+d11+8+6; sn. w0 (b41.+4); se. w1 (b41.+6); jl. a28. ; bl w0 x3+d88 ; and online then sz w0 1<3 ; jl. a26. ; goto alarm; a28: dl w1 x3+d24 ; w0w1 := interval; al w2 x3+d11+8 ; w2 := name address; jl. w3 (b71.) ; prepare access; al w2 1 ;+2 if not found then entry access count := 1; sn w0 (x3+d24-2) ;+4 if interval of entry found <> login interval then se w1 (x3+d24) ; al w2 1 ; access count := 1; rs w2 x3+d86 ; save access count; al w2 x3+d11+8 ; w2 := name address; jl. w3 (b72.) ; terminate access; al w0 0 ; mess.segment := 0; rx w0 x3+d86 ; restore access count; se w0 1 ; if entry in use then jl. a26. ; goto alarm; jl. w1 a30. ; call catproc(create); jl. a8. ;+2 if not created then goto alarm; c148=k-b61 rl. w0 b79. ;+4 mess.op:= output; rs w0 x3+d89 ; jl. w2 a36. ; w2:=abs base of reader table; rl w2 x2+8 ; page 3:=top of buffer; rl. w1 (b29.) ; rs w2 x1+12 ; \f ;pm 8.2.72 boss 2, tpsjobstart, ...70... a10: jl. w2 a36. ; next block: al w3 x2 ; w3:=abs base of reader table; rl. w1 (b29.) ; rl w2 x1+12 ; page 3:= if page 3 + 512 >= top of buf then al w2 x2+512 ; first of buf else sl w2 (x3+8) ; page 3 + 512; rl w2 x3+6 ; rs w2 x1+12 ; rl w2 x3+12 ; lock(reader full); jl. w3 (b36.) ; al w1 0 ; rx w1 x3+d93 ; if request line pending then sn w1 0 ; jl. a16. ; begin rs w1 x3+d87+6 ; op.line:= line virt; al w0 1 ; rs w0 x3+d87+2 ; op.code:= release; al w1 x3+d87 ; w1:= op; rl. w2 b48. ; open op(request que); jl. w3 (b30.) ; rl w2 x3+d82 ; lock(psjob buf); jl. w3 (b36.) ; end; a16: rl. w1 b61.+6 ; mess.first:= page 3 abs; al w2 x1+510 ; mess.last:= page 3 abs + 510; ds w2 x3+d89+4 ; w1:= mess addr; al w1 x3+d89 ; w2:= name addr; al w2 x3+d11+8 ; jl. w3 (b26.) ; send and wait fast; jl. w2 a36. ; w2:=abs base of reader table; rl w2 x2+10 ; open(reader free); jl. w3 (b35.) ; rl w1 x3+d86 ; mess.segment:= mess.segment + 1; al w1 x1+1 ; rs w1 x3+d86 ; jl. w2 a36. ; w2:=abs base of reader table; rl w0 x2+2 ; w0:=segment count; rl w2 x3+d11+4 ; if tape reader then sn w2 0 ; (w0=addr of segment count) rl w0 (0) ; w0:=segment count; sn w0 x1 ; if w0 = mess.segment then jl. a9. ; goto remove area proc and return; rl w1 x3+d15 ; if mess.segment <> area size se w1 (x3+d86) ; then jl. a10. ; goto next block; jl. w1 a31. ; call cat proc(increase entry) jl. a8. ;+2 if ok then goto next block; c149=k-b61 jl. a10. ;+4 else goto test card or tape \f ; sm 75.06.02 boss 2, tpsjobstart, ...70a... a9: dl w1 x3+d24 ; remove area proc: al w3 x3+d105 ; jd 1<11+72; al w3 x3+d11+8-d105; jd 1<11+64; dl w3 x3+d64-d11-8; return: jl. (b16.) ; a11=k+2, <:load :> a13: <: 0:> a15=k+2, <: job:> a17: <:<0><0><32>:> a45: <:<13><10><127>:> a51: 0 ; a52: 48-32 ; zero-space ; convert no to text form ; call: w0=no, w1=return ; return: w1=no on text form a27: rs w1 x2+e10-2 ; save return ld w1 -24 ; w0w1:=number wd. w1 b19. ; w0:=n mod ; w1:=n // 10; rs. w0 a51. ; save least significant digit al w0 0 ; wd. w1 b19. ; w0:=(n div 10) mod 10, w1:=(n div 100) sn w1 0 ; if w1<>0 then jl. a53. ; begin wa. w0 a52. ; w0:=digit wa. w1 a52. ; w1:=digit jl. a54. ; end else a53: se w0 0 ; if w0<>0 then wa. w0 a52. ; w0:=digit a54: rx w1 0 ; exchange first two digits ls w1 16 ; ld w1 -8 ; wa. w1 a51. ; wa. w1 a13. ; add <: 00:>; jl (x2+e10-2) ; return; a8: rl w0 x3 ; w0 := return param from cat proc; sn w0 1 ; if killed then jl. a22. ; begin rl w0 x3+d86 ; sn w0 0 ; if mess.segment <> 0 then jl. a23. ; jl. w1 a32. ; call catproc(remove entry); c.-1, o14, z. ; (bossfault xref) jd -14 ;+2 c150=k-b61 ;+4 a23: am 6-26 ; cause 6 : killed a26: am 26-7 ; cause 26: load area in use a37: am 7-32 ; cause 7 : mode unknown a22: al w0 32 ; cause 32: temp exceeded hs w0 x3+d104 ; \f ; sm 75.06.02 boss2, tpsjobstart, ...71... al. w1 a21. ; if reader not reserved then bl w0 x3+d88 ; dl. w3 a25. ; so w0 1 ; jl. (b28.) ; empty card reader ; else begin rl. w3 b61.+2 ; w3:=page 1 abs a20: rl w2 x3+d141+12; rep: jl. w3 (b36.) ; lock(reader full); al w1 0 ; release request; rx w1 x3+d93 ; sn w1 0 ; jl. a24. ; rs w1 x3+d87+6 ; al w0 1 ; rs w0 x3+d87+2 ; al w1 x3+d87 ; rl. w2 b48. ; jl. w3 (b30.) ; open chained(request queue); rl w2 x3+d82 ; jl. w3 (b36.) ; lock psjob buf; a24: ; rl w2 x3+d141+10; jl. w3 (b35.) ; open(reader free); rl w2 x3+d86 ; segment:= segment + 1; al w2 x2+1 ; rs w2 x3+d86 ; rl w0 (x3+d141+2); if segment <> segm count then se w0 x2 ; goto rep; jl. a20. ; end; a21: rl w0 x3+d13 ; if claims set then sn w0 c16 ; jl. c116. ; goto create alarm job; jl. c102. ; goto request alarm; a29: am c137-c144; set claims a30: am c144-c145; cat proc a31: am c145-c146; - - a32: al w3 c146 ; - - rl. w2 j197. ; jl. (b16.) ; page jump to code page 2 j197: 451 ; virt codepage 2 j177: 471 ; virt empty card reader: code page 5 a25: c55 ; \f ; re 14.8.74 boss 2, tpsjobstart ...72... ; empty card reader: b. a2 w. ; c40=k-b61 ; a0: bl w1 x3+d116 ; next file: card file no:= card file no + 1; al w1 x1+1 ; hs w1 x3+d116 ; rl w0 x3+d118 ; sh w0 -1 ; w0:= if ---job reached then card file count al w0 x1+1 ; else cardfile no + 1; sh w0 x1 ; if card file count <= card file no jl. a2. ; then goto exit; al w0 1 ; rs w0 x3+d87+2 ; op.code:= boss controlled input; al w0 0 ; rs w0 x3+d86 ; segment no:= 0; al w0 i118 ; rs w0 x3+d87+6 ; mode:= std mode; rl. w1 (b29.) ; rl w1 x1+8 ; al w1 x1+d118 ; w1:= virt addr of card file count; rs w1 x3+d87+10 ; operation.10:= w1; al w1 x3+d87 ; rl w2 x3+d118+4 ; jl. w3 (b30.) ; open op(card reader que); rl w2 x3+d82 ; jl. w3 (b36.) ; lock(psjob buf); c55=k-b61 ; a1: rl w2 x3+d118+12; rep: lock(card reader full); jl. w3 (b36.) ; rl w2 x3+d118+10; jl. w3 (b35.) ; open(card reader free); rl w2 x3+d86 ; segment no:= segment no + 1; al w2 x2+1 ; rs w2 x3+d86 ; rl w0 x3+d118+2 ; if segment no = segment count sn w0 x2 ; jl. a0. ; then goto next file; jl. a1. ; goto rep; a2: dl w3 x3+2 ; exit: return; jl. (b16.) ; e. ; \f ; re 19.8.74 boss 2, tpsjobstart ...73... ; procedure get abs base of reader table: ; the position of the actual reader table is defined by: ; d11+6: rel of base of table on job descr page 0 ; saved return a36: rs. w2 a36.-2 ; save return; am (x3+d11+6) ; al w2 x3+0 ; w2:=abs on job descr page; jl. (a36.-2); return; e. ; alarms from codepage 5 b. a3 w. c102:al w3 c110 ; goto request alarm; jl. a1. ; c35: am -30 ; cause 6: killed c100:al w0 36 ; cause 36: card exhausted hs w0 x3+d104 ; save cause rl. w1 (b29.) ; rl w2 x1+14 ; page 1+=page 4 (=job descr page) rs w2 x1+8 ; c116:al w3 c80 ; goto create alarm job a1: rl. w2 j199. ; jl. (b16.) ; j199: 473 ; alarm page e. i. e. ; end b names codepage 5 g12=k-g11 i. e. ; d names i. e. ; c names a2=j75 ; j. code to move device table into code. a1: rl. w2 a4. ; al w1 -2047 ; a0: bl. w0 x2 ; hs. w0 x1+a2.+2047; al w1 x1+1 ; al w2 x2+1 ; se w1 e17-2047; jl. a0. ; al w0 0 ; normal exit to slang; al w2 0 ; jl x3 ; a4: e24-a3-4+10000-a0 ; jl. a1. ; j. h0=s0,h1=s1 ; final check sums i. e. ; b, f, g, j names e. e. ; e, i names, end tjobstart \f ▶EOF◀