|
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: 3840 (0xf00) Types: TextFile Names: »hlmmasktx«
└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ. Detaljer om "HC8000" projekt. └─⟦0364f57e3⟧ └─⟦787c125fb⟧ »adjprocfile« └─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ. └─⟦b2ec5d50f⟧ └─⟦787c125fb⟧ »adjprocfile« └─⟦this⟧
; hlm_mask_tx * page 1 10 05 79, 10.36; ; hlm_mask ; ******** if listing.yes char 10 12 10 hlm_mask = set 1 hlm_mask = algol external long procedure hlm_mask ________________________________ _ (level, nmb, max_nmb, t0); value level, nmb, t0; integer level, nmb, max_nmb, t0; comment hlm_mask (call and return, long procedure) is the position mask of a block with number nmb at level level in Helmert binary blocking (nested dissection). The mask contains a 6 bit byte for each level, where the two least significant bits are used for block 1 or 2 respectively. level (call, integer) Up to 8 levels (numbered 0-7) is possible. System alarm is given if 0 <= level and level <= 7 is false. nmb (call, integer) The number of the block at the given level. The numbering is lexico- graphic with least significant bytes moving fastest. The number is taken modulo max_nmb. System alarm is given if nmb is <= 0. max_nmb (return, integer) The maximum number of blocks at the called level. Any number may be given at call time, enabling the start of a loop. The correct value will then be available after first call. t0 (call, integer) The number of masks at level 0. 1 or 2 are possible. Other values give a system alarm. ext. used. ____________ system(9) nl, sp, write, in testoutput only Prog.: Knud Poder, MAY 1979; \f comment hlm_mask_tx * page 2 10 05 79, 10.36 0 1 2 3 4 5 6 7 8 9 ; _ comment test for valid params; ______________________________ if 0 <= level and level <= 7 and nmb > 0 _ and (t0 = 1 or t0 = 2) then begin comment ON TEST: : integer i; integer lev, lev_shift, t_ex, t, t_max, ch; long m; long array mask(0:t0*(2 shift level - 1)); long array field m_f; _ comment init of params; _______________________ mask(0) := 0; t_max := ch := m_f := 0; _ comment level loop; ___________________ for lev := 0 step 1 until level do begin lev_shift := 42 - 6*lev; comment ON TEST: : write(out, nl, 3, <:level = :>, lev); _ comment reset max blocks at level; __________________________________ m_f := m_f + 4*t_max; t_max := t0 shift lev; if lev = level then begin max_nmb := t_max; t_max := nmb := (nmb - 1) mod t_max + 1; end; \f comment hlm_mask_tx * page 3 10 05 79, 10.36 0 1 2 3 4 5 6 7 8 9 ; _ comment block loop at level; ____________________________ for t := 1 step 1 until t_max do begin t_ex := (t - 1) mod 2 + 1; _ comment reset mask; ___________________ if false add t_ex then begin m := mask(ch); ch := ch + 1; end; mask.m_f(t) := m + (extend t_ex) shift lev_shift; comment ON TEST: : write(out, nl, 1, <<ddddd>, t, sp, 5); comment ON TEST: : for i := 0 step 1 until 47 do write(out, sp, if i mod 6 = 0 then 1 else 0, if mask.m_f(t) shift i < 0 then <:x:> else <:.:>); end t-loop; end lev-loop; hlm_mask := mask.m_f(nmb); end acc params else if level < 0 or 7 < level then <*level alarm*> system(9)alarm:(level, <:<10>hlm_lev:>) else if nmb < 0 then <*block_nr alarm*> system(9)alarm:(nmb, <:<10>hlm_blk:>) else <*start nmb alarm*> system(9)alarm:(t0, <:<10>hlm_strt:>); end if ok.no mode warning.yes if warning.yes (mode 0.yes message hlm_mask not ok lookup hlm_mask) end finis ▶EOF◀