procedure irdiv(i: integer; var x: hreal);
var
  iabs,p: integer;
  j: integer32;
begin { irdiv }
  trunc:=false;
  if i=0 then writeln('irdiv: error - division by zero')
  else with x do begin
    if i>0 then iabs:=i
    else begin
      iabs:=-i;
      si:=-si;
    end;
    if iabs>topint then writeln('irdiv: error - integer out of range');
    if ma[0]<iabs then begin
      j:=ma[0];
      for p:=1 to hdim do begin
        j:=10000*j+ma[p];
        ma[p-1]:=j div iabs;
        j:=j mod iabs;
      end;
      j:=10000*j;
      ma[hdim]:=j div iabs;
      j:=j mod iabs;
      ex:=ex-1;
      if ex<-exmax then underflow:=true;
    end
    else begin
      j:=0;
      for p:=0 to hdim do begin
        j:=10000*j+ma[p];
        ma[p]:=j div iabs;
        j:=j mod i;
      end;
    end;
    trunc:=(j>0);
  end;
end { irdiv };

