On Mon, May 30, 2005 at 06:05:40PM +0200, Dr. Werner Fink wrote:
> Hi,
> 
> just found out that `dvips -Ppdf' catch an error:
> 
>   werner/Tests> mktexpk --mfmode dpdfezzz --bdpi 8000 --mag 1+0/8000 --dpi 
> 8000 tcrm1000
>   mktexpk: Running mf-nowin -progname=mf \mode:=dpdfezzz; mag:=1+0/8000; 
> nonstopmode; input tcrm1000
>   This is METAFONT, Version 2.71828 (Web2C 7.5.4)
>   ! Enormous number has been reduced.
>   <*> \mode:=dpdfezzz; mag:=1+0/8000
>                                     ; nonstopmode; input tcrm1000
>   ? 
>   ! Emergency stop.
>   <*> \mode:=dpdfezzz; mag:=1+0/8000
>                                     ; nonstopmode; input tcrm1000
>   Transcript written on mfput.log.
>   grep: tcrm1000.log: No such file or directory
>   mktexpk: `mf-nowin -progname=mf \mode:=dpdfezzz; mag:=1+0/8000; 
> nonstopmode; input tcrm1000' failed to make tcrm1000.8000pk.
>   werner/Tests> 
> 
> A workaround would be a recalculation of the 0/8000 value, just like
> done with
> 
>   werner/Tests> mktexpk --mfmode dpdfezzz --bdpi 8000 --mag '1+0/(4000*2)' 
> --dpi 8000 tcrm1000
> 
> comments?

I've atached a simple fix

        Werner

-- 
  "Having a smoking section in a restaurant is like having
          a peeing section in a swimming pool." -- Edward Burr
--- texk/kpathsea/tex-make.c
+++ texk/kpathsea/tex-make.c    2005-06-02 12:38:14.000000000 +0000
@@ -55,7 +55,25 @@
   (void) kpse_magstep_fix (dpi, bdpi, &m);
   
   if (m == 0)
-    sprintf (q, "%d+%d/%d", dpi / bdpi, dpi % bdpi, bdpi);
+    {
+      if (bdpi <= 4000)
+       sprintf (q, "%u+%u/%u", dpi / bdpi, dpi % bdpi, bdpi);
+      else
+       {
+         unsigned f = bdpi/4000;
+         unsigned r = bdpi%4000;
+
+         if (f > 1)
+           {
+             if (r > 0)
+               sprintf (q, "%u+%u/(%u*%u + %u)", dpi/bdpi, dpi%bdpi, f, (bdpi 
- r)/f, r);
+             else
+               sprintf (q, "%u+%u/(%u*%u)", dpi/bdpi, dpi%bdpi, f, bdpi/f);
+           }
+         else
+           sprintf (q, "%u+%u/(%u + %u)", dpi/bdpi, dpi%bdpi, bdpi, r);
+       }
+    }
   else
     { /* m is encoded with LSB being a ``half'' bit (see magstep.h).  Are
          we making an assumption here about two's complement?  Probably.

Reply via email to