|
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: 13056 (0x3300) Types: TextFile Names: »getclaimtx «
└─⟦01e83a425⟧ Bits:30008166 Bånd med SW8010 og SW8500 source code └─⟦75ff9bef3⟧ └─⟦this⟧ »getclaimtx «
mode list.yes ( if listing.yes ( listgetcl=set 50 if ok.no end o listgetcl (getclaim=slang xref.yes list.yes getclaim) if ok.no c=message ok.no o c convert listgetcl lp ) if listing.no (getclaim=slang getclaim) mode listing.no ) \f ; fgs 1988.04.25 algol 8, get claims page ...1... b. ; block fpnames d. p. <:fpnames:> l. b. g1, i6 ; block for insertproc w. i4 = 0 ; segment count := 0; i5 = 0 ; own byte count := 0; s. g4 ; slang segment w. b. c3, j110 ; block for segment w. g0 = 0 ; no of externals := 0; k = 1000 ; k assignment to catch missing relatives h. c1 : c2 , c3 ; rel last point, tel last abs word j4 : g0 + 4, 0 ; rs entry 4, take expression j6 : g0 + 6, 0 ; rs entry 6, end register expression j13: g0 + 13, 0 ; rs entry 13, last used j17: g0 + 17, 0 ; rs entry 17, index alarm j21: g0 + 21, 0 ; rs entry 21, general alarm j30: g0 + 30, 0 ; rs entry 30, saved sref, w3 j94: g0 + 94, 0 ; rs entry 94, take value integer j104: g0 + 104, 0 ; rs entry104, own process description address c3 = k-2-c1 ; rel last abs word c2 = k-2-c1 ; rel last point w. i2 = k-c1 ; start external list 0 ; no of globals, no of externals 0 ; no of bytes to copy to own core s3 ; date s4 ; time \f ; fgs 1988.04.25 algol 8, get claims page ...2... b. a40, b60, d20 ; block for local names in copyarea w. ; constants : d0: <:perm key:> ; alarm text ; variables : b1: 0 ; first device b10: 0, r.7 ; saved w1 ;+2: ; - w2 ;+4: ; - w3 ;+6: ; slicelength ;+8: ; max slices ;10: ; min slices ;12: ; device.key0 claims b54: 0, r.10 ; filedescriptor tail ; fgs 1988.04.26 file processor connect output, page ...7c... ; segment 1 i0 = k-c1 ; entry get claim: rl. w2 (j13.) ; get sref; ds. w3 (j30.) ; save sref, w3; zl w3 x2+10 ; dope := dope rel + wa w3 x2+12 ; base word addr; al w1 2 ; index := 4; as w1 2 ; sh w1 (x3-2) ; sh w1 (x3 ) ; jl. w3 (j17.) ; al w1 1 ; index := 1; as w1 2 ; sh w1 (x3-2) ; sh w1 (x3 ) ; jl. w3 (j17.) ; wa w1 (x2+12) ; rs w1 x2+10 ; second formal1 := addr la (1); al w3 x1 ; dl w1 x3 ; move ds. w1 b54.+4 ; la dl w1 x3+4 ; to ds. w1 b54.+8 ; filedescriptor.docname dl w1 x2+8 ; take first formal; so w0 16 ; if expression then jl. w3 (j4.) ; take expression; ds. w3 (j30.) ; save sref. w3; rl w1 x1 ; take value i; al. w3 d0. ; sl w1 0 ; if i < 0 sl w1 4 ; or i > 3 then jl. w3 (j21.) ; general alarm (<:perm key:>, i); al w0 x1 ; w0 := i; <*permkey*> jl. w1 a8. ; getclaims; rl w3 x2+10 ; dl. w2 b54.+4 ; move ds w2 x3 ; filedescriptor.docname dl. w2 b54.+8 ; to ds w2 x3+4 ; ia; rl w1 0 ; result := w0; jl. w3 (j6.) ; goto end reg expression; \f ; fgs 1988.04.26 fileprocessor connect output, page ...7d... ; segment 1 ; procedure get claims (key, filedescriptor); ; ; call: return: ; ; w0 key claim ; w1 link link ; w2 - unchanged ; w3 - unchanged ; ; filedescriptor.docname entry.docname or docname of disc ; 0, ..., 3 with claims ; ; The procedure finds the disc with the largest claims for the ; given key and returns the claims in w0 and the docname of the ; disc in filedescriptor.docname. ; If docname given in filedescriptor.docname is 0, all discs are ; searched for the one with the greatest claims of that particular ; permkey. The search goes on backwards from last disc to first disc ; or drum. ; If, however, the docname given is a document name for a disc ; included in the bs system, the procedure returns the claims ; for the given key for that disc. ; ; a8: ds. w3 b10.+4 ; get claims: (fp exception routine dump area used) rs. w1 b10.+0 ; save (w2, w3); save return; zl w2 64 ; sl w2 9 ; if monitor release > 8 then am 1 ; key := key * 4 else ls w0 1 ; key := key * 2 ; hs. w0 b2. ; al w0 -2 ; sh w2 8 ; if monitor <= 8 then hs. w0 b12. ; decr := -2; rl w0 92 ; w0 := first drum; rl w1 96 ; last device := al w1 x1-2 ; top discs - 2; rs. w0 b1. ; first device := first drum; \f ; fgs 1988.04.26 fileprocessor connect output, page ...7e... ; segment 1 rl. w2 b54.+2 ; w2 := first word of docname; sh w2 3 ; if docname (1) <> (0, 1, 2, 3) then jl. a12. ; begin <*docname specified*> al. w3 b54.+2 ; jd 1<11 + 4 ; w0 := proc descr addr (docname); sn w0 0 ; if process exists then jl. a12. ; begin am (0) ; w0 := rl w0 24 ; chaintable addr (docname); a25: rl w2 x1 ; loop: w2 := device.chaintable address; sn w2 (0) ; if device.chaintable address <> jl. a39. ; doc .chaintable address then ; begin al w1 x1-2 ; device := device -2; jl. a25. ; goto loop; ; end; a39: rs. w1 b1. ; first device := last device := device found; ; end process exists; ; end docname specified; a12: al w0 0 ; rs. w0 b10.+8 ; max slices := 0; a9: rl w2 x1 ; next device: rl. w3 (j104.) ; w2 := device.chaintable address; wa w3 x2-36 ; w3 := device.key zero claims; rs. w3 b10.+12 ; save device.key zero claims; al w0 2047 ; min slices := jl. w2 a3. ; convert to segments ( rs. w0 b10.+10 ; + infinity); b2 = k + 1 ; key * (if mon rel < 9 then 2 else 4); al w3 x3+0 ; w3 := device.slice claims.key \f ; fgs 1988.04.26 fileprocessor connect output, page ...7f... ; segment 1 a10: zl w0 64 ; next key: sl w0 9 ; if monitor release <= 8 then jl. a36. ; begin <*halfwords*> rl w0 6 ; device key := ws. w0 b10.+12 ; (device.key claims - ls w0 -1 ; device.key0 claims) > 1; zl w2 x3 ; w2 := entry claims; sh w0 1 ; if device key <= 2 then al w2 1 ; w2 := 1; zl w0 x3+1 ; w0 := slice claims; jl. a37. ; end else a36: rl w0 6 ; begin ws. w0 b10.+12 ; device key := ls w0 -2 ; (device key claims - device.key0 claims) > 2; rl w2 x3 ; w2 := entry claims; sh w0 1 ; if device key <= 2 then al w2 1 ; w2 := 1; rl w0 x3+2 ; w0 := slice claims; a37: ; end; sh w2 0 ; if entry claim = 0 then al w0 0 ; slice claim := 0; jl. w2 a3. ; convert to segments (slice claim); sh. w0 (b10.+10) ; if slice claim <= min slices then rs. w0 b10.+10 ; min slices := slice claim; b12=k+1 ; decr: a29: al w3 x3-4 ; decrease sliceclaim key address by decr; sl. w3 (b10.+12) ; jl. a10. ; ; if claim key addr >= claim key 0 address then ; goto next key; rl w2 x1 ; device := chaintable; rl. w0 b10.+10 ; sl. w0 (b10.+8) ; if min slices >= max slices then jl. a11. ; jl. a38. ; begin a11: rs. w0 b10.+8 ; max slices := min slices; rs. w2 b10.+14 ; best device := device; rl w0 x2-8 ; slice length := slice length (device); rs. w0 b10.+6 ; end; a38: al w1 x1-2 ; device := device - 2; sl. w1 (b1.) ; if device <> first device then jl. a9. ; goto next device; \f ; fgs 1988.04.26 fileprocessor connect output, page ...7g... ; segment 1 rl. w2 b10.+14 ; get best device; dl w0 x2-16 ; move ds. w0 b54.+4 ; chaintable.docname dl w0 x2-12 ; to ds. w0 b54.+8 ; filedescriptor.docname; rl. w0 b10.+8 ; w0 := max slices; dl. w3 b10.+4 ; restore (w2, w3); jl. (b10.) ; return; \f ; fgs 1988.04.26 fileprocessor connect output, page ...7h... ; segment 1 ; procedure convert to segments (slices); ; ; call : return : ; ; w0 : slices slices * slicelength ; w1 : name table entry unchanged ; w2 : link address chaintable ; w3 : device.slice claims.key unchanged b. b3 ; begin block w. a3: rs. w2 b2. ; save return; rl w2 x1 ; w2 := chain table entry; rs. w3 b3. ; save w3; wm w0 x2-8 ; slices := slices * slicelength; rl. w3 b3. ; restore w3; jl. (b2.) ; return; b2: 0 ; saved return b3: 0 ; saved w3; i. e. ; end block \f ; fgs 1988.04.26 fileprocessor connect output, page ...7i... ; segment 1 ; procedure convert to slices (w3, slicelength); ; ; call : return : ; ; w0 : - unchanged ; w1 : - destroyed ; w2 : link destroyed ; w3 : value (value - sign)//slicelength + sign ; b10.+6 : slicelength slicelength ; a4: rs. w2 b10.+0 ; entry: save return; sh w3 0 ; i := am +2 ; sign (value); al w1 -1 ; sn w3 0 ; al w1 0 ; wa w3 2 ; extend sign (w3); el w2 6 ; value := ((value + i)// el w2 4 ; slicelength - i) * wd. w3 b10.+6 ; slicelength ; ws w3 2 ; jl. (b10.) ; return; \f ; fgs 1988.04.25 algol 8, get claims page ...3... i. e. ; end block for local names in get claims c0 = k-c1 c. c0 - 506 m. code on segment 1 too long z. c. 502 - c0 0, r. (:504 - c0:) > 1 ; fill segment with zeroes z. <:get claim <0>:> ; alarm text m. segment 1 i. e. ; end block segment 1 i4 = i4 + 1 ; increase segment count i. e. ; end block for segment \f ; fgs 1988.04.25 algol 8, get claims page ...4... ; tails for insertproc h. g0:g1: ; first and last tail 0 , i4 ; size 0 , r.8 ; name 1<11+0 , i0 ; entry point w. 3<18+27<12+13<6 ; integer proc (value integer, long array) 0 ; h. 4 , i2 ; kind<12 + start external list i4 , i5 ; code segments<12 + own bytes m. fgs 1988.04.26 get claims d. p. <:insertproc:> l. i. e. ; end slang segment end ▶EOF◀