X-Git-Url: https://hackdaworld.org/gitweb/?p=physik%2Fnlsop.git;a=blobdiff_plain;f=dfbapi.c;h=b922cc4d7febf045bd40b335d2c2db6199e7fd33;hp=138f7e44bfaa7bdcf983ba50081af874652a3f5a;hb=HEAD;hpb=cae1c91bf6b8d41d5a436f48f6e18514eeedbfb9 diff --git a/dfbapi.c b/dfbapi.c index 138f7e4..b922cc4 100644 --- a/dfbapi.c +++ b/dfbapi.c @@ -11,14 +11,11 @@ /* 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); @@ -29,7 +26,7 @@ int d2_lattice_init(int *argc,char **argv,d2_lattice *d2_l,int x,int y) d2_l->p_surface->GetSize(d2_l->p_surface,&(d2_l->s_width),&(d2_l->s_height)); font_dsc.flags=DFDESC_HEIGHT; - font_dsc.height=d2_l->s_height/40; /* 40 ? */ + font_dsc.height=d2_l->s_height/60; /* 60 ? */ d2_l->font_h=font_dsc.height; d2_l->dfb->CreateFont(d2_l->dfb,FONT,&font_dsc,&(d2_l->font)); d2_l->p_surface->SetFont(d2_l->p_surface,d2_l->font); @@ -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); @@ -72,12 +65,13 @@ int d3_lattice_init(int *argc,char **argv,d3_lattice *d3_l,int x,int y,int z) d3_l->dfb->CreateFont(d3_l->dfb,FONT,&font_dsc,&(d3_l->font)); d3_l->p_surface->SetFont(d3_l->p_surface,d3_l->font); - d3_l->fakt_y=(d3_l->s_height-(3*Y_GAP))/(d3_l->max_z+d3_l->max_y); - d3_l->fakt_x=(d3_l->s_width-(3*X_GAP))/(d3_l->max_x+d3_l->max_y); - d3_l->info_x=d3_l->fakt_x*d3_l->max_x+(2*X_GAP); - d3_l->info_y=d3_l->fakt_y*d3_l->max_z+(2*Y_GAP); - d3_l->info_w=d3_l->fakt_x*d3_l->max_y; - d3_l->info_h=d3_l->fakt_y*d3_l->max_y; + d3_l->fakt_y=(d3_l->s_height-(2*Y_GAP))/d3_l->max_z; + d3_l->fakt_x=(d3_l->s_width-(4*X_GAP))/(d3_l->max_x+d3_l->max_y+d3_l->max_x); + d3_l->info_x=d3_l->fakt_x*(d3_l->max_x+d3_l->max_y)+(3*X_GAP); + d3_l->info_y=d3_l->fakt_y*d3_l->max_y+(2*Y_GAP); + d3_l->o_x=d3_l->fakt_x*d3_l->max_x+(2*X_GAP); + d3_l->info_w=d3_l->fakt_x*d3_l->max_x; + d3_l->info_h=d3_l->fakt_y*(d3_l->max_z-d3_l->max_y)-Y_GAP; return 1; } @@ -100,28 +94,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)||mode==3) + { + 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 max_extra) { int x_c,y_c; int i; unsigned char r,g,b,a; + unsigned char foobar; a=0xff; /* no alpha blending */ @@ -129,7 +135,17 @@ int d2_lattice_draw(d2_lattice *d2_l,int x,int y,int arg_c,char **arg_v) { for(y_c=0;y_cmax_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 +185,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 max_extra,u32 *p1,u32 max1,u32 *p2,u32 max2) { int x_c,y_c,z_c; - int i; + int i,sum; + unsigned char foobar; unsigned char r,g,b,a; a=0xff; /* no alpha blending */ @@ -182,7 +199,33 @@ 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_cmax_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)||mode==3) + { + sum=0; + for(i=-2;i<=2;i++) + if(*(d3_l->status+x_c+((y_c+i+d3_l->max_y)%d3_l->max_y)*d3_l->max_x+z_c*d3_l->max_x*d3_l->max_y)&RED) sum+=0xff; + g=0; b=0; + r=(unsigned char)(sum/5); + } + if(mode==3) + { + if(d3_l->max_x*p1[z_c]/max1==x_c) + { + r=0xff; + g=0xff; + b=0xff; + } + } + 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 +245,26 @@ 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_cmax_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)||mode==3) 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==3) + { + if((int)(d3_l->max_y*(1.0*p2[z_c]/max2))==y_c) + { + r=0xff; + g=0xff; + b=0xff; + } + } + 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; @@ -211,7 +273,7 @@ int d3_lattice_draw(d3_lattice *d3_l,int x,int y,int z,int arg_c,char **arg_v) } d3_l->p_surface->SetColor(d3_l->p_surface,r,g,b,a); d3_l->p_surface->DrawRectangle(d3_l->p_surface, - y_c*d3_l->fakt_x+d3_l->info_x, + y_c*d3_l->fakt_x+d3_l->o_x, z_c*d3_l->fakt_y+Y_GAP, d3_l->fakt_x,d3_l->fakt_y); } @@ -222,7 +284,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_cmax_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)||mode==3) 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; @@ -231,8 +303,8 @@ int d3_lattice_draw(d3_lattice *d3_l,int x,int y,int z,int arg_c,char **arg_v) } d3_l->p_surface->SetColor(d3_l->p_surface,r,g,b,a); d3_l->p_surface->DrawRectangle(d3_l->p_surface, - x_c*d3_l->fakt_x+X_GAP, - y_c*d3_l->fakt_y+d3_l->info_y, + x_c*d3_l->fakt_x+d3_l->info_x, + y_c*d3_l->fakt_y+Y_GAP, d3_l->fakt_x,d3_l->fakt_y); } } @@ -249,28 +321,12 @@ int d3_lattice_draw(d3_lattice *d3_l,int x,int y,int z,int arg_c,char **arg_v) d3_l->p_surface->DrawRectangle(d3_l->p_surface, d3_l->info_x,d3_l->info_y, d3_l->info_w,d3_l->info_h); - d3_l->p_surface->DrawLine(d3_l->p_surface, - d3_l->info_x+d3_l->info_w/2, - d3_l->info_y, - d3_l->info_x+d3_l->info_w/2, - d3_l->info_y+d3_l->info_h); d3_l->p_surface->SetColor(d3_l->p_surface,0x80,0x80,0xff,0xff); for(i=1;i<=arg_c;i++) - { - if(i<8) - { d3_l->p_surface->DrawString(d3_l->p_surface,arg_v[i],-1, d3_l->info_x+d3_l->fakt_x, - d3_l->info_y+d3_l->fakt_y+d3_l->font_h+(i-1)*2*d3_l->font_h, - DSTF_LEFT); - } else - { - d3_l->p_surface->DrawString(d3_l->p_surface,arg_v[i],-1, - d3_l->info_x+d3_l->info_w/2+d3_l->fakt_x, - d3_l->info_y+d3_l->fakt_y+d3_l->font_h+(i%8-1)*2*d3_l->font_h, + d3_l->info_y+2*d3_l->fakt_y+d3_l->font_h+(i-1)*d3_l->font_h, DSTF_LEFT); - } - } /* now we flip all to surface */ d3_l->p_surface->Flip(d3_l->p_surface,NULL,0); @@ -294,21 +350,41 @@ 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,int *bmp,int *ac_distr) { DFBInputEvent ke; + d3_l->k_buffer->WaitForEvent(d3_l->k_buffer); d3_l->k_buffer->GetEvent(d3_l->k_buffer,DFB_EVENT(&ke)); if(ke.type==DIET_KEYPRESS) { if(ke.key_id==DIKI_LEFT && *x!=0) *x-=1; if(ke.key_id==DIKI_RIGHT && *x!=d3_l->max_x-1) *x+=1; - if(ke.key_id==DIKI_DOWN && *y!=0) *y-=1; - if(ke.key_id==DIKI_UP && *y!=d3_l->max_y-1) *y+=1; - if(ke.key_id==DIKI_PAGE_DOWN && *z!=0) *z-=1; - if(ke.key_id==DIKI_PAGE_UP && *z!=d3_l->max_z-1) *z+=1; + if(ke.key_id==DIKI_UP && *y!=0) *y-=1; + if(ke.key_id==DIKI_DOWN && *y!=d3_l->max_y-1) *y+=1; + if(ke.key_id==DIKI_PAGE_UP && *z!=0) *z-=1; + if(ke.key_id==DIKI_PAGE_DOWN && *z!=d3_l->max_z-1) *z+=1; + if(ke.key_id==DIKI_END && *z<=d3_l->max_z-10) *z+=10; + if(ke.key_id==DIKI_HOME && *z>=10) *z-=10; 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)%4; + if(ke.key_id==DIKI_1) *bmp=1; + if(ke.key_id==DIKI_2) *bmp=2; + if(ke.key_id==DIKI_3) *bmp=3; + if(ke.key_id==DIKI_4) *bmp=4; + if(ke.key_id==DIKI_5) *bmp=5; + if(ke.key_id==DIKI_6) *bmp=6; + if(ke.key_id==DIKI_7) *bmp=7; + if(ke.key_id==DIKI_8) *bmp=8; + if(ke.key_id==DIKI_9) *bmp=9; + if(ke.key_id==DIKI_W) *bmp=10; + if(ke.key_id==DIKI_E) *bmp=11; + if(ke.key_id==DIKI_R) *bmp=12; + if(ke.key_id==DIKI_A) *ac_distr=1; + if(ke.key_id==DIKI_C) *ac_distr=2; + if(ke.key_id==DIKI_B) *ac_distr=3; + if(ke.key_id==DIKI_X) *ac_distr=4; } return 1;