xref: /inferno-os/utils/cvbit/cvbit.c (revision 0e96539ff7cff23233d3f0a64bb285b385a3a1f4)
1*0e96539fSCharles.Forsyth #include <u.h>
2*0e96539fSCharles.Forsyth #include <libc.h>
3*0e96539fSCharles.Forsyth #include <draw.h>
4*0e96539fSCharles.Forsyth #include <memdraw.h>
5*0e96539fSCharles.Forsyth #include <pool.h>
6*0e96539fSCharles.Forsyth 
7*0e96539fSCharles.Forsyth static int invert = 0;
8*0e96539fSCharles.Forsyth 
9*0e96539fSCharles.Forsyth void
main(int argc,char ** argv)10*0e96539fSCharles.Forsyth main(int argc, char **argv)
11*0e96539fSCharles.Forsyth {
12*0e96539fSCharles.Forsyth 	Memimage *im, *om;
13*0e96539fSCharles.Forsyth 	char *s;
14*0e96539fSCharles.Forsyth 	ulong ofmt;
15*0e96539fSCharles.Forsyth 
16*0e96539fSCharles.Forsyth 	ofmt = 0;
17*0e96539fSCharles.Forsyth 	ARGBEGIN{
18*0e96539fSCharles.Forsyth 	case 'i':
19*0e96539fSCharles.Forsyth 		invert = 1;
20*0e96539fSCharles.Forsyth 		break;
21*0e96539fSCharles.Forsyth 	case 'c':
22*0e96539fSCharles.Forsyth 		s = ARGF();
23*0e96539fSCharles.Forsyth 		if(s==nil)
24*0e96539fSCharles.Forsyth 			break;
25*0e96539fSCharles.Forsyth 		ofmt = strtochan(s);
26*0e96539fSCharles.Forsyth 		if(ofmt == 0){
27*0e96539fSCharles.Forsyth 			fprint(2, "cvbit: bad chan: %s\n", s);
28*0e96539fSCharles.Forsyth 			exits("chan");
29*0e96539fSCharles.Forsyth 		}
30*0e96539fSCharles.Forsyth 		break;
31*0e96539fSCharles.Forsyth 	}ARGEND
32*0e96539fSCharles.Forsyth 
33*0e96539fSCharles.Forsyth 	memimageinit();
34*0e96539fSCharles.Forsyth 	im = readmemimage(0);
35*0e96539fSCharles.Forsyth 	if(im == nil){
36*0e96539fSCharles.Forsyth 		fprint(2, "cvbit: can't read image: %r\n");
37*0e96539fSCharles.Forsyth 		exits("read");
38*0e96539fSCharles.Forsyth 	}
39*0e96539fSCharles.Forsyth 	if(ofmt){
40*0e96539fSCharles.Forsyth 		om = allocmemimage(im->r, ofmt);
41*0e96539fSCharles.Forsyth 		if(om == nil){
42*0e96539fSCharles.Forsyth 			fprint(2, "cvbit: can't allocate new image: %r\n");
43*0e96539fSCharles.Forsyth 			exits("alloc");
44*0e96539fSCharles.Forsyth 		}
45*0e96539fSCharles.Forsyth 		memimagedraw(om, om->r, im, im->r.min, nil, ZP, S);
46*0e96539fSCharles.Forsyth 	}else
47*0e96539fSCharles.Forsyth 		om = im;
48*0e96539fSCharles.Forsyth 	if(invert){
49*0e96539fSCharles.Forsyth 		uchar *buf;
50*0e96539fSCharles.Forsyth 		int bpl, y, x;
51*0e96539fSCharles.Forsyth 
52*0e96539fSCharles.Forsyth 		bpl = bytesperline(om->r, om->depth);
53*0e96539fSCharles.Forsyth 		buf = malloc(bpl);
54*0e96539fSCharles.Forsyth 		for(y=om->r.min.y; y<om->r.max.y; y++){
55*0e96539fSCharles.Forsyth 			if(unloadmemimage(om, Rpt(Pt(om->r.min.x,y), Pt(om->r.max.x,y+1)), buf, bpl) != bpl){
56*0e96539fSCharles.Forsyth 				fprint(2, "cvbit: can't unload image line\n");
57*0e96539fSCharles.Forsyth 				exits("unload");
58*0e96539fSCharles.Forsyth 			}
59*0e96539fSCharles.Forsyth 			for(x=0; x<bpl; x++)
60*0e96539fSCharles.Forsyth 				buf[x] ^= 0xFF;
61*0e96539fSCharles.Forsyth 			if(loadmemimage(om, Rpt(Pt(om->r.min.x,y), Pt(om->r.max.x,y+1)), buf, bpl) != bpl){
62*0e96539fSCharles.Forsyth 				fprint(2, "cvbit: can't load image line\n");
63*0e96539fSCharles.Forsyth 				exits("load");
64*0e96539fSCharles.Forsyth 			}
65*0e96539fSCharles.Forsyth 		}
66*0e96539fSCharles.Forsyth 	}
67*0e96539fSCharles.Forsyth 	if(writememimage(1, om) < 0){
68*0e96539fSCharles.Forsyth 		fprint(2, "cvbit: can't write image: %r\n");
69*0e96539fSCharles.Forsyth 		exits("write");
70*0e96539fSCharles.Forsyth 	}
71*0e96539fSCharles.Forsyth 	exits(nil);
72*0e96539fSCharles.Forsyth }
73*0e96539fSCharles.Forsyth 
74*0e96539fSCharles.Forsyth char*
poolname(Pool * p)75*0e96539fSCharles.Forsyth poolname(Pool *p)
76*0e96539fSCharles.Forsyth {
77*0e96539fSCharles.Forsyth 	USED(p);
78*0e96539fSCharles.Forsyth 	return "none";
79*0e96539fSCharles.Forsyth }
80*0e96539fSCharles.Forsyth 
81*0e96539fSCharles.Forsyth void
poolsetcompact(Pool * p,void (* f)(void *,void *))82*0e96539fSCharles.Forsyth poolsetcompact(Pool *p, void (*f)(void*, void*))
83*0e96539fSCharles.Forsyth {
84*0e96539fSCharles.Forsyth 	USED(p);
85*0e96539fSCharles.Forsyth 	USED(f);
86*0e96539fSCharles.Forsyth }
87