DEADSOFTWARE

93731f73fa7a2431488847c526d9bb4a1e550d1f
[bbcp.git] / Trurl-based / System / Mod / Ports.txt
1 MODULE Ports;
3 (* THIS IS TEXT COPY OF BlackBox 1.6-rc6 System/Mod/Ports.odc *)
4 (* DO NOT EDIT *)
6 IMPORT Fonts;
8 CONST
9 (** colors **)
10 black* = 00000000H; white* = 00FFFFFFH;
11 grey6* = 00F0F0F0H; grey12* = 00E0E0E0H; grey25* = 00C0C0C0H;
12 grey50* = 00808080H; grey75* = 00404040H;
13 red* = 000000FFH; green* = 0000FF00H; blue* = 00FF0000H;
14 defaultColor* = 01000000H;
16 (** measures **)
17 mm* = 36000;
18 point* = 12700;
19 inch* = 914400;
21 (** size parameter for the DrawRect, DrawOval, DrawLine, DrawPath, and MarkRect procedures **)
22 fill* = -1;
24 (** path parameter for DrawPath **)
25 openPoly* = 0; closedPoly* = 1; openBezier* = 2; closedBezier* = 3;
27 (** modes for MarkRect **)
28 invert* = 0; hilite* = 1; dim25* = 2; dim50* = 3; dim75* = 4;
30 hide* = FALSE; show* = TRUE;
32 (** cursors **)
33 arrowCursor* = 0;
34 textCursor* = 1; graphicsCursor* = 2; tableCursor* = 3; bitmapCursor* = 4; refCursor* = 5;
36 (** RestoreRect **)
37 keepBuffer* = FALSE; disposeBuffer* = TRUE;
40 (** PageMode **)
41 printer* = TRUE; screen* = FALSE;
44 TYPE
45 Color* = INTEGER;
47 Point* = RECORD
48 x*, y*: INTEGER
49 END;
51 Port* = POINTER TO ABSTRACT RECORD
52 unit-: INTEGER;
53 printerMode: BOOLEAN;
54 END;
56 Rider* = POINTER TO ABSTRACT RECORD END;
58 Frame* = POINTER TO ABSTRACT RECORD
59 unit-, dot-: INTEGER; (** inv: dot = point - point MOD unit **)
60 rider-: Rider;
61 gx-, gy-: INTEGER
62 END;
65 VAR
66 background*: Color;
67 dialogBackground*: Color;
70 (** Port **)
72 PROCEDURE (p: Port) Init* (unit: INTEGER; printerMode: BOOLEAN), NEW;
73 BEGIN
74 ASSERT((p.unit = 0) OR (p.unit = unit), 20); ASSERT(unit > 0, 21);
75 ASSERT((p.unit = 0) OR (p.printerMode = printerMode), 22);
76 p.unit := unit;
77 p.printerMode := printerMode;
78 END Init;
80 PROCEDURE (p: Port) GetSize* (OUT w, h: INTEGER), NEW, ABSTRACT;
81 PROCEDURE (p: Port) SetSize* (w, h: INTEGER), NEW, ABSTRACT;
82 PROCEDURE (p: Port) NewRider* (): Rider, NEW, ABSTRACT;
83 PROCEDURE (p: Port) OpenBuffer* (l, t, r, b: INTEGER), NEW, ABSTRACT;
84 PROCEDURE (p: Port) CloseBuffer* (), NEW, ABSTRACT;
87 (** Rider **)
89 PROCEDURE (rd: Rider) SetRect* (l, t, r, b: INTEGER), NEW, ABSTRACT;
90 PROCEDURE (rd: Rider) GetRect* (OUT l, t, r, b: INTEGER), NEW, ABSTRACT;
91 PROCEDURE (rd: Rider) Base* (): Port, NEW, ABSTRACT;
92 PROCEDURE (rd: Rider) Move* (dx, dy: INTEGER), NEW, ABSTRACT;
93 PROCEDURE (rd: Rider) SaveRect* (l, t, r, b: INTEGER; VAR res: INTEGER), NEW, ABSTRACT;
94 PROCEDURE (rd: Rider) RestoreRect* (l, t, r, b: INTEGER; dispose: BOOLEAN), NEW, ABSTRACT;
95 PROCEDURE (rd: Rider) DrawRect* (l, t, r, b, s: INTEGER; col: Color), NEW, ABSTRACT;
96 PROCEDURE (rd: Rider) DrawOval* (l, t, r, b, s: INTEGER; col: Color), NEW, ABSTRACT;
97 PROCEDURE (rd: Rider) DrawLine* (x0, y0, x1, y1, s: INTEGER; col: Color), NEW, ABSTRACT;
98 PROCEDURE (rd: Rider) DrawPath* (IN p: ARRAY OF Point; n, s: INTEGER; col: Color;
99 path: INTEGER), NEW, ABSTRACT;
100 PROCEDURE (rd: Rider) MarkRect* (l, t, r, b, s, mode: INTEGER; show: BOOLEAN), NEW, ABSTRACT;
101 PROCEDURE (rd: Rider) Scroll* (dx, dy: INTEGER), NEW, ABSTRACT;
102 PROCEDURE (rd: Rider) SetCursor* (cursor: INTEGER), NEW, ABSTRACT;
103 PROCEDURE (rd: Rider) Input* (OUT x, y: INTEGER; OUT modifiers: SET;
104 OUT isDown: BOOLEAN), NEW, ABSTRACT;
105 PROCEDURE (rd: Rider) DrawString* (x, y: INTEGER; col: Color; IN s: ARRAY OF CHAR;
106 font: Fonts.Font), NEW, ABSTRACT;
107 PROCEDURE (rd: Rider) CharIndex* (x, pos: INTEGER; IN s: ARRAY OF CHAR;
108 font: Fonts.Font): INTEGER, NEW, ABSTRACT;
109 PROCEDURE (rd: Rider) CharPos* (x, index: INTEGER; IN s: ARRAY OF CHAR;
110 font: Fonts.Font): INTEGER, NEW, ABSTRACT;
111 PROCEDURE (rd: Rider) DrawSString* (x, y: INTEGER; col: Color; IN s: ARRAY OF SHORTCHAR;
112 font: Fonts.Font), NEW, ABSTRACT;
113 PROCEDURE (rd: Rider) SCharIndex* (x, pos: INTEGER; IN s: ARRAY OF SHORTCHAR;
114 font: Fonts.Font): INTEGER, NEW, ABSTRACT;
115 PROCEDURE (rd: Rider) SCharPos* (x, index: INTEGER; IN s: ARRAY OF SHORTCHAR;
116 font: Fonts.Font): INTEGER, NEW, ABSTRACT;
119 (** Frame **)
121 PROCEDURE (f: Frame) ConnectTo* (p: Port), NEW, EXTENSIBLE;
122 VAR w, h: INTEGER;
123 BEGIN
124 IF p # NIL THEN
125 f.rider := p.NewRider(); f.unit := p.unit;
126 p.GetSize(w, h);
127 f.dot := point - point MOD f.unit;
128 ELSE
129 f.rider := NIL; f.unit := 0
130 END
131 END ConnectTo;
133 PROCEDURE (f: Frame) SetOffset* (gx, gy: INTEGER), NEW, EXTENSIBLE;
134 VAR u: INTEGER;
135 BEGIN
136 u := f.unit;
137 IF ((gx - f.gx) MOD u = 0) & ((gy - f.gy) MOD u = 0) THEN
138 f.rider.Move((gx - f.gx) DIV u, (gy - f.gy) DIV u)
139 END;
140 f.gx := gx; f.gy := gy
141 END SetOffset;
143 PROCEDURE (f: Frame) SaveRect* (l, t, r, b: INTEGER; VAR res: INTEGER), NEW;
144 VAR u: INTEGER;
145 BEGIN
146 ASSERT((l <= r) & (t <= b), 20);
147 u := f.unit;
148 l := (f.gx + l) DIV u; t := (f.gy + t) DIV u;
149 r := (f.gx + r) DIV u; b := (f.gy + b) DIV u;
150 f.rider.SaveRect(l, t, r, b, res);
151 END SaveRect;
153 PROCEDURE (f: Frame) RestoreRect* (l, t, r, b: INTEGER; dispose: BOOLEAN), NEW;
154 VAR u: INTEGER;
155 BEGIN
156 ASSERT((l <= r) & (t <= b), 20);
157 u := f.unit;
158 l := (f.gx + l) DIV u; t := (f.gy + t) DIV u;
159 r := (f.gx + r) DIV u; b := (f.gy + b) DIV u;
160 f.rider.RestoreRect(l, t, r, b, dispose);
161 END RestoreRect;
163 PROCEDURE (f: Frame) DrawRect* (l, t, r, b, s: INTEGER; col: Color), NEW;
164 VAR u: INTEGER;
165 BEGIN
166 ASSERT((l <= r) & (t <= b), 20); ASSERT(s >= fill, 21);
167 u := f.unit;
168 l := (f.gx + l) DIV u; t := (f.gy + t) DIV u;
169 r := (f.gx + r) DIV u; b := (f.gy + b) DIV u;
170 s := s DIV u;
171 f.rider.DrawRect(l, t, r, b, s, col)
172 END DrawRect;
174 PROCEDURE (f: Frame) DrawOval* (l, t, r, b, s: INTEGER; col: Color), NEW;
175 VAR u: INTEGER;
176 BEGIN
177 ASSERT((l <= r) & (t <= b), 20); ASSERT(s >= fill, 21);
178 u := f.unit;
179 l := (f.gx + l) DIV u; t := (f.gy + t) DIV u;
180 r := (f.gx + r) DIV u; b := (f.gy + b) DIV u;
181 s := s DIV u;
182 f.rider.DrawOval(l, t, r, b, s, col)
183 END DrawOval;
185 PROCEDURE (f: Frame) DrawLine* (x0, y0, x1, y1, s: INTEGER; col: Color), NEW;
186 VAR u: INTEGER;
187 BEGIN
188 ASSERT(s >= fill, 20);
189 u := f.unit;
190 x0 := (f.gx + x0) DIV u; y0 := (f.gy + y0) DIV u;
191 x1 := (f.gx + x1) DIV u; y1 := (f.gy + y1) DIV u;
192 s := s DIV u;
193 f.rider.DrawLine(x0, y0, x1, y1, s, col)
194 END DrawLine;
196 PROCEDURE (f: Frame) DrawPath* (IN p: ARRAY OF Point; n, s: INTEGER; col: Color; path: INTEGER), NEW;
198 PROCEDURE Draw(p: ARRAY OF Point);
199 VAR i, u: INTEGER;
200 BEGIN
201 u := f.unit; s := s DIV u;
202 i := 0;
203 WHILE i # n DO
204 p[i].x := (f.gx + p[i].x) DIV u; p[i].y := (f.gy + p[i].y) DIV u;
205 INC(i)
206 END;
207 f.rider.DrawPath(p, n, s, col, path)
208 END Draw;
210 BEGIN
211 ASSERT(n >= 0, 20); ASSERT(n <= LEN(p), 21);
212 ASSERT((s # fill) OR (path = closedPoly) OR (path = closedBezier), 22);
213 ASSERT(s >= fill, 23);
214 Draw(p)
215 END DrawPath;
217 PROCEDURE (f: Frame) MarkRect* (l, t, r, b, s: INTEGER; mode: INTEGER; show: BOOLEAN), NEW;
218 VAR u: INTEGER;
219 BEGIN
220 (* ASSERT((l <= r) & (t <= b), 20); *) ASSERT(s >= fill, 21);
221 u := f.unit;
222 l := (f.gx + l) DIV u; t := (f.gy + t) DIV u;
223 r := (f.gx + r) DIV u; b := (f.gy + b) DIV u;
224 s := s DIV u;
225 f.rider.MarkRect(l, t, r, b, s, mode, show)
226 END MarkRect;
228 PROCEDURE (f: Frame) Scroll* (dx, dy: INTEGER), NEW;
229 VAR u: INTEGER;
230 BEGIN
231 u := f.unit;
232 ASSERT(dx MOD u = 0, 20); ASSERT(dy MOD u = 0, 20);
233 f.rider.Scroll(dx DIV u, dy DIV u)
234 END Scroll;
236 PROCEDURE (f: Frame) SetCursor* (cursor: INTEGER), NEW;
237 BEGIN
238 f.rider.SetCursor(cursor)
239 END SetCursor;
241 PROCEDURE (f: Frame) Input* (OUT x, y: INTEGER; OUT modifiers: SET; OUT isDown: BOOLEAN), NEW;
242 VAR u: INTEGER;
243 BEGIN
244 f.rider.Input(x, y, modifiers, isDown);
245 u := f.unit;
246 x := x * u - f.gx; y := y * u - f.gy
247 END Input;
249 PROCEDURE (f: Frame) DrawString* (x, y: INTEGER; col: Color; IN s: ARRAY OF CHAR;
250 font: Fonts.Font), NEW;
251 VAR u: INTEGER;
252 BEGIN
253 u := f.unit;
254 x := (f.gx + x) DIV u; y := (f.gy + y) DIV u;
255 f.rider.DrawString(x, y, col, s, font)
256 END DrawString;
258 PROCEDURE (f: Frame) CharIndex* (x, pos: INTEGER; IN s: ARRAY OF CHAR;
259 font: Fonts.Font): INTEGER, NEW;
260 VAR u: INTEGER;
261 BEGIN
262 u := f.unit;
263 x := (f.gx + x) DIV u; pos := (f.gx + pos) DIV u;
264 RETURN f.rider.CharIndex(x, pos, s, font)
265 END CharIndex;
267 PROCEDURE (f: Frame) CharPos* (x, index: INTEGER; IN s: ARRAY OF CHAR;
268 font: Fonts.Font): INTEGER, NEW;
269 VAR u: INTEGER;
270 BEGIN
271 u := f.unit;
272 x := (f.gx + x) DIV u;
273 RETURN f.rider.CharPos(x, index, s, font) * u - f.gx
274 END CharPos;
276 PROCEDURE (f: Frame) DrawSString* (x, y: INTEGER; col: Color; IN s: ARRAY OF SHORTCHAR;
277 font: Fonts.Font), NEW;
278 VAR u: INTEGER;
279 BEGIN
280 u := f.unit;
281 x := (f.gx + x) DIV u; y := (f.gy + y) DIV u;
282 f.rider.DrawSString(x, y, col, s, font)
283 END DrawSString;
285 PROCEDURE (f: Frame) SCharIndex* (x, pos: INTEGER; IN s: ARRAY OF SHORTCHAR;
286 font: Fonts.Font): INTEGER, NEW;
287 VAR u: INTEGER;
288 BEGIN
289 u := f.unit;
290 x := (f.gx + x) DIV u; pos := (f.gx + pos) DIV u;
291 RETURN f.rider.SCharIndex(x, pos, s, font)
292 END SCharIndex;
294 PROCEDURE (f: Frame) SCharPos* (x, index: INTEGER; IN s: ARRAY OF SHORTCHAR;
295 font: Fonts.Font): INTEGER, NEW;
296 VAR u: INTEGER;
297 BEGIN
298 u := f.unit;
299 x := (f.gx + x) DIV u;
300 RETURN f.rider.SCharPos(x, index, s, font) * u - f.gx
301 END SCharPos;
303 PROCEDURE RGBColor* (red, green, blue: INTEGER): Color;
304 BEGIN
305 ASSERT((red >= 0) & (red < 256), 20);
306 ASSERT((green >= 0) & (green < 256), 21);
307 ASSERT((blue >= 0) & (blue < 256), 22);
308 RETURN (blue * 65536) + (green * 256) + red
309 END RGBColor;
311 PROCEDURE IsPrinterPort*(p: Port): BOOLEAN;
312 BEGIN
313 RETURN p.printerMode
314 END IsPrinterPort;
316 BEGIN
317 background := white; dialogBackground := white
318 END Ports.