+
+ w_len=RES[0]*RES[1]*RES[2];
+
+ buf=(unsigned char *)malloc(w_len);
+ read(fd,buf,w_len);
+ for(k=0;k<res[2];k++) {
+ for(j=0;j<res[1];j++) {
+ for(i=0;i<res[0];i++) {
+ if(*(buf+x[0]+i+(x[1]+j)*RES[0]+(x[2]+k)*RES[0]*RES[1])!=0)
+ *(orig+i+j*RES[0]+k*RES[0]*RES[1])=1;
+ }
+ }
+ }
+ free(buf);
+ }
+
+ printf(" done\n");
+
+ return 1;
+}
+
+int write_bmp(int fd,unsigned char *orig,int *res) {
+
+ int size,i,j;
+ unsigned char buf[64];
+
+ size=res[0]*3+4-((res[0]*3)%4);
+ size*=res[1];
+ memset(buf,0,64);
+
+ /* bmpheader */
+ buf[0]='B'; /* std header start */
+ buf[1]='M';
+ buf[2]=(size+0x36)&0xff; /* file size */
+ buf[3]=(size+0x36)>>8;
+ memset(buf+4,0,6);
+ buf[10]=0x36; /* offset to data */
+ memset(buf+11,0,3);
+ buf[14]=0x28; /* length of bmp info header */
+ memset(buf+15,0,3);
+ buf[18]=res[0]&0xff; /* width and height */
+ buf[19]=res[0]>>8;
+ memset(buf+20,0,2);
+ buf[22]=res[1]&0xff;
+ buf[23]=res[1]>>8;
+ memset(buf+24,0,2);
+ buf[26]=1; /* # planes -> 1 */
+ buf[27]=0;
+ buf[28]=24; /* bits per pixel -> 2^24 (true color) */
+ buf[29]=0;
+ memset(buf+30,0,4); /* compression -> none */
+ buf[34]=size&0xff; /* data size */
+ buf[35]=size>>8;
+ memset(buf+36,0,2);
+ buf[38]=0x12; /* res: pixel/meter */
+ buf[39]=0x0b;
+ memset(buf+40,0,2);
+ buf[42]=0x12;
+ buf[43]=0x0b;
+ memset(buf+44,0,2);
+ memset(buf+46,0,8); /* no colors, no important colors */
+ /* write it */
+ write(fd,buf,54);
+
+ for(j=0;j<res[1];j++) {
+ for(i=0;i<res[0];i++) {
+ memset(buf,0,3);
+ if(*(orig+i+j*res[0])) memset(buf,0xff,3);
+ write(fd,buf,3);
+ }
+ if((res[0]*3)%4) {
+ memset(buf,0,4-((res[0]*3)%4));
+ write(fd,buf,4-((res[0]*3)%4));
+ }