[comp.lang.pascal] src

snake@mcshh.UUCP (Michael Koehler) (02/25/88)

program clearmem;
  {-clear all memory above this program}
var
  smin,omin,smax,omax,s,finalbytes:integer;
  fillbyte:byte;
  rmin,rmax,r:real;
  lastvar:integer;

function stackptr:integer;
  {-return the current stack pointer}
var
  sptr:integer;
begin
  inline(
    $8B/$C4/$89/$46/<sptr
  );
  stackptr:=sptr;
end; {stackptr}

function cardinal(i:integer):real;
  {-return real 0..65535}
var
  r:real;
begin
  r:=i;
  if r<0 then r:=r+65536.0;
  cardinal:=r;
end; {cardinal}

function realaddr(s,o:integer):real;
  {-return the real offset into memory}
begin
  realaddr:=16.0*cardinal(s)+cardinal(o);
end; {realaddr}

begin
  omin:=ofs(lastvar);
  smax:=sseg;
  omax:=stackptr-$100;
  rmax:=realaddr(smax,omax);
  writeln;
  write('Enter byte to use for clearing: ');
  readln(fillbyte);
  s:=dseg;
  while realaddr(s,omin)<(rmax-16384.0) do begin
    fillchar(mem[s:omin],16384,fillbyte);
    s:=s+$400;
  end;
  s:=s-$400;
  finalbytes:=trunc(rmax-realaddr(s,omin));
  fillchar(mem[s:omin],finalbytes,fillbyte);
end.



(snake@mcshh.UUCP)

-- 
VOICE :(040) 5602608
---------------------