void splite(int b,int p){ if(b==-1 || count[b]==p)return; int t=newnode(); reverseblock(b); if(same[b]) fillblock(t, count[b]-p, samevalue[b], next[b]); else fillblock(t, count[b]-p, data[b]+p, next[b]); count[b]=p; next[b]=t; maintainblock(b); }
void makesame(int p,int n,int v){ int b,t; find(p,b); splite(b,p); for(t=next[b]; t!=-1 && n>count[t];n-=count[t], t=next[t]) fillblock(t, count[t], v, next[t]); if(n && t!=-1){ splite(t,n); fillblock(t, n, v, next[t]); } maintainlist(b); }
void splite(int b,int p){ if(b==-1 || bcount[b]==p)return; int t=newnode(); fillblock(t, data[b]+p, bcount[b]-p, next[b]); next[b]=t; bcount[b]=p; }
void insert(int p,int n,int str[]){ int b,t,i; find(p,b); splite(b,p); for(i=0; i + BLOCKSIZE <= n; i+=BLOCKSIZE){ t=newnode(); fillblock(t, BLOCKSIZE, str+i, next[b]); next[b]=t; b=t; } if(n-i){ t=newnode(); fillblock(t, n-i, str+i, next[b]); next[b]=t; } maintainlist(b); }
static int draw_frame(uint8_t * src[]) { int numlines = vo_dga_lines; char *s, *d; s = *src; d = CURRENT_VIDEO_BUFFER.data + vo_dga_vp_offset; mem2agpcpy_pic(d, s, vo_dga_bytes_per_line, numlines, vo_dga_bytes_per_line + vo_dga_vp_skip, vo_dga_bytes_per_line); // DBG-COde #if 0 d = CURRENT_VIDEO_BUFFER.data + vo_dga_vp_offset; fillblock(d, 0, 10, 0x800000ff); fillblock(d, 10, 10, 0x8000ff00); fillblock(d, 20, 10, 0x80ff0000); fillblock(d, 30, 10, 0xff0000ff); fillblock(d, 40, 10, 0x800000ff); fillblock(d, 50, 10, 0x0f0000ff); #endif return 0; }