DataMuseum.dk

Presents historical artifacts from the history of:

RC4000/8000/9000

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about RC4000/8000/9000

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦fa7f50866⟧ TextFile

    Length: 3840 (0xf00)
    Types: TextFile
    Names: »hlmmasktx«

Derivation

└─⟦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⟧ 

TextFile



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