xref: /inferno-os/libdraw/line.c (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1*37da2899SCharles.Forsyth #include "lib9.h"
2*37da2899SCharles.Forsyth #include "draw.h"
3*37da2899SCharles.Forsyth 
4*37da2899SCharles.Forsyth void
line(Image * dst,Point p0,Point p1,int end0,int end1,int radius,Image * src,Point sp)5*37da2899SCharles.Forsyth line(Image *dst, Point p0, Point p1, int end0, int end1, int radius, Image *src, Point sp)
6*37da2899SCharles.Forsyth {
7*37da2899SCharles.Forsyth 	lineop(dst, p0, p1, end0, end1, radius, src, sp, SoverD);
8*37da2899SCharles.Forsyth }
9*37da2899SCharles.Forsyth 
10*37da2899SCharles.Forsyth void
lineop(Image * dst,Point p0,Point p1,int end0,int end1,int radius,Image * src,Point sp,Drawop op)11*37da2899SCharles.Forsyth lineop(Image *dst, Point p0, Point p1, int end0, int end1, int radius, Image *src, Point sp, Drawop op)
12*37da2899SCharles.Forsyth {
13*37da2899SCharles.Forsyth 	uchar *a;
14*37da2899SCharles.Forsyth 
15*37da2899SCharles.Forsyth 	_setdrawop(dst->display, op);
16*37da2899SCharles.Forsyth 
17*37da2899SCharles.Forsyth 	a = bufimage(dst->display, 1+4+2*4+2*4+4+4+4+4+2*4);
18*37da2899SCharles.Forsyth 	if(a == 0){
19*37da2899SCharles.Forsyth 		_drawprint(2, "image line: %r\n");
20*37da2899SCharles.Forsyth 		return;
21*37da2899SCharles.Forsyth 	}
22*37da2899SCharles.Forsyth 	a[0] = 'L';
23*37da2899SCharles.Forsyth 	BPLONG(a+1, dst->id);
24*37da2899SCharles.Forsyth 	BPLONG(a+5, p0.x);
25*37da2899SCharles.Forsyth 	BPLONG(a+9, p0.y);
26*37da2899SCharles.Forsyth 	BPLONG(a+13, p1.x);
27*37da2899SCharles.Forsyth 	BPLONG(a+17, p1.y);
28*37da2899SCharles.Forsyth 	BPLONG(a+21, end0);
29*37da2899SCharles.Forsyth 	BPLONG(a+25, end1);
30*37da2899SCharles.Forsyth 	BPLONG(a+29, radius);
31*37da2899SCharles.Forsyth 	BPLONG(a+33, src->id);
32*37da2899SCharles.Forsyth 	BPLONG(a+37, sp.x);
33*37da2899SCharles.Forsyth 	BPLONG(a+41, sp.y);
34*37da2899SCharles.Forsyth }
35