-
[physik/nlsop.git] / nlsop.c
diff --git a/nlsop.c b/nlsop.c
index ff89e7c..edbc860 100644 (file)
--- a/nlsop.c
+++ b/nlsop.c
@@ -307,7 +307,7 @@ int calc_max_extra(d3_lattice *d3_l)
 
 int write_bmp(d3_lattice *d3_l,int window,u32 x,u32 y,u32 z)
 {
- int fd,i,j,size=0;
+ int fd,i,j,size=0,foo=0;
  int width=0,height=0;
  char bmpfile[MAX_CHARS];
  char buf[128];
@@ -315,23 +315,26 @@ int write_bmp(d3_lattice *d3_l,int window,u32 x,u32 y,u32 z)
  if(window==1)
  {
   sprintf(bmpfile,"x-z_%d.bmp",y);
-  size=x*z;
-  width=x;
-  height=z;
+  foo=3*d3_l->max_x;
+  size=(foo+(4-foo%4))*d3_l->max_z;
+  width=d3_l->max_x;
+  height=d3_l->max_z;
  }
  if(window==2)
  {
   sprintf(bmpfile,"y-z_%d.bmp",x);
-  size=y*z;
-  width=y;
-  height=z;
+  foo=3*d3_l->max_y;
+  size=(foo+(4-foo%4))*d3_l->max_z;
+  width=d3_l->max_y;
+  height=d3_l->max_z;
  }
  if(window==3)
  {
   sprintf(bmpfile,"x-y_%d.bmp",z);
-  size=x*y;
-  width=x;
-  height=y;
+  foo=3*d3_l->max_x;
+  size=(foo+(4-foo%4))*d3_l->max_y;
+  width=d3_l->max_x;
+  height=d3_l->max_y;
  }
 
  if((fd=open(bmpfile,O_WRONLY|O_CREAT))<0)
@@ -379,11 +382,11 @@ int write_bmp(d3_lattice *d3_l,int window,u32 x,u32 y,u32 z)
  }
  if(window==1)
  {
-  for(i=0;i<d3_l->max_x;i++)
+  for(j=0;j<d3_l->max_z;j++)
   {
-   for(j=0;j<d3_l->max_z;j++)
+   for(i=0;i<d3_l->max_x;i++)
    {
-    if(*(d3_l->status+i+y*d3_l->max_x+j*d3_l->max_x*d3_l->max_y)&RED) memset(buf,0xff,3);
+    if(*(d3_l->status+i+y*d3_l->max_x+(d3_l->max_z-j-1)*d3_l->max_x*d3_l->max_y)&RED) memset(buf,0xff,3);
     else memset(buf,0,3);
     if(write(fd,buf,3)<3)
     {
@@ -391,15 +394,24 @@ int write_bmp(d3_lattice *d3_l,int window,u32 x,u32 y,u32 z)
      return-1;
     }
    }
+   if(foo%4)
+   {
+    memset(buf,0,4-foo%4);
+    if(write(fd,buf,4-foo%4)<4-foo%4)
+    {
+     puts("failed writing 4 byte ending");
+     return -1;
+    }
+   } 
   }
  }
  if(window==2)
  {
-  for(i=0;i<d3_l->max_y;i++)
+  for(j=0;j<d3_l->max_z;j++)
   {
-   for(j=0;j<d3_l->max_z;j++)
+   for(i=0;i<d3_l->max_y;i++)
    {
-    if(*(d3_l->status+x+i*d3_l->max_x+j*d3_l->max_x*d3_l->max_y)&RED) memset(buf,0xff,3);
+    if(*(d3_l->status+x+i*d3_l->max_x+(d3_l->max_z-j-1)*d3_l->max_x*d3_l->max_y)&RED) memset(buf,0xff,3);
     else memset(buf,0,3);
     if(write(fd,buf,3)<3)
     {
@@ -407,15 +419,24 @@ int write_bmp(d3_lattice *d3_l,int window,u32 x,u32 y,u32 z)
      return-1;
     }
    }
+   if(foo%4)
+   {
+    memset(buf,0,4-foo%4);
+    if(write(fd,buf,4-foo%4)<4-foo%4)
+    {
+     puts("failed writing 4 byte ending");
+     return -1;
+    }
+   }
   }
  }
  if(window==3)
  {
-  for(i=0;i<d3_l->max_x;i++)
+  for(j=0;j<d3_l->max_y;j++)
   {
-   for(j=0;j<d3_l->max_y;j++)
+   for(i=0;i<d3_l->max_x;i++)
    {
-    if(*(d3_l->status+i+j*d3_l->max_x+z*d3_l->max_x*d3_l->max_y)&RED) memset(buf,0xff,3);
+    if(*(d3_l->status+i+(d3_l->max_y-j-1)*d3_l->max_x+z*d3_l->max_x*d3_l->max_y)&RED) memset(buf,0xff,3);
     else memset(buf,0,3);
     if(write(fd,buf,3)<3)
     {
@@ -423,6 +444,15 @@ int write_bmp(d3_lattice *d3_l,int window,u32 x,u32 y,u32 z)
      return -1;
     }
    }
+   if(foo%4)
+   {
+    memset(buf,0,4-foo%4);
+    if(write(fd,buf,4-foo%4)<4-foo%4)
+    {
+     puts("failed writing 4 byte ending");
+     return -1;
+    }
+   }
   }
  }
  close(fd);