123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318 |
- MODULE Ports;
- (* THIS IS TEXT COPY OF BlackBox 1.6-rc6 System/Mod/Ports.odc *)
- (* DO NOT EDIT *)
- IMPORT Fonts;
- CONST
- (** colors **)
- black* = 00000000H; white* = 00FFFFFFH;
- grey6* = 00F0F0F0H; grey12* = 00E0E0E0H; grey25* = 00C0C0C0H;
- grey50* = 00808080H; grey75* = 00404040H;
- red* = 000000FFH; green* = 0000FF00H; blue* = 00FF0000H;
- defaultColor* = 01000000H;
- (** measures **)
- mm* = 36000;
- point* = 12700;
- inch* = 914400;
- (** size parameter for the DrawRect, DrawOval, DrawLine, DrawPath, and MarkRect procedures **)
- fill* = -1;
- (** path parameter for DrawPath **)
- openPoly* = 0; closedPoly* = 1; openBezier* = 2; closedBezier* = 3;
- (** modes for MarkRect **)
- invert* = 0; hilite* = 1; dim25* = 2; dim50* = 3; dim75* = 4;
- hide* = FALSE; show* = TRUE;
- (** cursors **)
- arrowCursor* = 0;
- textCursor* = 1; graphicsCursor* = 2; tableCursor* = 3; bitmapCursor* = 4; refCursor* = 5;
-
- (** RestoreRect **)
- keepBuffer* = FALSE; disposeBuffer* = TRUE;
- (** PageMode **)
- printer* = TRUE; screen* = FALSE;
-
- TYPE
- Color* = INTEGER;
- Point* = RECORD
- x*, y*: INTEGER
- END;
- Port* = POINTER TO ABSTRACT RECORD
- unit-: INTEGER;
- printerMode: BOOLEAN;
- END;
- Rider* = POINTER TO ABSTRACT RECORD END;
- Frame* = POINTER TO ABSTRACT RECORD
- unit-, dot-: INTEGER; (** inv: dot = point - point MOD unit **)
- rider-: Rider;
- gx-, gy-: INTEGER
- END;
- VAR
- background*: Color;
- dialogBackground*: Color;
- (** Port **)
- PROCEDURE (p: Port) Init* (unit: INTEGER; printerMode: BOOLEAN), NEW;
- BEGIN
- ASSERT((p.unit = 0) OR (p.unit = unit), 20); ASSERT(unit > 0, 21);
- ASSERT((p.unit = 0) OR (p.printerMode = printerMode), 22);
- p.unit := unit;
- p.printerMode := printerMode;
- END Init;
- PROCEDURE (p: Port) GetSize* (OUT w, h: INTEGER), NEW, ABSTRACT;
- PROCEDURE (p: Port) SetSize* (w, h: INTEGER), NEW, ABSTRACT;
- PROCEDURE (p: Port) NewRider* (): Rider, NEW, ABSTRACT;
- PROCEDURE (p: Port) OpenBuffer* (l, t, r, b: INTEGER), NEW, ABSTRACT;
- PROCEDURE (p: Port) CloseBuffer* (), NEW, ABSTRACT;
- (** Rider **)
- PROCEDURE (rd: Rider) SetRect* (l, t, r, b: INTEGER), NEW, ABSTRACT;
- PROCEDURE (rd: Rider) GetRect* (OUT l, t, r, b: INTEGER), NEW, ABSTRACT;
- PROCEDURE (rd: Rider) Base* (): Port, NEW, ABSTRACT;
- PROCEDURE (rd: Rider) Move* (dx, dy: INTEGER), NEW, ABSTRACT;
- PROCEDURE (rd: Rider) SaveRect* (l, t, r, b: INTEGER; VAR res: INTEGER), NEW, ABSTRACT;
- PROCEDURE (rd: Rider) RestoreRect* (l, t, r, b: INTEGER; dispose: BOOLEAN), NEW, ABSTRACT;
- PROCEDURE (rd: Rider) DrawRect* (l, t, r, b, s: INTEGER; col: Color), NEW, ABSTRACT;
- PROCEDURE (rd: Rider) DrawOval* (l, t, r, b, s: INTEGER; col: Color), NEW, ABSTRACT;
- PROCEDURE (rd: Rider) DrawLine* (x0, y0, x1, y1, s: INTEGER; col: Color), NEW, ABSTRACT;
- PROCEDURE (rd: Rider) DrawPath* (IN p: ARRAY OF Point; n, s: INTEGER; col: Color;
- path: INTEGER), NEW, ABSTRACT;
- PROCEDURE (rd: Rider) MarkRect* (l, t, r, b, s, mode: INTEGER; show: BOOLEAN), NEW, ABSTRACT;
- PROCEDURE (rd: Rider) Scroll* (dx, dy: INTEGER), NEW, ABSTRACT;
- PROCEDURE (rd: Rider) SetCursor* (cursor: INTEGER), NEW, ABSTRACT;
- PROCEDURE (rd: Rider) Input* (OUT x, y: INTEGER; OUT modifiers: SET;
- OUT isDown: BOOLEAN), NEW, ABSTRACT;
- PROCEDURE (rd: Rider) DrawString* (x, y: INTEGER; col: Color; IN s: ARRAY OF CHAR;
- font: Fonts.Font), NEW, ABSTRACT;
- PROCEDURE (rd: Rider) CharIndex* (x, pos: INTEGER; IN s: ARRAY OF CHAR;
- font: Fonts.Font): INTEGER, NEW, ABSTRACT;
- PROCEDURE (rd: Rider) CharPos* (x, index: INTEGER; IN s: ARRAY OF CHAR;
- font: Fonts.Font): INTEGER, NEW, ABSTRACT;
- PROCEDURE (rd: Rider) DrawSString* (x, y: INTEGER; col: Color; IN s: ARRAY OF SHORTCHAR;
- font: Fonts.Font), NEW, ABSTRACT;
- PROCEDURE (rd: Rider) SCharIndex* (x, pos: INTEGER; IN s: ARRAY OF SHORTCHAR;
- font: Fonts.Font): INTEGER, NEW, ABSTRACT;
- PROCEDURE (rd: Rider) SCharPos* (x, index: INTEGER; IN s: ARRAY OF SHORTCHAR;
- font: Fonts.Font): INTEGER, NEW, ABSTRACT;
-
-
- (** Frame **)
- PROCEDURE (f: Frame) ConnectTo* (p: Port), NEW, EXTENSIBLE;
- VAR w, h: INTEGER;
- BEGIN
- IF p # NIL THEN
- f.rider := p.NewRider(); f.unit := p.unit;
- p.GetSize(w, h);
- f.dot := point - point MOD f.unit;
- ELSE
- f.rider := NIL; f.unit := 0
- END
- END ConnectTo;
- PROCEDURE (f: Frame) SetOffset* (gx, gy: INTEGER), NEW, EXTENSIBLE;
- VAR u: INTEGER;
- BEGIN
- u := f.unit;
- IF ((gx - f.gx) MOD u = 0) & ((gy - f.gy) MOD u = 0) THEN
- f.rider.Move((gx - f.gx) DIV u, (gy - f.gy) DIV u)
- END;
- f.gx := gx; f.gy := gy
- END SetOffset;
-
- PROCEDURE (f: Frame) SaveRect* (l, t, r, b: INTEGER; VAR res: INTEGER), NEW;
- VAR u: INTEGER;
- BEGIN
- ASSERT((l <= r) & (t <= b), 20);
- u := f.unit;
- l := (f.gx + l) DIV u; t := (f.gy + t) DIV u;
- r := (f.gx + r) DIV u; b := (f.gy + b) DIV u;
- f.rider.SaveRect(l, t, r, b, res);
- END SaveRect;
-
- PROCEDURE (f: Frame) RestoreRect* (l, t, r, b: INTEGER; dispose: BOOLEAN), NEW;
- VAR u: INTEGER;
- BEGIN
- ASSERT((l <= r) & (t <= b), 20);
- u := f.unit;
- l := (f.gx + l) DIV u; t := (f.gy + t) DIV u;
- r := (f.gx + r) DIV u; b := (f.gy + b) DIV u;
- f.rider.RestoreRect(l, t, r, b, dispose);
- END RestoreRect;
-
- PROCEDURE (f: Frame) DrawRect* (l, t, r, b, s: INTEGER; col: Color), NEW;
- VAR u: INTEGER;
- BEGIN
- ASSERT((l <= r) & (t <= b), 20); ASSERT(s >= fill, 21);
- u := f.unit;
- l := (f.gx + l) DIV u; t := (f.gy + t) DIV u;
- r := (f.gx + r) DIV u; b := (f.gy + b) DIV u;
- s := s DIV u;
- f.rider.DrawRect(l, t, r, b, s, col)
- END DrawRect;
- PROCEDURE (f: Frame) DrawOval* (l, t, r, b, s: INTEGER; col: Color), NEW;
- VAR u: INTEGER;
- BEGIN
- ASSERT((l <= r) & (t <= b), 20); ASSERT(s >= fill, 21);
- u := f.unit;
- l := (f.gx + l) DIV u; t := (f.gy + t) DIV u;
- r := (f.gx + r) DIV u; b := (f.gy + b) DIV u;
- s := s DIV u;
- f.rider.DrawOval(l, t, r, b, s, col)
- END DrawOval;
- PROCEDURE (f: Frame) DrawLine* (x0, y0, x1, y1, s: INTEGER; col: Color), NEW;
- VAR u: INTEGER;
- BEGIN
- ASSERT(s >= fill, 20);
- u := f.unit;
- x0 := (f.gx + x0) DIV u; y0 := (f.gy + y0) DIV u;
- x1 := (f.gx + x1) DIV u; y1 := (f.gy + y1) DIV u;
- s := s DIV u;
- f.rider.DrawLine(x0, y0, x1, y1, s, col)
- END DrawLine;
- PROCEDURE (f: Frame) DrawPath* (IN p: ARRAY OF Point; n, s: INTEGER; col: Color; path: INTEGER), NEW;
- PROCEDURE Draw(p: ARRAY OF Point);
- VAR i, u: INTEGER;
- BEGIN
- u := f.unit; s := s DIV u;
- i := 0;
- WHILE i # n DO
- p[i].x := (f.gx + p[i].x) DIV u; p[i].y := (f.gy + p[i].y) DIV u;
- INC(i)
- END;
- f.rider.DrawPath(p, n, s, col, path)
- END Draw;
- BEGIN
- ASSERT(n >= 0, 20); ASSERT(n <= LEN(p), 21);
- ASSERT((s # fill) OR (path = closedPoly) OR (path = closedBezier), 22);
- ASSERT(s >= fill, 23);
- Draw(p)
- END DrawPath;
- PROCEDURE (f: Frame) MarkRect* (l, t, r, b, s: INTEGER; mode: INTEGER; show: BOOLEAN), NEW;
- VAR u: INTEGER;
- BEGIN
- (* ASSERT((l <= r) & (t <= b), 20); *) ASSERT(s >= fill, 21);
- u := f.unit;
- l := (f.gx + l) DIV u; t := (f.gy + t) DIV u;
- r := (f.gx + r) DIV u; b := (f.gy + b) DIV u;
- s := s DIV u;
- f.rider.MarkRect(l, t, r, b, s, mode, show)
- END MarkRect;
- PROCEDURE (f: Frame) Scroll* (dx, dy: INTEGER), NEW;
- VAR u: INTEGER;
- BEGIN
- u := f.unit;
- ASSERT(dx MOD u = 0, 20); ASSERT(dy MOD u = 0, 20);
- f.rider.Scroll(dx DIV u, dy DIV u)
- END Scroll;
- PROCEDURE (f: Frame) SetCursor* (cursor: INTEGER), NEW;
- BEGIN
- f.rider.SetCursor(cursor)
- END SetCursor;
- PROCEDURE (f: Frame) Input* (OUT x, y: INTEGER; OUT modifiers: SET; OUT isDown: BOOLEAN), NEW;
- VAR u: INTEGER;
- BEGIN
- f.rider.Input(x, y, modifiers, isDown);
- u := f.unit;
- x := x * u - f.gx; y := y * u - f.gy
- END Input;
- PROCEDURE (f: Frame) DrawString* (x, y: INTEGER; col: Color; IN s: ARRAY OF CHAR;
- font: Fonts.Font), NEW;
- VAR u: INTEGER;
- BEGIN
- u := f.unit;
- x := (f.gx + x) DIV u; y := (f.gy + y) DIV u;
- f.rider.DrawString(x, y, col, s, font)
- END DrawString;
- PROCEDURE (f: Frame) CharIndex* (x, pos: INTEGER; IN s: ARRAY OF CHAR;
- font: Fonts.Font): INTEGER, NEW;
- VAR u: INTEGER;
- BEGIN
- u := f.unit;
- x := (f.gx + x) DIV u; pos := (f.gx + pos) DIV u;
- RETURN f.rider.CharIndex(x, pos, s, font)
- END CharIndex;
- PROCEDURE (f: Frame) CharPos* (x, index: INTEGER; IN s: ARRAY OF CHAR;
- font: Fonts.Font): INTEGER, NEW;
- VAR u: INTEGER;
- BEGIN
- u := f.unit;
- x := (f.gx + x) DIV u;
- RETURN f.rider.CharPos(x, index, s, font) * u - f.gx
- END CharPos;
- PROCEDURE (f: Frame) DrawSString* (x, y: INTEGER; col: Color; IN s: ARRAY OF SHORTCHAR;
- font: Fonts.Font), NEW;
- VAR u: INTEGER;
- BEGIN
- u := f.unit;
- x := (f.gx + x) DIV u; y := (f.gy + y) DIV u;
- f.rider.DrawSString(x, y, col, s, font)
- END DrawSString;
- PROCEDURE (f: Frame) SCharIndex* (x, pos: INTEGER; IN s: ARRAY OF SHORTCHAR;
- font: Fonts.Font): INTEGER, NEW;
- VAR u: INTEGER;
- BEGIN
- u := f.unit;
- x := (f.gx + x) DIV u; pos := (f.gx + pos) DIV u;
- RETURN f.rider.SCharIndex(x, pos, s, font)
- END SCharIndex;
- PROCEDURE (f: Frame) SCharPos* (x, index: INTEGER; IN s: ARRAY OF SHORTCHAR;
- font: Fonts.Font): INTEGER, NEW;
- VAR u: INTEGER;
- BEGIN
- u := f.unit;
- x := (f.gx + x) DIV u;
- RETURN f.rider.SCharPos(x, index, s, font) * u - f.gx
- END SCharPos;
- PROCEDURE RGBColor* (red, green, blue: INTEGER): Color;
- BEGIN
- ASSERT((red >= 0) & (red < 256), 20);
- ASSERT((green >= 0) & (green < 256), 21);
- ASSERT((blue >= 0) & (blue < 256), 22);
- RETURN (blue * 65536) + (green * 256) + red
- END RGBColor;
- PROCEDURE IsPrinterPort*(p: Port): BOOLEAN;
- BEGIN
- RETURN p.printerMode
- END IsPrinterPort;
- BEGIN
- background := white; dialogBackground := white
- END Ports.
|