PROC std circle (INT CONST xp,yp,r,from,to):
moveto (xp,yp);
REAL VAR ang :: real (from MOD 360),
rad :: real(r),
max :: endwinkel,
cx :: real (xp),
cy :: real (yp),
ax0 :: cx,
ay0 :: cy,
ax1, ay1;
BOOL VAR fullcircle :: ang = 0.0 AND max = 360.0;
IF fullcircle
THEN move to (int (cx + rad * cosd (ang)+0.5),
int (cy + rad * -sind (ang)+0.5));
ang INCR 1.0
FI;
WHILE ang <= max REP
ax1 := cx + rad * cosd (ang);
ay1 := cy + rad * -sind (ang);
draw arc;
ang INCR 1.0
PER;
IF NOT fullcircle
THEN ax0 := cx;
ay0 := cy;
draw arc;
draw to (xp,yp)
ELSE move to (xp,yp)
FI.
draw arc:
IF clipped line (ax0,ay0,ax1,ay1)
THEN draw to (int (ax1+0.5), int (ay1+0.5))
FI;
ax0 := ax1;
ay0 := ay1.
endwinkel:
IF (to MOD 360) = 0
THEN 360.0
ELSE real (to MOD 360)
FI
END PROC std circle;
PROC std box (INT CONST x0, y0, x1, y1, pattern):
REAL VAR xx0 :: real (x0),
yy0 :: real (y0),
xx1 :: real (x0),
yy1 :: real (y1);
IF clipped line (xx0,yy0,xx1,yy1)
THEN moveto (int (xx0), int (yy0));
drawto (int (xx1), int (yy1))
FI;
xx0 := real (x0);
yy0 := real (y1);
xx1 := real (x1);
yy1 := real (y1);
IF clipped line (xx0,yy0,xx1,yy1)
THEN moveto (int (xx0), int (yy0));
drawto (int (xx1), int (yy1))
FI;
xx0 := real (x1);
yy0 := real (y1);
xx1 := real (x1);
yy1 := real (y0);
IF clipped line (xx0,yy0,xx1,yy1)
THEN moveto (int (xx0), int (yy0));
drawto (int (xx1), int (yy1))
FI;
xx0 := real (x1);
yy0 := real (y0);
xx1 := real (x0);
yy1 := real (y0);
IF clipped line (xx0,yy0,xx1,yy1)
THEN moveto (int (xx0), int (yy0));
drawto (int (xx1), int (yy1))
FI
END PROC std box;