home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <exec/types.h>
- #include <intuition/intuition.h>
- #include <libraries/dos.h>
-
- #define SCREEN_WIDTH 320L
- #define SCREEN_HEIGHT 400L
- #define BUFFER_SIZE 8096
-
- UWORD ColourTbl[16] = { 0x000, 0x111, 0x222, 0x333, 0x444, 0x555, 0x666,
- 0x777, 0x888, 0x999, 0xaaa, 0xbbb, 0xccc, 0xddd,
- 0xeee, 0xfff };
-
- #define extract_red(x) ((x & 0xF00) >> 8)
- #define extract_green(x) ((x & 0x0F0) >> 4)
- #define extract_blue(x) (x & 0x00F)
-
-
- LONG last_y = -1;
-
- extern int Close_Threshold;
-
- FILE *fp, *palette_file;
-
- main (argc, argv)
- int argc;
- char **argv;
- {
- unsigned int red, green, blue, i;
- unsigned int width, height, x, y, line_number;
- unsigned char red_buffer[SCREEN_WIDTH], green_buffer[SCREEN_WIDTH],
- blue_buffer[SCREEN_WIDTH];
-
- if ((argc != 2) && (argc != 3))
- {
- printf ("\nUsage: ChoosePalette <filename> <palette_file_name>\n");
- exit(0);
- }
-
- Close_Threshold = 5;
-
- fp = NULL;
- palette_file = NULL;
-
- if ((fp = fopen (argv[1], "r")) == NULL)
- {
- printf ("Cannot read input file\n");
- exit(FALSE);
- }
-
- if ((palette_file = fopen (argv[2], "w")) == NULL)
- {
- printf ("Cannot create palette file\n");
- exit (1);
- }
-
- width = (unsigned int) (getc(fp) & 0xFF);
- width += ((unsigned int) (getc(fp) & 0xFF) * 256);
- height = (unsigned int) (getc(fp) & 0xFF);
- height += ((unsigned int) (getc(fp) & 0xFF) * 256);
-
- if ((width > 320) || (height > 400)) {
- printf ("\nError - picture too large\n");
- fclose(fp);
- fclose(palette_file);
- exit (0);
- }
-
- printf ("Processing...\n");
-
- start_recording_colours();
-
- for (y = 0 ; y < height ; y++) {
- /* Skip over the line number. It's not important at this point */
- getc(fp);
- getc(fp);
-
- for (x = 0 ; x < width ; x++)
- red_buffer[x] = getc(fp);
-
- for (x = 0 ; x < width ; x++)
- green_buffer[x] = getc(fp);
-
- for (x = 0 ; x < width ; x++)
- blue_buffer[x] = getc(fp);
-
- for (x = 0 ; x < width ; x++)
- {
- red = red_buffer[x];
- green = green_buffer[x];
- blue = blue_buffer[x];
- process (x, height - y, red, green, blue);
- }
- }
- choose_palette();
- for (i = 0 ; i < 16 ; i++) {
- fprintf (palette_file, "%d %d %d\n",
- extract_red(ColourTbl[i]),
- extract_green(ColourTbl[i]),
- extract_blue(ColourTbl[i]));
- }
- fclose(palette_file);
- fclose (fp);
- }
-
-
- process (x, y, new_red, new_green, new_blue)
- LONG x, y, new_red, new_green, new_blue;
- {
- LONG newline;
-
- new_red &= 0xFF;
- new_green &= 0xFF;
- new_blue &= 0xFF;
-
- new_red /= 16;
- new_green /= 16;
- new_blue /= 16;
-
- newline = 0;
- if (last_y != y) {
- newline = 1;
- last_y = y;
- reset_colours();
- }
-
- record_colours (new_red, new_green, new_blue);
- }
-