9 int line, bpp, x, y, dx, dy;
19 sysfatal("can't handle channel type %s", chantostr(buf, chan));
34 if((w = allocmemimage(m->r, GREY8)) == nil)
35 sysfatal("allocmemimage: %r");
36 memimagedraw(w, w->r, m, m->r.min, nil, ZP, S);
44 if((w = allocmemimage(Rect(m->r.min.x, m->r.min.y,
45 m->r.min.x+dy, m->r.min.y+dx), m->chan)) == nil)
46 sysfatal("allocmemimage: %r");
47 line = w->width*sizeof(ulong);
49 s = byteaddr(m, addpt(m->r.min, Pt(0, y)));
50 d = byteaddr(w, addpt(w->r.min, Pt(dy-y-1, 0)));
68 if((m = allocmemimage(w->r, chan)) == nil)
69 sysfatal("allocmemimage: %r");
70 memimagedraw(m, m->r, w, w->r.min, nil, ZP, S);
78 upsidedown(Memimage *m)
84 w = m->width * sizeof(ulong);
85 if((t = malloc(w)) == nil)
86 sysfatal("malloc: %r");
87 for(y=0; y<dy/2; y++){
88 s = byteaddr(m, addpt(m->r.min, Pt(0, y)));
89 d = byteaddr(m, addpt(m->r.min, Pt(0, dy-y-1)));
101 fprint(2, "usage: %s [ -r degree ] [ -u | -l ] [ file ]\n", argv0);
106 main(int argc, char *argv[])
123 r = atoi(EARGF(usage()));
129 fd = open(*argv, OREAD);
131 sysfatal("open: %r");
134 if((m = readmemimage(fd)) == nil)
135 sysfatal("readmemimage: %r");
136 if(f == 'u' || f == 'l'){
150 if(writememimage(1, m) < 0)
151 sysfatal("writememimage: %r");