xref: /netbsd-src/external/gpl2/groff/dist/src/roff/troff/hvunits.h (revision 89a07cf815a29524268025a1139fac4c5190f765)
1 /*	$NetBSD: hvunits.h,v 1.1.1.1 2016/01/13 18:41:48 christos Exp $	*/
2 
3 // -*- C++ -*-
4 /* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
5      Written by James Clark (jjc@jclark.com)
6 
7 This file is part of groff.
8 
9 groff is free software; you can redistribute it and/or modify it under
10 the terms of the GNU General Public License as published by the Free
11 Software Foundation; either version 2, or (at your option) any later
12 version.
13 
14 groff is distributed in the hope that it will be useful, but WITHOUT ANY
15 WARRANTY; without even the implied warranty of MERCHANTABILITY or
16 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
17 for more details.
18 
19 You should have received a copy of the GNU General Public License along
20 with groff; see the file COPYING.  If not, write to the Free Software
21 Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
22 
23 
24 class vunits {
25   int n;
26 public:
27   vunits();
28   vunits(units);
29   units to_units();
30   int is_zero();
31   vunits& operator+=(const vunits&);
32   vunits& operator-=(const vunits&);
33   friend inline vunits scale(vunits n, units x, units y); // scale n by x/y
34   friend inline vunits scale(vunits n, vunits x, vunits y);
35   friend inline vunits operator +(const vunits&, const vunits&);
36   friend inline vunits operator -(const vunits&, const vunits&);
37   friend inline vunits operator -(const vunits&);
38   friend inline int operator /(const vunits&, const vunits&);
39   friend inline vunits operator /(const vunits&, int);
40   friend inline vunits operator *(const vunits&, int);
41   friend inline vunits operator *(int, const vunits&);
42   friend inline int operator <(const vunits&, const vunits&);
43   friend inline int operator >(const vunits&, const vunits&);
44   friend inline int operator <=(const vunits&, const vunits&);
45   friend inline int operator >=(const vunits&, const vunits&);
46   friend inline int operator ==(const vunits&, const vunits&);
47   friend inline int operator !=(const vunits&, const vunits&);
48 };
49 
50 extern vunits V0;
51 
52 
53 class hunits {
54   int n;
55 public:
56   hunits();
57   hunits(units);
58   units to_units();
59   int is_zero();
60   hunits& operator+=(const hunits&);
61   hunits& operator-=(const hunits&);
62   friend inline hunits scale(hunits n, units x, units y); // scale n by x/y
63   friend inline hunits scale(hunits n, double x);
64   friend inline hunits operator +(const hunits&, const hunits&);
65   friend inline hunits operator -(const hunits&, const hunits&);
66   friend inline hunits operator -(const hunits&);
67   friend inline int operator /(const hunits&, const hunits&);
68   friend inline hunits operator /(const hunits&, int);
69   friend inline hunits operator *(const hunits&, int);
70   friend inline hunits operator *(int, const hunits&);
71   friend inline int operator <(const hunits&, const hunits&);
72   friend inline int operator >(const hunits&, const hunits&);
73   friend inline int operator <=(const hunits&, const hunits&);
74   friend inline int operator >=(const hunits&, const hunits&);
75   friend inline int operator ==(const hunits&, const hunits&);
76   friend inline int operator !=(const hunits&, const hunits&);
77 };
78 
79 extern hunits H0;
80 
81 extern int get_vunits(vunits *, unsigned char si);
82 extern int get_hunits(hunits *, unsigned char si);
83 extern int get_vunits(vunits *, unsigned char si, vunits prev_value);
84 extern int get_hunits(hunits *, unsigned char si, hunits prev_value);
85 
vunits()86 inline vunits:: vunits() : n(0)
87 {
88 }
89 
to_units()90 inline units vunits::to_units()
91 {
92   return n*vresolution;
93 }
94 
is_zero()95 inline int vunits::is_zero()
96 {
97   return n == 0;
98 }
99 
100 inline vunits operator +(const vunits & x, const vunits & y)
101 {
102   vunits r;
103   r = x;
104   r.n += y.n;
105   return r;
106 }
107 
108 inline vunits operator -(const vunits & x, const vunits & y)
109 {
110   vunits r;
111   r = x;
112   r.n -= y.n;
113   return r;
114 }
115 
116 inline vunits operator -(const vunits & x)
117 {
118   vunits r;
119   r.n = -x.n;
120   return r;
121 }
122 
123 inline int operator /(const vunits & x, const vunits & y)
124 {
125   return x.n/y.n;
126 }
127 
128 inline vunits operator /(const vunits & x, int n)
129 {
130   vunits r;
131   r = x;
132   r.n /= n;
133   return r;
134 }
135 
136 inline vunits operator *(const vunits & x, int n)
137 {
138   vunits r;
139   r = x;
140   r.n *= n;
141   return r;
142 }
143 
144 inline vunits operator *(int n, const vunits & x)
145 {
146   vunits r;
147   r = x;
148   r.n *= n;
149   return r;
150 }
151 
152 inline int operator <(const vunits & x, const vunits & y)
153 {
154   return x.n < y.n;
155 }
156 
157 inline int operator >(const vunits & x, const vunits & y)
158 {
159   return x.n > y.n;
160 }
161 
162 inline int operator <=(const vunits & x, const vunits & y)
163 {
164   return x.n <= y.n;
165 }
166 
167 inline int operator >=(const vunits & x, const vunits & y)
168 {
169   return x.n >= y.n;
170 }
171 
172 inline int operator ==(const vunits & x, const vunits & y)
173 {
174   return x.n == y.n;
175 }
176 
177 inline int operator !=(const vunits & x, const vunits & y)
178 {
179   return x.n != y.n;
180 }
181 
182 
183 inline vunits& vunits::operator+=(const vunits & x)
184 {
185   n += x.n;
186   return *this;
187 }
188 
189 inline vunits& vunits::operator-=(const vunits & x)
190 {
191   n -= x.n;
192   return *this;
193 }
194 
hunits()195 inline hunits:: hunits() : n(0)
196 {
197 }
198 
to_units()199 inline units hunits::to_units()
200 {
201   return n*hresolution;
202 }
203 
is_zero()204 inline int hunits::is_zero()
205 {
206   return n == 0;
207 }
208 
209 inline hunits operator +(const hunits & x, const hunits & y)
210 {
211   hunits r;
212   r = x;
213   r.n += y.n;
214   return r;
215 }
216 
217 inline hunits operator -(const hunits & x, const hunits & y)
218 {
219   hunits r;
220   r = x;
221   r.n -= y.n;
222   return r;
223 }
224 
225 inline hunits operator -(const hunits & x)
226 {
227   hunits r;
228   r = x;
229   r.n = -x.n;
230   return r;
231 }
232 
233 inline int operator /(const hunits & x, const hunits & y)
234 {
235   return x.n/y.n;
236 }
237 
238 inline hunits operator /(const hunits & x, int n)
239 {
240   hunits r;
241   r = x;
242   r.n /= n;
243   return r;
244 }
245 
246 inline hunits operator *(const hunits & x, int n)
247 {
248   hunits r;
249   r = x;
250   r.n *= n;
251   return r;
252 }
253 
254 inline hunits operator *(int n, const hunits & x)
255 {
256   hunits r;
257   r = x;
258   r.n *= n;
259   return r;
260 }
261 
262 inline int operator <(const hunits & x, const hunits & y)
263 {
264   return x.n < y.n;
265 }
266 
267 inline int operator >(const hunits & x, const hunits & y)
268 {
269   return x.n > y.n;
270 }
271 
272 inline int operator <=(const hunits & x, const hunits & y)
273 {
274   return x.n <= y.n;
275 }
276 
277 inline int operator >=(const hunits & x, const hunits & y)
278 {
279   return x.n >= y.n;
280 }
281 
282 inline int operator ==(const hunits & x, const hunits & y)
283 {
284   return x.n == y.n;
285 }
286 
287 inline int operator !=(const hunits & x, const hunits & y)
288 {
289   return x.n != y.n;
290 }
291 
292 
293 inline hunits& hunits::operator+=(const hunits & x)
294 {
295   n += x.n;
296   return *this;
297 }
298 
299 inline hunits& hunits::operator-=(const hunits & x)
300 {
301   n -= x.n;
302   return *this;
303 }
304 
scale(hunits n,units x,units y)305 inline hunits scale(hunits n, units x, units y)
306 {
307   hunits r;
308   r.n = scale(n.n, x, y);
309   return r;
310 }
311 
scale(vunits n,units x,units y)312 inline vunits scale(vunits n, units x, units y)
313 {
314   vunits r;
315   r.n = scale(n.n, x, y);
316   return r;
317 }
318 
scale(vunits n,vunits x,vunits y)319 inline vunits scale(vunits n, vunits x, vunits y)
320 {
321   vunits r;
322   r.n = scale(n.n, x.n, y.n);
323   return r;
324 }
325 
scale(hunits n,double x)326 inline hunits scale(hunits n, double x)
327 {
328   hunits r;
329   r.n = int(n.n*x);
330   return r;
331 }
332 
scale(units n,double x)333 inline units scale(units n, double x)
334 {
335   return int(n*x);
336 }
337 
points_to_units(units n)338 inline units points_to_units(units n)
339 {
340   return scale(n, units_per_inch, 72);
341 }
342 
343