From ad547a6b5986815fda458221149728d9d9ab1d87 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Thu, 25 Feb 2021 19:22:25 +0000 Subject: restore Build,TODO from r57911 git-svn-id: svn://tug.org/texlive/trunk@57915 c570f23f-e606-0410-a88d-b1316a301751 --- Build/source/texk/dvipsk/scalewidth.c | 36 +++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 Build/source/texk/dvipsk/scalewidth.c (limited to 'Build/source/texk/dvipsk/scalewidth.c') diff --git a/Build/source/texk/dvipsk/scalewidth.c b/Build/source/texk/dvipsk/scalewidth.c new file mode 100644 index 00000000000..dab197a9290 --- /dev/null +++ b/Build/source/texk/dvipsk/scalewidth.c @@ -0,0 +1,36 @@ +/* + * Code to scale dimensions. Takes two thirty-two bit integers, multiplies + * them, divides them by 2^20, and returns the thirty-two bit result. + * The first integer, the width in FIXes, can lie between -2^24 and 2^24-1. + * The second integer, the scale factor, can lie between 0 and 2^27-1. + * + * Here, unlike in TeX, we do the arithmetic exactly. Since the error + * in the TeX arithmetic is parts per million, and since dvips makes no + * layout decisions, this has no effect. (TeX stipulates that any + * implementation of *TeX* needs to do the arithmetic exactly as + * specified in TeX, but drivers need not.) + * + * Since this math is special, we put it in its own file. It is the only + * place in the program where such accuracy is required. + */ +#include "dvips.h" /* The copyright notice in that file is included too! */ +/* + * The external declarations: + */ +#include "protos.h" + +integer +scalewidth(register integer a, register integer b) +{ + register integer al, bl; + + if (a < 0) + return -scalewidth(-a, b); + if (b < 0) + return -scalewidth(a, -b); + al = a & 32767; + bl = b & 32767; + a >>= 15; + b >>= 15; + return ( ((al*bl/32768) + a*bl+al*b)/32 + a*b*1024); +} -- cgit v1.2.3