mirror of
https://github.com/vishapoberon/compiler.git
synced 2026-04-06 14:32:24 +00:00
parent
262a44b56c
commit
7cdca222af
32 changed files with 0 additions and 0 deletions
|
|
@ -1,217 +0,0 @@
|
|||
MODULE Ausgabe;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
IMPORT Out := Console, XYplane := oocXYplane;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
PROCEDURE RealFix*(x: REAL; n, m: INTEGER);
|
||||
|
||||
|
||||
VAR mul: LONGINT;
|
||||
|
||||
|
||||
BEGIN
|
||||
|
||||
|
||||
IF x < 0 THEN Out.Char("-"); x := -x END;
|
||||
|
||||
|
||||
IF m > 0 THEN
|
||||
|
||||
|
||||
mul := 1;
|
||||
|
||||
|
||||
REPEAT mul := mul*10; DEC(m) UNTIL m = 0;
|
||||
|
||||
|
||||
Out.Int(ENTIER(x+(0.5/mul)), n);
|
||||
|
||||
|
||||
Out.Char(".");
|
||||
|
||||
|
||||
IF ENTIER(mul*x+0.5) MOD mul = 0 THEN
|
||||
|
||||
|
||||
REPEAT mul := mul DIV 10; Out.Char("0") UNTIL mul = 1
|
||||
|
||||
|
||||
ELSE Out.Int(ENTIER(mul*x+0.5) MOD mul, 0)
|
||||
|
||||
|
||||
END
|
||||
|
||||
|
||||
ELSE Out.Int(ENTIER(x+0.5), n)
|
||||
|
||||
|
||||
END
|
||||
|
||||
|
||||
END RealFix;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
PROCEDURE Line*(X0, Y0, X1, Y1, mode: INTEGER);
|
||||
|
||||
|
||||
(* Draws a line from (X0, Y0) to (X1, Y1) inclusive. For all line points (x, y) the following holds
|
||||
|
||||
|
||||
always: (min(X0, X1) <= x) & (x <= max(X0, X1) & (min(Y0, Y0) <= y) & (y <= max(Y0, Y1). *)
|
||||
|
||||
|
||||
VAR x, y, dx, dy, d, inc, L, B, R, T, Xmin, Xmax, Ymin, Ymax: INTEGER;
|
||||
|
||||
|
||||
BEGIN
|
||||
|
||||
|
||||
L := XYplane.X; B := XYplane.Y; R := XYplane.X + XYplane.W; T := XYplane.Y + XYplane.H;
|
||||
|
||||
|
||||
IF X0 < X1 THEN Xmin := X0; Xmax := X1 ELSE Xmin := X1; Xmax := X0 END;
|
||||
|
||||
|
||||
IF Y0 < Y1 THEN Ymin := Y0; Ymax := Y1 ELSE Ymin := Y1; Ymax := Y0 END;
|
||||
|
||||
|
||||
IF (L <= Xmax) & (Xmin < R) & (B <= Ymax) & (Ymin < T) THEN (* line may be visible *)
|
||||
|
||||
|
||||
IF Xmin = Xmax THEN FOR y := Ymin TO Ymax DO XYplane.Dot(Xmin, y, mode) END
|
||||
|
||||
|
||||
ELSIF Ymin = Ymax THEN FOR x := Xmin TO Xmax DO XYplane.Dot(x, Ymin, mode) END
|
||||
|
||||
|
||||
ELSE
|
||||
|
||||
|
||||
IF (Y1-Y0) < (X0-X1) THEN x := X0; X0 := X1; X1 := x; y := Y0; Y0 := Y1; Y1 := y END;
|
||||
|
||||
|
||||
dx := 2*(X1-X0); dy := 2*(Y1-Y0); x := X0; y := Y0; inc := 1;
|
||||
|
||||
|
||||
IF (L <= Xmin) & (Xmax < R) & (B <= Ymin) & (Ymax < T) THEN (* no clipping *)
|
||||
|
||||
|
||||
IF dy > dx THEN d := dy DIV 2;
|
||||
|
||||
|
||||
IF dx < 0 THEN inc := -1; dx := -dx END;
|
||||
|
||||
|
||||
WHILE y <= Y1 DO
|
||||
|
||||
|
||||
XYplane.Dot(x, y, mode);
|
||||
|
||||
|
||||
INC(y); DEC(d, dx);
|
||||
|
||||
|
||||
IF d < 0 THEN INC(d, dy); INC(x, inc) END
|
||||
|
||||
|
||||
END
|
||||
|
||||
|
||||
ELSE d := dx DIV 2;
|
||||
|
||||
|
||||
IF dy < 0 THEN inc := -1; dy := -dy END;
|
||||
|
||||
|
||||
WHILE x <= X1 DO
|
||||
|
||||
|
||||
XYplane.Dot(x, y, mode);
|
||||
|
||||
|
||||
INC(x); DEC(d, dy);
|
||||
|
||||
|
||||
IF d < 0 THEN INC(d, dx); INC(y, inc) END
|
||||
|
||||
|
||||
END
|
||||
|
||||
|
||||
END
|
||||
|
||||
|
||||
ELSE (* dot-wise clipping *)
|
||||
|
||||
|
||||
IF dy > dx THEN d := dy DIV 2;
|
||||
|
||||
|
||||
IF dx < 0 THEN inc := -1; dx := -dx END;
|
||||
|
||||
|
||||
WHILE y <= Y1 DO
|
||||
|
||||
|
||||
IF (L <= x) & (x < R) & (B <= y) & (y < T) THEN XYplane.Dot(x, y, mode) END;
|
||||
|
||||
|
||||
INC(y); DEC(d, dx);
|
||||
|
||||
|
||||
IF d < 0 THEN INC(d, dy); INC(x, inc) END
|
||||
|
||||
|
||||
END
|
||||
|
||||
|
||||
ELSE d := dx DIV 2;
|
||||
|
||||
|
||||
IF dy < 0 THEN inc := -1; dy := -dy END;
|
||||
|
||||
|
||||
WHILE x <= X1 DO
|
||||
|
||||
|
||||
IF (L <= x) & (x < R) & (B <= y) & (y < T) THEN XYplane.Dot(x, y, mode) END;
|
||||
|
||||
|
||||
INC(x); DEC(d, dy);
|
||||
|
||||
|
||||
IF d < 0 THEN INC(d, dx); INC(y, inc) END
|
||||
|
||||
|
||||
END
|
||||
|
||||
|
||||
END
|
||||
|
||||
|
||||
END
|
||||
|
||||
|
||||
END
|
||||
|
||||
|
||||
END
|
||||
|
||||
|
||||
END Line;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
END Ausgabe.
|
||||
Loading…
Add table
Add a link
Reference in a new issue