function rst(var x: hreal): longstring;
var
  n,j,nmax: integer;
  p10,exponent: integer32;
  s: array[1..strnglen] of char;
begin { rst }
  with x do begin
    nmax:=hdim+1;
    repeat nmax:=nmax-1 until (ma[nmax]<>0) or (nmax=0);
    if (si=0) or (ma[nmax]=0) then  s:=' 0.0E+0'
    else begin
      if si<0 then s:='-' else s:=' ';
      exponent:=4*ex+3;
      n:=0;
      while ma[n]=0 do begin
        n:=n+1;
        exponent:=exponent-4;
      end;
      p10:=1000;
      while ma[n]<p10 do begin
        p10:=p10 div 10;
        exponent:=exponent-1;
      end;
      j:=2;
      while n<=nmax do begin
        s[j]:=chr(48+((ma[n] div p10) mod 10));
        if j=2 then begin
          s[3]:='.';
          j:=4;
        end
        else j:=j+1;
        if p10>1 then p10:=p10 div 10
        else begin
          p10:=1000;
          n:=n+1;
        end;
      end;
      if j=4 then begin
        s[4]:='0';
        j:=5;
      end;
      s[j]:='E';
      j:=j+1;
      if exponent<0 then s[j]:='-' else s[j]:='+';
      exponent:=abs(exponent);
      p10:=1000000;
      while exponent<p10 do p10:=p10 div 10;
      if p10=0 then p10:=1;
      repeat
        j:=j+1;
        s[j]:=chr(48+((exponent div p10) mod 10));
        p10:=p10 div 10;
      until p10=0;
    end;
  end;
  rst:=trim(s);
end { rst };

