2 /* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
3 Written by James Clark (jjc@jclark.com)
5 This file is part of groff.
7 groff is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
12 groff is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17 You should have received a copy of the GNU General Public License along
18 with groff; see the file COPYING. If not, write to the Free Software
19 Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
29 vunits
& operator+=(const vunits
&);
30 vunits
& operator-=(const vunits
&);
31 friend inline vunits
scale(vunits n
, units x
, units y
); // scale n by x/y
32 friend inline vunits
scale(vunits n
, vunits x
, vunits y
);
33 friend inline vunits
operator +(const vunits
&, const vunits
&);
34 friend inline vunits
operator -(const vunits
&, const vunits
&);
35 friend inline vunits
operator -(const vunits
&);
36 friend inline int operator /(const vunits
&, const vunits
&);
37 friend inline vunits
operator /(const vunits
&, int);
38 friend inline vunits
operator *(const vunits
&, int);
39 friend inline vunits
operator *(int, const vunits
&);
40 friend inline int operator <(const vunits
&, const vunits
&);
41 friend inline int operator >(const vunits
&, 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
&);
58 hunits
& operator+=(const hunits
&);
59 hunits
& operator-=(const hunits
&);
60 friend inline hunits
scale(hunits n
, units x
, units y
); // scale n by x/y
61 friend inline hunits
scale(hunits n
, double x
);
62 friend inline hunits
operator +(const hunits
&, const hunits
&);
63 friend inline hunits
operator -(const hunits
&, const hunits
&);
64 friend inline hunits
operator -(const hunits
&);
65 friend inline int operator /(const hunits
&, const hunits
&);
66 friend inline hunits
operator /(const hunits
&, int);
67 friend inline hunits
operator *(const hunits
&, int);
68 friend inline hunits
operator *(int, const hunits
&);
69 friend inline int operator <(const hunits
&, const hunits
&);
70 friend inline int operator >(const hunits
&, 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
&);
79 extern int get_vunits(vunits
*, unsigned char si
);
80 extern int get_hunits(hunits
*, unsigned char si
);
81 extern int get_vunits(vunits
*, unsigned char si
, vunits prev_value
);
82 extern int get_hunits(hunits
*, unsigned char si
, hunits prev_value
);
84 inline vunits:: vunits() : n(0)
88 inline units
vunits::to_units()
93 inline int vunits::is_zero()
98 inline vunits
operator +(const vunits
& x
, const vunits
& y
)
106 inline vunits
operator -(const vunits
& x
, const vunits
& y
)
114 inline vunits
operator -(const vunits
& x
)
121 inline int operator /(const vunits
& x
, const vunits
& y
)
126 inline vunits
operator /(const vunits
& x
, int n
)
134 inline vunits
operator *(const vunits
& x
, int n
)
142 inline vunits
operator *(int n
, const vunits
& x
)
150 inline int operator <(const vunits
& x
, const vunits
& y
)
155 inline int operator >(const vunits
& x
, const vunits
& y
)
160 inline int operator <=(const vunits
& x
, const vunits
& y
)
165 inline int operator >=(const vunits
& x
, const vunits
& y
)
170 inline int operator ==(const vunits
& x
, const vunits
& y
)
175 inline int operator !=(const vunits
& x
, const vunits
& y
)
181 inline vunits
& vunits::operator+=(const vunits
& x
)
187 inline vunits
& vunits::operator-=(const vunits
& x
)
193 inline hunits:: hunits() : n(0)
197 inline units
hunits::to_units()
199 return n
*hresolution
;
202 inline int hunits::is_zero()
207 inline hunits
operator +(const hunits
& x
, const hunits
& y
)
215 inline hunits
operator -(const hunits
& x
, const hunits
& y
)
223 inline hunits
operator -(const hunits
& x
)
231 inline int operator /(const hunits
& x
, const hunits
& y
)
236 inline hunits
operator /(const hunits
& x
, int n
)
244 inline hunits
operator *(const hunits
& x
, int n
)
252 inline hunits
operator *(int n
, const hunits
& x
)
260 inline int operator <(const hunits
& x
, const hunits
& y
)
265 inline int operator >(const hunits
& x
, const hunits
& y
)
270 inline int operator <=(const hunits
& x
, const hunits
& y
)
275 inline int operator >=(const hunits
& x
, const hunits
& y
)
280 inline int operator ==(const hunits
& x
, const hunits
& y
)
285 inline int operator !=(const hunits
& x
, const hunits
& y
)
291 inline hunits
& hunits::operator+=(const hunits
& x
)
297 inline hunits
& hunits::operator-=(const hunits
& x
)
303 inline hunits
scale(hunits n
, units x
, units y
)
306 r
.n
= scale(n
.n
, x
, y
);
310 inline vunits
scale(vunits n
, units x
, units y
)
313 r
.n
= scale(n
.n
, x
, y
);
317 inline vunits
scale(vunits n
, vunits x
, vunits y
)
320 r
.n
= scale(n
.n
, x
.n
, y
.n
);
324 inline hunits
scale(hunits n
, double x
)
331 inline units
scale(units n
, double x
)
336 inline units
points_to_units(units n
)
338 return scale(n
, units_per_inch
, 72);