8 static void destroy(void);
9 static void start(long trans_time);
10 static void stop(long trans_time);
11 static void draw(void);
13 static struct screen scr = {
22 static void *saved_fb;
24 static long trans_start, trans_dur;
26 struct screen *console_screen(void)
33 fbsize = fb_width * fb_height * fb_depth / 8;
35 if(!(saved_fb = malloc(fbsize))) {
36 perror("failed to allocate memory");
39 memcpy(saved_fb, fb_pixels, fbsize);
43 static void destroy(void)
45 memcpy(fb_pixels, saved_fb, fbsize);
49 static void start(long trans_time)
53 static void stop(long trans_time)
55 trans_start = time_msec;
56 trans_dur = trans_time;
59 static void draw(void)
61 int i, pixsz = fb_depth / 8;
62 long elapsed, offs, rem;
63 unsigned char *dptr = fb_pixels;
64 unsigned char *sptr = saved_fb;
69 printf("console draw\n");
71 elapsed = time_msec - trans_start;
72 offs = fb_width * elapsed / trans_dur;
73 rem = fb_width - offs;
75 for(i=0; i<fb_height; i++) {
77 memset(dptr, 0, offs * pixsz);
80 memcpy(dptr + offs * pixsz, sptr, rem * pixsz);
83 dptr += fb_width * pixsz;
84 sptr += fb_width * pixsz;