Ports.txt 9.5 KB

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