/*6:*/ #line 141 "gb_lisa.w" #include "gb_io.h" #include "gb_graph.h" #define plane_lisa p_lisa \ #define MAX_M 360 #define MAX_N 250 #define MAX_D 255 \ #define panic(c) {panic_code= c;gb_trouble_code= 0;return NULL;} \ #define el_gordo 0x7fffffff \ #define pixel_value x.I #define first_pixel y.I #define last_pixel z.I #define matrix_rows uu.I #define matrix_cols vv.I \ #line 144 "gb_lisa.w" /*4:*/ #line 126 "gb_lisa.w" char lisa_id[]= "lisa(360,250,9999999999,359,360,249,250,9999999999,9999999999)"; /*:4*/ #line 145 "gb_lisa.w" /*16:*/ #line 305 "gb_lisa.w" static long bit[30]; /*:16*//*22:*/ #line 358 "gb_lisa.w" static long in_row[MAX_N]; /*:22*/ #line 146 "gb_lisa.w" /*15:*/ #line 285 "gb_lisa.w" #line 45 "gb_lisa.ch" static long na_over_b(long n,long a,long b) #line 288 "gb_lisa.w" {long nmax= el_gordo/a; register long r,k,q,br; long a_thresh,b_thresh; if(n<=nmax)return(n*a)/b; a_thresh= b-a; b_thresh= (b+1)>>1; k= 0; do{bit[k]= n&1; n>>= 1; k++; }while(n> nmax); r= n*a;q= r/b;r= r-q*b; /*17:*/ #line 308 "gb_lisa.w" do{k--;q<<= 1; if(rarcs;a;a= a->next) if(a->tip==v)return; gb_new_edge(u,v,1L); } /*:32*/ #line 147 "gb_lisa.w" #line 26 "gb_lisa.ch" long*lisa( unsigned long m,unsigned long n, unsigned long d, unsigned long m0,unsigned long m1, unsigned long n0,unsigned long n1, unsigned long d0,unsigned long d1, Area area) #line 156 "gb_lisa.w" {/*7:*/ #line 163 "gb_lisa.w" long*matx= NULL; register long k,l; register long i,j; long cap_M,cap_N; long cap_D; /*:7*//*11:*/ #line 221 "gb_lisa.w" long*cur_pix; long lambda; long lam; long next_lam; /*:11*//*14:*/ #line 268 "gb_lisa.w" long kappa; long kap; long next_kap; long f; long*out_row; /*:14*/ #line 156 "gb_lisa.w" /*8:*/ #line 170 "gb_lisa.w" if(m1==0||m1> MAX_M)m1= MAX_M; if(m1<=m0)panic(bad_specs+1); if(n1==0||n1> MAX_N)n1= MAX_N; if(n1<=n0)panic(bad_specs+2); cap_M= m1-m0;cap_N= n1-n0; if(m==0)m= cap_M; if(n==0)n= cap_N; if(d==0)d= MAX_D; if(d1==0)d1= MAX_D*cap_M*cap_N; if(d1<=d0)panic(bad_specs+3); if(d1>=0x80000000)panic(bad_specs+4); cap_D= d1-d0; sprintf(lisa_id,"lisa(%lu,%lu,%lu,%lu,%lu,%lu,%lu,%lu,%lu)", m,n,d,m0,m1,n0,n1,d0,d1); /*:8*/ #line 157 "gb_lisa.w" ; /*9:*/ #line 186 "gb_lisa.w" matx= gb_typed_alloc(m*n,long,area); if(gb_trouble_code)panic(no_room+1); /*:9*/ #line 158 "gb_lisa.w" ; /*10:*/ #line 190 "gb_lisa.w" /*19:*/ #line 331 "gb_lisa.w" if(gb_open("lisa.dat")!=0) panic(early_data_fault); for(i= 0;i=kappa){ /*21:*/ #line 344 "gb_lisa.w" {register long dd; for(j= 15,cur_pix= &in_row[0];;cur_pix+= 4){ dd= gb_digit(85);dd= dd*85+gb_digit(85);dd= dd*85+gb_digit(85); if(cur_pix==&in_row[MAX_N-2])break; dd= dd*85+gb_digit(85);dd= dd*85+gb_digit(85); *(cur_pix+3)= dd&0xff;dd= (dd>>8)&0xffffff; *(cur_pix+2)= dd&0xff;dd>>= 8; *(cur_pix+1)= dd&0xff;*cur_pix= dd>>8; if(--j==0)gb_newline(),j= 15; } *(cur_pix+1)= dd&0xff;*cur_pix= dd>>8;gb_newline(); } /*:21*/ #line 255 "gb_lisa.w" ; kappa+= m; } if(kappa=lambda)cur_pix++,lambda+= n; if(lambda=d1)*out_row= d; else*out_row= na_over_b(d,*out_row-d0,cap_D); /*:18*/ #line 265 "gb_lisa.w" ; } /*:13*/ #line 192 "gb_lisa.w" ; /*20:*/ #line 337 "gb_lisa.w" for(i= m1;i=0;k--) for(l= n-1;l>=0;l--,apos--){ if(k 0&&*(apos-n)==*apos){ for(j= l;f[j]!=j;j= f[j]); f[j]= l; *apos= l; }else if(f[l]==l)*apos= -1-*apos,regs++; else*apos= f[l]; } if(k> 0&&lid,"plane_%s",lisa_id); strcpy(new_graph->util_types,"ZZZIIIZZIIZZZZ"); new_graph->matrix_rows= m; new_graph->matrix_cols= n; /*:29*/ #line 414 "gb_lisa.w" ; /*30:*/ #line 530 "gb_lisa.w" regs= 0; u= (Vertex**)f; for(l= 0;lvertices+regs; v->name= gb_save_string(str_buf); v->pixel_value= -*apos-1; v->first_pixel= aloc; regs++; }else v= u[*apos]; u[l]= v; v->last_pixel= aloc; if(gb_trouble_code)goto trouble; if(k> 0&&v!=w)adjac(v,w); if(l> 0&&v!=u[l-1])adjac(v,u[l-1]); } /*:30*/ #line 415 "gb_lisa.w" ; trouble:gb_free(working_storage); if(gb_trouble_code){ gb_recycle(new_graph); panic(alloc_fault); } return new_graph; } /*:23*//*33:*/ #line 84 "gb_lisa.ch" Graph*bi_lisa( unsigned long m,unsigned long n, unsigned long m0,unsigned long m1, unsigned long n0,unsigned long n1, unsigned long thresh, long c) #line 597 "gb_lisa.w" {/*34:*/ #line 609 "gb_lisa.w" Graph*new_graph; register long k,l; Area working_storage; long*a; long*apos; register Vertex*u,*v; /*:34*/ #line 597 "gb_lisa.w" init_area(working_storage); /*35:*/ #line 617 "gb_lisa.w" a= lisa(m,n,65535L,m0,m1,n0,n1,0L,0L,working_storage); if(a==NULL)return NULL; sscanf(lisa_id,"lisa(%lu,%lu,65535,%lu,%lu,%lu,%lu",&m,&n,&m0,&m1,&n0,&n1); new_graph= gb_new_graph(m+n); if(new_graph==NULL) panic(no_room); sprintf(new_graph->id,"bi_lisa(%lu,%lu,%lu,%lu,%lu,%lu,%lu,%c)", m,n,m0,m1,n0,n1,thresh,c?'1':'0'); new_graph->util_types[7]= 'I'; mark_bipartite(new_graph,m); for(k= 0,v= new_graph->vertices;kname= gb_save_string(str_buf); } for(l= 0;lname= gb_save_string(str_buf); } /*:35*/ #line 599 "gb_lisa.w" ; /*36:*/ #line 641 "gb_lisa.w" for(u= new_graph->vertices,apos= a;uvertices+m;u++) for(v= new_graph->vertices+m;vvertices+m+n;apos++,v++){ if(c?*apos=thresh){ gb_new_edge(u,v,1L); u->arcs->b.I= v->arcs->b.I= *apos; } } /*:36*/ #line 600 "gb_lisa.w" ; gb_free(working_storage); if(gb_trouble_code){ gb_recycle(new_graph); panic(alloc_fault); } return new_graph; } /*:33*/