8 u32int pal[256], bg = 0x00ffff;
11 #define abs(x) ((x) < 0 ? -(x) : (x))
16 if(Bwrite(bp, &v, sizeof v) != sizeof v)
17 sysfatal("put8: short write");
41 Δ = abs((char)v - (char)*pal)
42 + abs((char)(v >> 8) - (char)(*pal >> 8))
43 + abs((char)(v >> 16) - (char)(*pal >> 16));
44 for(p=pal; p<pal+nelem(pal); p++){
45 Δ´ = abs((char)v - (char)*p)
46 + abs((char)(v >> 8) - (char)(*p >> 8))
47 + abs((char)(v >> 16) - (char)(*p >> 16));
62 uchar *np, *b, *buf, *p, *pp;
69 sysfatal("topic: invalid pic height");
72 put16(wofs ? dx / 2 - 1 : i->r.min.x);
73 put16(wofs ? dy - 5 : i->r.min.y);
76 buf = mallocz((5 * dy / 2 + 5) * dx, 1);
78 sysfatal("mallocz: %r");
79 for(w=dx, b=buf; w>0; w--, p+=3){
80 put32(b - buf + 8 + dx * 4);
81 for(h=0, np=b+1, pp=p; h<dy; h++, pp+=dx*3){
82 v = pp[2] << 16 | pp[1] << 8 | pp[0];
104 Bwrite(bp, buf, b - buf);
114 if(Dx(i->r) != 64 || Dy(i->r) != 64)
115 sysfatal("toflat: invalid flatpic dimensions");
119 put8(pali(p[2] << 16 | p[1] << 8 | p[0]));
131 if((ni = allocmemimage(i->r, RGB24)) == nil)
132 sysfatal("allocmemimage: %r");
133 memimagedraw(ni, ni->r, i, i->r.min, nil, i->r.min, S);
145 if((bp = Bopen(f, OREAD)) == nil)
146 sysfatal("getpal: %r");
147 for(p=pal; p<pal+nelem(pal); p++){
148 if(Bread(bp, u, 3) != 3)
149 sysfatal("getpal: short read: %r");
150 *p = u[0]<<16 | u[1]<<8 | u[2];
158 fprint(2, "usage: %s [-fw] [-b bgcol] [-p palette] [image]\n", argv0);
163 main(int argc, char **argv)
171 p = "/mnt/wad/playpal";
173 case 'b': bg = strtoul(EARGF(usage()), nil, 0); break;
174 case 'f': flat = 1; break;
175 case 'p': p = EARGF(usage()); break;
176 case 'w': wofs = 1; break;
180 if((fd = open(*argv, OREAD)) < 0)
181 sysfatal("open: %r");
183 if((bp = Bfdopen(1, OWRITE)) == nil)
184 sysfatal("Bfdopen: %r");
186 if((i = readmemimage(fd)) == nil)
187 sysfatal("readmemimage: %r");
188 (flat ? toflat : topic)(iconv(i));