Index: zgv-5.9/src/zgv.c =================================================================== --- zgv-5.9.orig/src/zgv.c 2011-01-23 19:09:28.000000000 +0100 +++ zgv-5.9/src/zgv.c 2011-01-29 14:37:36.000000000 +0100 @@ -148,7 +148,8 @@ /* from 18-bit RGB (as used by VGA palette) to 3:3:2 palette index */ -#define MAKE332COL(r,g,b) (((r)>>3)*32+((g)>>3)*4+((b)>>4)) +#define MAKE332COL(r,g,b) vga_setrgbcolor(((r)<<2)+2, ((g)<<2)+2, ((b)<<2)+2); +//(((r)>>3)*32+((g)>>3)*4+((b)>>4)) /* colour indicies used for filenames-only selector */ #define LIGHT 2 @@ -254,6 +255,7 @@ int fs_vgamode=G640x480x256; /* current video mode for selector */ int fs_scrnwide,fs_scrnhigh; /* width/height of selector mode */ +int fs_bypp; /* stuff for checking old directories (to avoid symlink loops in * recursive update). @@ -2225,6 +2227,32 @@ return(buf); } +static void drawscansegment_332(unsigned char *colors, int x, int y, int length) +{ + unsigned char *conv = colors; + int bypp = fs_bypp; + + if (bypp > 1) + { + int i, j, k; + conv = malloc(length*bypp); + for (i = 0, j=0; i < length; i++) + { + int c332=colors[i]; + int r = c332>>5, g = (c332>>2)&0x7, b = (c332&0x3); + int crgb = vga_setrgbcolor((r<<5)+16,(g<<5)+16,(b<<6)+32); + for (k = 0; k < bypp; k++) { + conv[j++] = crgb>>(k*8) & 0xff; + } + } + } + + vga_drawscansegment(conv, x, y, length*(bypp < 1 ? 1 : bypp)); + if (conv != colors) + { + free(conv); + } +} void showgifdir(int startfrom,int unshow,int drawdirmsg,int do_one_only) { @@ -2317,14 +2345,12 @@ /* load and draw thumbnail file (or undraw it) */ if(unshow) { - image=malloc(96); if(image!=NULL) { - memset(image,idx_medium,96); - for(y=-2;y<62;y++) - vga_drawscansegment(image, - xpos+(BARWIDTH-80)/2-2,ypos+y+GDFYBIT+9,96); - free(image); + gl_fillbox(xpos+(BARWIDTH-80)/2-2,ypos-2+GDFYBIT+9,96,62+2, + idx_medium); + gl_fillbox(xpos+(BARWIDTH-80)/2-2,ypos-2+GDFYBIT+9,96,62+2, + idx_medium); } } else @@ -2370,7 +2396,7 @@ if(image!=NULL) { for(y=0;ybytesperpixel; msgbox_draw_ok=1; gdfsiz=3-cfg.smallfstext; @@ -2772,14 +2802,7 @@ if(idx_medium) { - /* clear screen with `medium' (i.e. background) colour. */ - if((tmp=malloc(fs_scrnwide))!=NULL) - { - memset(tmp,idx_medium,fs_scrnwide); - for(n=0;n