|
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: 19200 (0x4b00) Types: TextFile Names: »tclaim«
└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ. Detaljer om "HC8000" projekt. └─⟦0364f57e3⟧ └─⟦20407c65c⟧ »kkmon0filer« └─⟦this⟧ └─⟦667bb35d6⟧ Bits:30007480 RC8000 Dump tape fra HCØ. └─⟦4334b4c0b⟧ └─⟦f781f2336⟧ »kkmon0filer« └─⟦this⟧
; rc 15.08.1974 claim ...1... ; the program is translated like ; (claim=slang text ; claim) b. g6 w. ; for insertproc d. p.<:fpnames:> l. s. a22, b38 , c4 , d2 , i1 w. k = h55 ; comment the program searches the monitor tables ; and the chaintables and the processdescription ; and computes the claims of the process. ; the program uses the following absolute addresses ; in the monitor table: ; 66 = address of processdescription ; 92 = address of first drum chain table ; 100 = maximum permanent key d0. ; length of program 0 ; (not used) jl. a0. ; program entry: goto start; ; variables: b0: 0 ; addr of claim-output-zone b1: 0 ; keymask b2: 0, r.4; devicename b3 = b2 + 2 b4 = b3 + 2 b5 = b4 + 2 b8: 0 ; saved (item head) b9: 0 ; saved (item address) b10: 0 ; addr of chain list element b11: 0, r.4; devicename (from chaintable) b12=b11 + 2 b13=b12 + 2 b14=b13 + 2 b15: <: :>, r.3 ; mask (11 spaces) b16: <: <0>:> b17: 0 ; number of segments b18: 0 ; number of entries b20: <:***claim connect <0>:> ; errortext b21: <: entr<0>:> ; b22: <: segm<0>:> b24: <:***claim <0>:> b25: <: unknown<0>:> b26: <:<10> key <0>:> b27: 0,r.10; tail for change entry b28: <:<10>area <0>:> b29: <: buf <0>:> b30: <: size <0>:> b31: <:<10> temp <0>:> b32: <:<10> login <0>:> b33: <:<10> perm <0>:> b34: <: no resources<0>:> b35: <:: :> b36: <: segm/slice<0>:> b37: <:<10><10>:> b38: <: first core <0>:> \f ; rc 15.08.1974 claim ...2... ; program start: ; if a leftside is specified in the program call, ; the current input zone is stacked and used for ; secondary output. a0: al w0 x3 ; save w3 al. w1 h19. ; jl. w3 h79. ; terminate prog zone al w3 (0) ; am (66) ; bz w1 27 ; save area rs. w1 b17. ; before connect rl w0 x3 ; start: w0 := item head of program name; bz w2 0 ; w2 := separator; se w2 6 ; if separator = equal then jl. a1. ; begin jl. w3 h29.-4 ; stack current input; rl. w2 h8. ; w2 := outfile name; al w2 x2+2 ; al w0 1<1+1 ; comment: connect 1 segm. on disk; jl. w3 h28. ; connect output(w0, w1, w2); se w0 0 ; if connect trouble then jl. a7. ; error (<:connect output:>); am h20-h21; outputzone := current input; a1: al. w2 h21. ; end rs. w2 b0. ; else outputzone := current output; rl. w1 b0. ; al. w0 b28. ; jl. w3 h31. ; writetext(<:area:>); rl. w0 b17. ; jl. w3 h32. ; writeinteger(area); 32<12+1 ; al. w0 b29. ; jl. w3 h31. ; writetext(<:buf.>); am (66) ; bz w0 26 ; jl. w3 h32. ; writeinteger(buf); 32<12+1 ; al. w0 b30. ; jl. w3 h31. ; writetext(<:size:>); rl w3 66 ; rl w0 x3+24 ; ws w0 x3+22 ; jl. w3 h32. ; writeinteger(size); 32<12+1 ; al. w0 b38. ; jl. w3 h31. ; writetext(<:first core:>); am (66) ; rl w0 22 ; jl. w3 h32. ; writeinteger(first core); 32<12+1 ; jl. w3 d1. ; next param; am ; comment: skip <end param> action; ; comment: at this point the register contents are: ; w0 == item head ; w1 == item address ; w2 == irrellevant ; w3 == irrellevant a2: ds. w1 b9. ; save w0w1 rl. w1 b0. ; al w2 10 ; separate output jl. w3 h26. ; between parameters dl. w1 b9. ; restore w0w1 al w2 13 ; next parameter: rs. w2 b1. ; keymask := all scopes; al w2 -1 ; rs. w2 b2. ; devicename := all devices; bl w2 0 ; if separator = <end param> then sh w2 3 ; goto no parameters; jl. a6. ; a3: bz w2 1 ; if item kind <> <name> then se w2 10 ; goto paramerror jl. a5. ; rl. w3 b1. ; keymask:=13; rl w2 x1+2 ; keymask:= sn. w2 (b26.+2) ; if param=<:key:> al w3 -1 ; then -1 else sn. w2 (b31.+2) ; if param=<:temp:> al w3 1 ; then 1 else sn. w2 (b32.+2) ; if param=<:login:> al w3 4 ; then 4 else sn. w2 (b33.+2) ; if param=<:perm:> al w3 8 ; then 8 sn. w3 (b1.) ; jl. 6 ; else rs. w3 b1. ; jl. a4. ; dl w3 x1+4 ; move parametername to devicename; ds. w3 b3. ; dl w3 x1+8 ; \f ;rc 15.08.1974 claim ...3... ds. w3 b5. ; a4: jl. w3 d1. ; next param; jl. a8. ; if param = <end param> then goto start search; bz w2 0 ; if separator <> <point> then se w2 8 ; goto start search; jl. a8. ; jl. a3. ; goto moreparam; a5: jl. w3 d2. ; paramerror: out error param; jl. w3 d1. ; next param; am ; comment: skip end param action; al w2 1 ; succes := false; hs. w2 b7. ; jl. a2. ; goto next parameter; ; register contents: ; w0 == item head ; w1 == item address ; w2 == irrellevant ; w3 == irrellevant a6: al w3 0 ; no parameters: b6 = a6 + 1 ; comment: first time = 0: true, <>0: false; sn w3 0 ; if first time then jl. a8. ; goto start search; rl. w1 b0. ; terminate program: se. w1 h20. ; if outputzone <> current in then jl. a14. ; goto exit; bz w3 x1+h1+1 ; terminate output: se w3 4 ; char := if kind = bs sn w3 18 ; or mag tape am 25 ; then em al w2 0 ; else null; jl. w3 h34. ; close up (outputzone, char); jl. w3 h79. ; terminate zone; al w3 x1+h1+2 ; w3 := outfile document name; al. w1 b27. ; w1 := tail address; jd 1<11+42; lookup entry; rl w0 x3+14 ; tail(0) := segment count of sec. zone; rs w0 x1 ; bz w0 x3-1 ; if kind = <bs> then sn w0 4 ; jd 1<11+44; change entry; rl. w3 h8. ; w3 := outfile name; al w3 x3+2 ; jd 1<11+42; lookup entry; al w0 0 ; content := text; rs w0 x1+16 ; jd 1<11+44; change entry; jl. w3 h30.-4 ; unstack zone (current in); b7 = k+1 ; succes = 0: true, 1: false; a14: al w2 0 ; exit: w2 := succes; jl. h7. ; goto fp end program; a7: al. w0 b20. ; connect trouble: outtext (<:connect :>); jl. w3 h31.-2 ; rl. w3 h8. ; outtext(outfile name); al w0 x3+2 ; jl. w3 h31.-2 ; al w2 10 ; outchar (nl); jl. w3 h26.-2 ; al w2 1 ; w2 := 1; jl. a1. ; goto next parameter; \f ; rc 15.08.1974 claim ...4... ; w0 == item head ; w1 == item address a8: ds. w1 b9. ; start search: save(item); hs. w1 b6. ; first time := false; rl w1 92 ; w1 := start of nametablelist; al w1 x1-2 ; w1 := w1-2; rs. w1 b10. ; ; irrellevant register contents: a9: rl. w1 b10. ; next device: al w1 x1+2 ; w1 := w1+2; rs. w1 b10. ; comment: w1 is a pointer in nametable; rl w3 x1 ; w3 := addr of chaintable; sn w3 0 ; if addr of chaintable = 0 then jl. a13. ; goto end of devices; dl. w1 b3. ; w0w1 := 1.part of paramname; sn w0 -1 ; if empty paramname then jl. a10. ; goto device found; sn w0 (x3+16-34); device to find: se w1 (x3+18-34); if paramname = device name then jl. a9. ; goto device found; dl. w1 b5. ; sn w0 (x3+20-34); se w1 (x3+22-34); jl. a9. ; ; w3 == record chain table address a10: dl w1 x3+18-34 ; device found: sn w0 0 ; if devicename=0 then jl. a9. ; goto next device; ds. w1 b12. ; dl w1 x3+22-34 ; ds. w1 b14. ; move devicename rl w0 x3-8 ; rs. w0 b17. ; move slicelength rl. w1 b0. ; al. w0 b37. ; jl. w3 h31. ; writetext(nl,nl) al. w0 b11. ; jl. w3 h31. ; writetext(devicename); al. w0 b35. ; jl. w3 h31. ; writetext(<:: :>); rl. w0 b17. ; jl. w3 h32. ; writeinteger(slicelength); 32<12+1 ; al. w0 b36. ; jl. w3 h31. ; writetext(<:segm/slice:>); rl. w3 (b10.) ; restore w3 \f ;rc 15.08.1974 claim ...4a... rl. w1 b1. ; sn w1 -1 ; if keymask=<:keys:> or jl. 6 ; keymask=all scopes se w1 13 ; then jl. a17. ; begin al w1 -1 ; hs. w1 b19. ; key:=-1; al w1 0 ; rs. w1 b18. ; sum:=0; a15: bl. w1 b19. ; loop: al w1 x1+1 ; key:=key+1; hs. w1 b19. ; al w0 3 ; maxkey:=3 rl. w2 b1. ; if keymask= sn w2 -1 ; <:key:> then bl w0 100 ; maxkey:=monitor entry sh w0 x1-1 ; if key<=maxkey then jl. a16. ; begin rl w1 x3-36 ; w1:=proc rel of claim word wa w1 66 ; ba. w1 b19. ; ba. w1 b19. ; w1:=addr of claim word(key) bz w0 x1 ; w0:=entries wa. w0 b18. ; +sum; bz w1 x1+1 ; w1:=slices wa w1 0 ; +w0 rs. w1 b18. ; sum:=sum+entr+slices jl. a15. ; goto loop; ; end; a16: rl. w1 b18. ; se w1 0 ; if sum=0 then jl. a17. ; begin rl. w1 b0. al. w0 b34. ; jl. w3 h31. ; write(out,<:no resources:>); jl. a12. ; goto device done ; end sum=0; ; end all keys; a17: al w1 -1 ; hs. w1 b19. ; key := -1; a11: bl. w1 b19. ; next key out: al w1 x1+1 ; key := key + 1; hs. w1 b19. ; al w0 3 ; maxkey:=3; rl. w2 b1. ; if keymask= sn w2 -1 ; <:key:> then bl w0 100 ; w0 := maxkey (monitortable entry); sh w0 x1-1 ; if maxkey < key then jl. a12. ; goto device done; \f ; rc 15.08.1974 claim ...5... al w1 1 ; compare for selected key: b19 = k+1 ;key ls w1 0 ; if keymask (bit: key) = 0 then la. w1 b1. ; sn w1 0 ; jl. a11. ; goto next key out; rl w1 x3-36 ; w1 := process relative of claimword; wa w1 66 ; w1 := abs addr of claimword; ba. w1 b19. ; ba. w1 b19. ; w1 := addr of claimword(key); bz w0 x1 ; w0 := number of entries; rs. w0 b18. ; save (number of entries); bz w1 x1+1 ; w1 := number of slices; wm w1 x3-8 ; w1 := number of segments; rs. w1 b17. ; save (number of segments); al w2 x3 ; save(w3); rl. w1 b0. ; zone := output zone; rl. w3 b1. ; if keymask=<:key:> se w3 -1 ; then jl. a19. ; begin al. w0 b26. ; outtext(<: key :>); jl. w3 h31. ; bl. w0 b19. ; outinteger(key); jl. w3 h32. ; 32<12 + 1 jl. a20. ; a19: bl. w3 b19. ; writetext(case key of al. w0 b31. ; <:temp:> sn w3 2 ; al. w0 b32. ; <:login:> sn w3 3 ; al. w0 b33. ; <:perm:>); jl. w3 h31. ; a20: rl. w0 b17. ; outinteger (segments); jl. w3 h32. ; 32<12 + 6 ; al. w0 b22. ; outtext(<: segm:>); jl. w3 h31. ; bl. w3 b19. ; sl w3 2 ; if temp jl. a21. ; and rl. w3 (b10.) ; actual kit= se w3 (98) ; mainkit then jl. a22. ; skip entry output a21: rl. w0 b18. ; outinteger(entries); jl. w3 h32. ; 32<12 + 5 ; al. w0 b21. ; outtext(<: entr:>); jl. w3 h31. ; a22: al w3 x2 ; restore(w3); jl. a11. ; goto next key out; \f ; rc 19.06.1971 claim ...6... a12: rl. w1 b2. ; device done: sn w1 -1 ; if empty paramname then jl. a9. ; goto next device; dl. w1 b9. ; restore (item); jl. a2. ; goto next parameter; a13: dl. w1 b9. ; end of devices: restore (item); rl. w2 b2. ; sn w2 -1 ; if empty paramname then jl. a2. ; goto next parameter; al w2 1 ; device not found: hs. w2 b7. ; succes := false; al. w0 b24. ; outtext(<:***claim :>); jl. w3 h31.-2 ; al. w0 b2. ; outtext(paramname); jl. w3 h31.-2 ; al. w0 b25. ; outtext(<: unknown<10>:>); jl. w3 h31.-2 ; dl. w1 b9. ; restore(item); jl. a2. ; goto next parameter; d1 = k ; entry to procedure nextparam; d2 = k+2 ; entry to procedure out error param; \f ; rc 19.06.1971 claim ...7... ; the following pages contain the code for fetching the ; parameters from the fp-command stack. ; at entry the contents of w0, w1 and w2 are irrellevant. b. a9 , b7 w. ; procedure nextparam; ; if in error-mode, all parameters up to the first <s> delimiter ; are written on current output and skipped. ; the next parameter is fetched, and the registers are set to ; w0 == item head ; w1 == address of item head ; w2 == unchanged ; w3 == unchanged ; if the item is <end param> , return is made to w3 else to w3+2 ; (the uses the fp-variable h8 to find the current fp-command) jl. a0. ; entry nextparam: goto read param; ; procedure out error param; ; the text <:***<prog name> param:> is written on the current output. ; next, the current parameter is written, and the error-mode ; is set (which causes the nextparam-procedure to print all the ; skipped parameters). ; w0 and w1 are destroyed, w2 and w3 are unchanged. ; return is made to w3. jl. a9. ; entry out error param: goto first error; a0: rs. w3 b6. ; read param: save (return); a1: rl. w1 b2. ; w1 := current item pointer; se w1 0 ; if pointer = 0 then jl. a3. ; am -1000 rl. w1 h8.+1000; initialize pointer from fp and a2: rs. w1 b3. ; initialize program name address; a3: ba w1 x1+1 ; step pointer forwards; bl w0 x1 ; w0 := separator; b0 = k+1 ; errormode: 0==false , <>0 == true sn w1 x1+0 ; if errormode then jl. a7. ; begin se w0 8 ; if separator <> <point> then jl. a6. ; goto after error; rs. w1 b2. ; current item pointer := w1; al. w3 a1. ; set return to read param; a4: rs. w3 b6. ; next error: save (return from next error); se w0 8 ; am 32-46 ; outchar al w0 46 ; (if separator = point then hs. w0 b0. ; point else space); rx w2 0 ; errormode := true; jl. w3 h26.-2 ; rx w2 0 ; \f ; rc 19.06.1971 claim ...8... rl. w1 b2. ; w1 := current itempointer; bz w0 x1+1 ; w0 := param length; se w0 10 ; jl. a5. ; al w0 x1+2 ; if param = <name> then jl. w3 h31.-2 ; outtext(name) and rl. w3 b6. ; jl x3 ; return; a5: rl w0 x1+2 ; w0 := integer; jl. w3 h32.-2 ; outinteger(integer); 32<12 ; rl. w3 b6. ; jl x3 ; return; a6: ; after error: al w3 0 ; errormode := false; hs. w3 b0. ; rl. w3 b1. ; restore (return); jl x3 ; return to calling program; ; end errormode; a7: rs. w1 b2. ; current item pointer := w1; se w0 8 ; if separator <> point then rs. w1 b7. ; first item := current item; sh w0 3 ; if separator = <end param> then jl. a8. ; goto end param return; sn w0 6 ; if separator = <equal> then jl. a2. ; goto initialize from fp; comment progname; rl w0 x1 ; w0 := item head; jl x3+2 ; normal return to calling program; a8: rl w0 x1 ; end param return: w0 := item head; jl x3 ; return to calling program; a9: rs. w3 b1. ; first error: save (return); al. w0 b4. ; outtext(<:***:>); jl. w3 h31.-2 ; rl. w3 b3. ; w0 := program name addr; al w0 x3+2 ; jl. w3 h31.-2 ; outtext(program name); al. w0 b5. ; jl. w3 h31.-2 ; outtext(<: param :>); rl. w1 b7. ; current item := first item; rs. w1 b2. ; bl. w0 (b2.) ; w0 := separator(current item); rl. w3 b1. ; restore (return); jl. a4. ; goto next error; b1: 0 ; saved return to calling program b2: 0 ; current item pointer b3: 0 ; address of program name (in command stack) b4: <:***<0>:> b5: <: param <0>:> b6: 0 ; saved return from next error b7: 0 ; first item e. ;end of parameter procedures d0 = k ; length of program i. e. ; end of claim m. rc 15.08.74 claim g2=k-h55 ; length g3=4 ; entry g0:g1: (:g2+511:)>9 ; segm 0,r.4 s2 ; date 0,0 ; file, block 2<12+g3 ; contents, entry g2 ; length d. p.<:insertproc:> l. e. ; end of fpnames \f ▶EOF◀