Introduction
Introduction Statistics Contact Development Disclaimer Help
arith.c - sam - An updated version of the sam text editor.
git clone git://vernunftzentrum.de/sam.git
Log
Files
Refs
LICENSE
---
arith.c (2785B)
---
1 /* Copyright (c) 1998 Lucent Technologies - All rights reserved. */
2 #include <u.h>
3 #include <libg.h>
4
5 Point
6 add(Point a, Point b)
7 {
8 a.x += b.x;
9 a.y += b.y;
10 return a;
11 }
12
13 Point
14 sub(Point a, Point b)
15 {
16 a.x -= b.x;
17 a.y -= b.y;
18 return a;
19 }
20
21 Rectangle
22 inset(Rectangle r, int n)
23 {
24 r.min.x += n;
25 r.min.y += n;
26 r.max.x -= n;
27 r.max.y -= n;
28 return r;
29 }
30
31 Point
32 divpt(Point a, int b)
33 {
34 a.x /= b;
35 a.y /= b;
36 return a;
37 }
38
39 Point
40 mul(Point a, int b)
41 {
42 a.x *= b;
43 a.y *= b;
44 return a;
45 }
46
47 Rectangle
48 rsubp(Rectangle r, Point p)
49 {
50 r.min.x -= p.x;
51 r.min.y -= p.y;
52 r.max.x -= p.x;
53 r.max.y -= p.y;
54 return r;
55 }
56
57 Rectangle
58 raddp(Rectangle r, Point p)
59 {
60 r.min.x += p.x;
61 r.min.y += p.y;
62 r.max.x += p.x;
63 r.max.y += p.y;
64 return r;
65 }
66
67 Rectangle
68 rmul(Rectangle r, int a)
69 {
70 if (a != 1) {
71 r.min.x *= a;
72 r.min.y *= a;
73 r.max.x *= a;
74 r.max.y *= a;
75 }
76 return r;
77 }
78
79 Rectangle
80 rdiv(Rectangle r, int a)
81 {
82 if (a != 1) {
83 r.min.x /= a;
84 r.min.y /= a;
85 r.max.x /= a;
86 r.max.y /= a;
87 }
88 return r;
89 }
90
91 Rectangle
92 rshift(Rectangle r, int a)
93 {
94 if (a > 0) {
95 r.min.x <<= a;
96 r.min.y <<= a;
97 r.max.x <<= a;
98 r.max.y <<= a;
99 }
100 else if (a < 0) {
101 a = -a;
102 r.min.x >>= a;
103 r.min.y >>= a;
104 r.max.x >>= a;
105 r.max.y >>= a;
106 }
107 return r;
108 }
109
110 int
111 eqpt(Point p, Point q)
112 {
113 return p.x==q.x && p.y==q.y;
114 }
115
116 int
117 eqrect(Rectangle r, Rectangle s)
118 {
119 return r.min.x==s.min.x && r.max.x==s.max.x &&
120 r.min.y==s.min.y && r.max.y==s.max.y;
121 }
122
123 int
124 rectXrect(Rectangle r, Rectangle s)
125 {
126 return r.min.x<s.max.x && s.min.x<r.max.x &&
127 r.min.y<s.max.y && s.min.y<r.max.y;
128 }
129
130 int
131 rectinrect(Rectangle r, Rectangle s)
132 {
133 /* !ptinrect(r.min, s) in line for speed */
134 if(!(r.min.x>=s.min.x && r.min.x<s.max.x &&
135 r.min.y>=s.min.y && r.min.y<s.max.y))
136 return 0;
137 return r.max.x<=s.max.x && r.max.y<=s.max.y;
138 }
139
140 int
141 ptinrect(Point p, Rectangle r)
142 {
143 return p.x>=r.min.x && p.x<r.max.x &&
144 p.y>=r.min.y && p.y<r.max.y;
145 }
146
147 Rectangle
148 rcanon(Rectangle r)
149 {
150 int t;
151 if (r.max.x < r.min.x) {
152 t = r.min.x;
153 r.min.x = r.max.x;
154 r.max.x = t;
155 }
156 if (r.max.y < r.min.y) {
157 t = r.min.y;
158 r.min.y = r.max.y;
159 r.max.y = t;
160 }
161 return r;
162 }
163
164 Rectangle
165 Rect(int x1, int y1, int x2, int y2)
166 {
167 Rectangle r;
168
169 r.min.x = x1;
170 r.min.y = y1;
171 r.max.x = x2;
172 r.max.y = y2;
173 return r;
174 }
175
176 Rectangle
177 Rpt(Point p1, Point p2)
178 {
179 Rectangle r;
180
181 r.min = p1;
182 r.max = p2;
183 return r;
184 }
185
186 Point
187 Pt(int x, int y)
188 {
189 Point p;
190
191 p.x = x;
192 p.y = y;
193 return p;
194 }
You are viewing proxied material from vernunftzentrum.de. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.