plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

img.c (1150B)


      1 #include <u.h>
      2 #include <libc.h>
      3 #include <draw.h>
      4 #include <event.h>
      5 
      6 void
      7 usage(void)
      8 {
      9 	fprint(2, "usage: img [-W winsize] [file]\n");
     10 	exits("usage");
     11 }
     12 
     13 Image *image;
     14 
     15 void
     16 eresized(int new)
     17 {
     18 	if(new && getwindow(display, Refnone) < 0)
     19 		sysfatal("can't reattach to window: %r");
     20 
     21 	draw(screen, screen->r, display->white, nil, ZP);
     22 	drawop(screen, screen->r, image, nil, image->r.min, S);
     23 	flushimage(display, 1);
     24 }
     25 
     26 void
     27 main(int argc, char **argv)
     28 {
     29 	int fd;
     30 	char *label;
     31 	Event e;
     32 
     33 	ARGBEGIN{
     34 	case 'W':
     35 		winsize = EARGF(usage());
     36 		break;
     37 	default:
     38 		usage();
     39 	}ARGEND
     40 
     41 	if(argc > 1)
     42 		usage();
     43 
     44 	if(argc == 1){
     45 		if((fd = open(argv[0], OREAD)) < 0)
     46 			sysfatal("open %s: %r");
     47 		label = argv[0];
     48 	}else{
     49 		fd = 0;
     50 		label = nil;
     51 	}
     52 
     53 	if(initdraw(0, nil, label) < 0)
     54 		sysfatal("initdraw: %r");
     55 
     56 	if((image=readimage(display, fd, 0)) == nil)
     57 		sysfatal("readimage: %r");
     58 
     59 	if(winsize == nil)
     60 		drawresizewindow(Rect(0,0,Dx(image->r),Dy(image->r)));
     61 
     62 	einit(Emouse|Ekeyboard);
     63 	eresized(0);
     64 	for(;;){
     65 		switch(event(&e)){
     66 		case Ekeyboard:
     67 			if(e.kbdc == 'q' || e.kbdc == 0x7F)
     68 				exits(nil);
     69 			break;
     70 		case Emouse:
     71 			break;
     72 		}
     73 	}
     74 }