home *** CD-ROM | disk | FTP | other *** search
/ Aminet 10 / aminetcdnumber101996.iso / Aminet / util / gnu / groff_src.lha / groff-1.10src / troff / hvunits.h < prev    next >
C/C++ Source or Header  |  1995-06-22  |  7KB  |  341 lines

  1. // -*- C++ -*-
  2. /* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
  3.      Written by James Clark (jjc@jclark.com)
  4.  
  5. This file is part of groff.
  6.  
  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
  10. version.
  11.  
  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
  15. for more details.
  16.  
  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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
  20.  
  21.  
  22. class vunits {
  23.   int n;
  24. public:
  25.   vunits();
  26.   vunits(units);
  27.   units to_units();
  28.   int is_zero();
  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&);
  46. };
  47.  
  48. extern vunits V0;
  49.  
  50.  
  51. class hunits {
  52.   int n;
  53. public:
  54.   hunits();
  55.   hunits(units);
  56.   units to_units();
  57.   int is_zero();
  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&);
  75. };
  76.  
  77. extern hunits H0;
  78.  
  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);
  83.  
  84. inline vunits:: vunits() : n(0)
  85. {
  86. }
  87.  
  88. inline units vunits::to_units()
  89. {
  90.   return n*vresolution;
  91. }
  92.  
  93. inline int vunits::is_zero()
  94. {
  95.   return n == 0;
  96. }
  97.  
  98. inline vunits operator +(const vunits & x, const vunits & y)
  99. {
  100.   vunits r;
  101.   r = x;
  102.   r.n += y.n;
  103.   return r;
  104. }
  105.  
  106. inline vunits operator -(const vunits & x, const vunits & y)
  107. {
  108.   vunits r;
  109.   r = x;
  110.   r.n -= y.n;
  111.   return r;
  112. }
  113.  
  114. inline vunits operator -(const vunits & x)
  115. {
  116.   vunits r;
  117.   r.n = -x.n;
  118.   return r;
  119. }
  120.  
  121. inline int operator /(const vunits & x, const vunits & y)
  122. {
  123.   return x.n/y.n;
  124. }
  125.  
  126. inline vunits operator /(const vunits & x, int n)
  127. {
  128.   vunits r;
  129.   r = x;
  130.   r.n /= n;
  131.   return r;
  132. }
  133.  
  134. inline vunits operator *(const vunits & x, int n)
  135. {
  136.   vunits r;
  137.   r = x;
  138.   r.n *= n;
  139.   return r;
  140. }
  141.  
  142. inline vunits operator *(int n, const vunits & x)
  143. {
  144.   vunits r;
  145.   r = x;
  146.   r.n *= n;
  147.   return r;
  148. }
  149.  
  150. inline int operator <(const vunits & x, const vunits & y)
  151. {
  152.   return x.n < y.n;
  153. }
  154.  
  155. inline int operator >(const vunits & x, const vunits & y)
  156. {
  157.   return x.n > y.n;
  158. }
  159.  
  160. inline int operator <=(const vunits & x, const vunits & y)
  161. {
  162.   return x.n <= y.n;
  163. }
  164.  
  165. inline int operator >=(const vunits & x, const vunits & y)
  166. {
  167.   return x.n >= y.n;
  168. }
  169.  
  170. inline int operator ==(const vunits & x, const vunits & y)
  171. {
  172.   return x.n == y.n;
  173. }
  174.  
  175. inline int operator !=(const vunits & x, const vunits & y)
  176. {
  177.   return x.n != y.n;
  178. }
  179.  
  180.  
  181. inline vunits& vunits::operator+=(const vunits & x)
  182. {
  183.   n += x.n;
  184.   return *this;
  185. }
  186.  
  187. inline vunits& vunits::operator-=(const vunits & x)
  188. {
  189.   n -= x.n;
  190.   return *this;
  191. }
  192.  
  193. inline hunits:: hunits() : n(0)
  194. {
  195. }
  196.  
  197. inline units hunits::to_units()
  198. {
  199.   return n*hresolution;
  200. }
  201.  
  202. inline int hunits::is_zero()
  203. {
  204.   return n == 0;
  205. }
  206.  
  207. inline hunits operator +(const hunits & x, const hunits & y)
  208. {
  209.   hunits r;
  210.   r = x;
  211.   r.n += y.n;
  212.   return r;
  213. }
  214.  
  215. inline hunits operator -(const hunits & x, const hunits & y)
  216. {
  217.   hunits r;
  218.   r = x;
  219.   r.n -= y.n;
  220.   return r;
  221. }
  222.  
  223. inline hunits operator -(const hunits & x)
  224. {
  225.   hunits r;
  226.   r = x;
  227.   r.n = -x.n;
  228.   return r;
  229. }
  230.  
  231. inline int operator /(const hunits & x, const hunits & y)
  232. {
  233.   return x.n/y.n;
  234. }
  235.  
  236. inline hunits operator /(const hunits & x, int n)
  237. {
  238.   hunits r;
  239.   r = x;
  240.   r.n /= n;
  241.   return r;
  242. }
  243.  
  244. inline hunits operator *(const hunits & x, int n)
  245. {
  246.   hunits r;
  247.   r = x;
  248.   r.n *= n;
  249.   return r;
  250. }
  251.  
  252. inline hunits operator *(int n, const hunits & x)
  253. {
  254.   hunits r;
  255.   r = x;
  256.   r.n *= n;
  257.   return r;
  258. }
  259.  
  260. inline int operator <(const hunits & x, const hunits & y)
  261. {
  262.   return x.n < y.n;
  263. }
  264.  
  265. inline int operator >(const hunits & x, const hunits & y)
  266. {
  267.   return x.n > y.n;
  268. }
  269.  
  270. inline int operator <=(const hunits & x, const hunits & y)
  271. {
  272.   return x.n <= y.n;
  273. }
  274.  
  275. inline int operator >=(const hunits & x, const hunits & y)
  276. {
  277.   return x.n >= y.n;
  278. }
  279.  
  280. inline int operator ==(const hunits & x, const hunits & y)
  281. {
  282.   return x.n == y.n;
  283. }
  284.  
  285. inline int operator !=(const hunits & x, const hunits & y)
  286. {
  287.   return x.n != y.n;
  288. }
  289.  
  290.  
  291. inline hunits& hunits::operator+=(const hunits & x)
  292. {
  293.   n += x.n;
  294.   return *this;
  295. }
  296.  
  297. inline hunits& hunits::operator-=(const hunits & x)
  298. {
  299.   n -= x.n;
  300.   return *this;
  301. }
  302.  
  303. inline hunits scale(hunits n, units x, units y)
  304. {
  305.   hunits r;
  306.   r.n = scale(n.n, x, y);
  307.   return r;
  308. }
  309.  
  310. inline vunits scale(vunits n, units x, units y)
  311. {
  312.   vunits r;
  313.   r.n = scale(n.n, x, y);
  314.   return r;
  315. }
  316.  
  317. inline vunits scale(vunits n, vunits x, vunits y)
  318. {
  319.   vunits r;
  320.   r.n = scale(n.n, x.n, y.n);
  321.   return r;
  322. }
  323.  
  324. inline hunits scale(hunits n, double x)
  325. {
  326.   hunits r;
  327.   r.n = int(n.n*x);
  328.   return r;
  329. }
  330.  
  331. inline units scale(units n, double x)
  332. {
  333.   return int(n*x);
  334. }
  335.  
  336. inline units points_to_units(units n)
  337. {
  338.   return scale(n, units_per_inch, 72);
  339. }
  340.  
  341.