%constinteger heads      =  11
%constinteger sectors    =  16, sector mask = sectors - 1
%constinteger cylinders  = 754
%constinteger size       = heads * sectors * cylinders

%include "System:Disqio.Inc"

%recordformat header partition fm(%integer start, finish, lp, flags,
                                  %string(15) name)
%recordformat disc header fm((%integer checksum,
                              %record(header partition fm)%array p(1 : 15)) %c
                         %or %integerarray x(1 : 128))

%constinteger hazarded   flag = 1
%constinteger structured flag = 2
%constinteger valid      flag = 4

%begin
   %record(disc header fm) h
   %integername x
   %integer i, c
      x == transfer(d read ! d verify, 512, (size - 1) << 9, integer(addr(h)))
      %cycle;  %repeat %until x # 0
      h_p(1)_flags = h_p(1)_flags ! hazarded flag
      c = 0
      c <- c + h_x(i) %for i = 2, 1, 128
      h_checksum = -c
      x == transfer(d write ! d verify, 512, (size - 1) << 9, integer(addr(h)))
      %cycle;  %repeat %until x # 0
%end %of %program
