added 2 newview modes: c conc & a pressure
[physik/nlsop.git] / dfbapi.c
index eb74fa3..3dfecda 100644 (file)
--- a/dfbapi.c
+++ b/dfbapi.c
 
 /* two dimensional lattice */
 
-int d2_lattice_init(int *argc,char **argv,d2_lattice *d2_l,int x,int y)
+int d2_lattice_init(int *argc,char **argv,d2_lattice *d2_l)
 {
  DFBSurfaceDescription surface_dsc;
  DFBFontDescription font_dsc;
  
- d2_l->max_x=x;
- d2_l->max_y=y;
-
  DirectFBInit(argc,&argv);
  DirectFBCreate(&(d2_l->dfb));
  d2_l->dfb->SetCooperativeLevel(d2_l->dfb,DFSCL_FULLSCREEN);
@@ -48,15 +45,11 @@ int d2_lattice_init(int *argc,char **argv,d2_lattice *d2_l,int x,int y)
  } else return 1;
 }
 
-int d3_lattice_init(int *argc,char **argv,d3_lattice *d3_l,int x,int y,int z)
+int d3_lattice_init(int *argc,char **argv,d3_lattice *d3_l)
 {
  DFBSurfaceDescription surface_dsc;
  DFBFontDescription font_dsc;
  
- d3_l->max_x=x;
- d3_l->max_y=y;
- d3_l->max_z=z;
-
  DirectFBInit(argc,&argv);
  DirectFBCreate(&(d3_l->dfb));
  d3_l->dfb->SetCooperativeLevel(d3_l->dfb,DFSCL_FULLSCREEN);
@@ -100,28 +93,40 @@ int d3_lattice_release(d3_lattice *d3_l)
  return 1;
 }
 
-int dx_lattice_get_color(unsigned char *status,unsigned char *r,unsigned char *g,unsigned char *b)
+int dx_lattice_get_color(unsigned char *status,unsigned char *r,unsigned char *g,unsigned char *b,unsigned char mode)
 {
- if((*status)&RED)
+ *g=0;
+ if(!mode)
+ {
+  if((*status)&RED)
+  {
+   *r=0xff;
+   *b=0;
+  } else
+  {
+   *r=0;
+   *b=0xff;
+  }
+ } else if(mode==1)
  {
-  *r=0xff;
-  *g=0;
-  *b=0;
- } else
+  *r=*status;
+  *g=*status;
+  *b=0xff;
+ } else if(mode==2)
  {
-  *r=0;
-  *g=0;
+  *r=*status;
   *b=0xff;
  }
  
  return 1;
 }
 
-int d2_lattice_draw(d2_lattice *d2_l,int x,int y,int arg_c,char **arg_v)
+int d2_lattice_draw(d2_lattice *d2_l,int x,int y,int arg_c,char **arg_v,unsigned char mode)
 {
  int x_c,y_c;
  int i;
  unsigned char r,g,b,a;
+ unsigned char foobar;
 
  a=0xff; /* no alpha blending */
  
@@ -129,7 +134,17 @@ int d2_lattice_draw(d2_lattice *d2_l,int x,int y,int arg_c,char **arg_v)
  {
   for(y_c=0;y_c<d2_l->max_y;y_c++)
   {
-   dx_lattice_get_color((*d2_l).status+x_c+y_c*d2_l->max_x,&r,&g,&b);
+   if(!mode) dx_lattice_get_color((*d2_l).status+x_c+y_c*d2_l->max_x,&r,&g,&b,mode);
+   if(mode==1)
+   {
+    foobar=(unsigned char)(*(d2_l->extra+x_c+y_c*d2_l->max_x)*255/MAX_EXTRA);
+    dx_lattice_get_color(&foobar,&r,&g,&b,mode);
+   }
+   if(mode==2)
+   {
+    foobar=(*(unsigned char *)(d2_l->v_ptr+x_c+y_c*d2_l->max_x));
+    dx_lattice_get_color(&foobar,&r,&g,&b,mode);
+   }
    if(x_c==x && y_c==y)
    {
     r=0xff;
@@ -169,10 +184,11 @@ int d2_lattice_draw(d2_lattice *d2_l,int x,int y,int arg_c,char **arg_v)
  return 1;
 }
 
-int d3_lattice_draw(d3_lattice *d3_l,int x,int y,int z,int arg_c,char **arg_v)  
+int d3_lattice_draw(d3_lattice *d3_l,int x,int y,int z,int arg_c,char **arg_v,unsigned char mode)
 {
  int x_c,y_c,z_c;
  int i;
+ unsigned char foobar;
  unsigned char r,g,b,a;
 
  a=0xff; /* no alpha blending */
@@ -182,7 +198,17 @@ int d3_lattice_draw(d3_lattice *d3_l,int x,int y,int z,int arg_c,char **arg_v)
  {
   for(z_c=0;z_c<d3_l->max_z;z_c++)
   {
-   dx_lattice_get_color((*d3_l).status+x_c+y_c*d3_l->max_x+z_c*d3_l->max_x*d3_l->max_y,&r,&g,&b);
+   if(!mode) dx_lattice_get_color((*d3_l).status+x_c+y_c*d3_l->max_x+z_c*d3_l->max_x*d3_l->max_y,&r,&g,&b,mode);
+   if(mode==1)
+   {
+    foobar=(unsigned char)(*(d3_l->extra+x_c+y_c*d3_l->max_x+z_c*d3_l->max_x*d3_l->max_y)*255/MAX_EXTRA);
+    dx_lattice_get_color(&foobar,&r,&g,&b,mode);
+   }
+   if(mode==2)
+   {
+    foobar=(*(unsigned char *)(d3_l->v_ptr+x_c+y_c*d3_l->max_x+z_c*d3_l->max_x*d3_l->max_y));
+    dx_lattice_get_color(&foobar,&r,&g,&b,mode);
+   }
    if(x_c==x && z_c==z)
    {
     r=0xff;
@@ -202,7 +228,17 @@ int d3_lattice_draw(d3_lattice *d3_l,int x,int y,int z,int arg_c,char **arg_v)
  {
   for(z_c=0;z_c<d3_l->max_z;z_c++)
   {
-   dx_lattice_get_color((*d3_l).status+x_c+y_c*d3_l->max_x+z_c*d3_l->max_x*d3_l->max_y,&r,&g,&b);
+   if(!mode) dx_lattice_get_color((*d3_l).status+x_c+y_c*d3_l->max_x+z_c*d3_l->max_x*d3_l->max_y,&r,&g,&b,mode);
+   if(mode==1)
+   {
+    foobar=(unsigned char)(*(d3_l->extra+x_c+y_c*d3_l->max_x+z_c*d3_l->max_x*d3_l->max_y)*255/MAX_EXTRA);
+    dx_lattice_get_color(&foobar,&r,&g,&b,mode);
+   }
+   if(mode==2)
+   {
+    foobar=(*(unsigned char *)(d3_l->v_ptr+x_c+y_c*d3_l->max_x+z_c*d3_l->max_x*d3_l->max_y));
+    dx_lattice_get_color(&foobar,&r,&g,&b,mode);
+   }
    if(y_c==y && z_c==z)
    {
     r=0xff;
@@ -222,7 +258,17 @@ int d3_lattice_draw(d3_lattice *d3_l,int x,int y,int z,int arg_c,char **arg_v)
  {
   for(y_c=0;y_c<d3_l->max_y;y_c++)
   {
-   dx_lattice_get_color((*d3_l).status+x_c+y_c*d3_l->max_x+z_c*d3_l->max_x*d3_l->max_y,&r,&g,&b);
+   if(!mode) dx_lattice_get_color((*d3_l).status+x_c+y_c*d3_l->max_x+z_c*d3_l->max_x*d3_l->max_y,&r,&g,&b,mode);
+   if(mode==1)
+   {
+    foobar=(unsigned char)(*(d3_l->extra+x_c+y_c*d3_l->max_x+z_c*d3_l->max_x*d3_l->max_y)*255/MAX_EXTRA);
+    dx_lattice_get_color(&foobar,&r,&g,&b,mode);
+   }
+   if(mode==2)
+   {
+    foobar=(*(unsigned char *)(d3_l->v_ptr+x_c+y_c*d3_l->max_x+z_c*d3_l->max_x*d3_l->max_y));
+    dx_lattice_get_color(&foobar,&r,&g,&b,mode);
+   }
    if(x_c==x && y_c==y)
    {
     r=0xff;
@@ -294,7 +340,7 @@ int d3_event_init(d3_lattice *d3_l)
  return 1;                                                           
 }         
 
-int scan_event(d3_lattice *d3_l,int *x,int *y,int *z,int *q,int *esc)
+int scan_event(d3_lattice *d3_l,int *x,int *y,int *z,int *q,int *esc,int *switchmode)
 {
  DFBInputEvent ke;
 
@@ -310,6 +356,7 @@ int scan_event(d3_lattice *d3_l,int *x,int *y,int *z,int *q,int *esc)
   if(ke.key_id==DIKI_PAGE_DOWN && *z!=d3_l->max_z-1) *z+=1;
   if(ke.key_id==DIKI_Q) *q=1;
   if(ke.key_id==DIKI_ESCAPE) *esc=1;
+  if(ke.key_id==DIKI_M) *switchmode=(*switchmode+1)%3;
  }
 
  return 1;