+
+ case MODE_SHADE_LUT:
+ if(!(shade_lut = malloc(256 * shade_levels * sizeof *shade_lut))) {
+ fprintf(stderr, "failed to allocate shading look-up table\n");
+ return 1;
+ }
+ case MODE_SHADE_CMAP:
+ if(!img.cmap_ncolors) {
+ fprintf(stderr, "can't generate shade levels for non-indexed images\n");
+ return 1;
+ }
+ if(gen_shade_lut(&img, shade_levels, 256, shade_cmap, shade_lut) == -1) {
+ return 1;
+ }
+ if(mode == MODE_SHADE_CMAP) {
+ fwrite(shade_cmap, sizeof shade_cmap, 1, out);
+ } else {
+ for(i=0; i<img.cmap_ncolors * shade_levels; i++) {
+ fputc(shade_lut[i], out);
+ }
+ }
+ break;