#define MAXIMGIDENT 100
+typedef uint32_t Rgb; /* red<<0 | green<<8 | blue<<16 */
+
typedef struct RgbImage {
int w, h;
- unsigned char data[];
- /* red = data[ y*w*3 + x*3 + 0 ] = RI_PIXEL(ri,x,y)[0]
- * green = data[ y*w*3 + x*3 + 1 ] = RI_PIXEL(ri,x,y)[1]
- * blue = data[ y*w*3 + x*3 + 2 ] = RI_PIXEL(ri,x,y)[2]
- */
+ Rgb data[]; /* data[ y*w + x ] */
} RgbImage;
-typedef unsigned long Rgb;
-
void identify_rgbimage(const RgbImage *base, Rect portion,
char result[MAXIMGIDENT], const char *what);
RgbImage *alloc_rgb_image(int w, int h);
void fwrite_ppmraw(FILE *f, const RgbImage *ri);
-#define RI_PIXEL(ri,x,y) ((ri)->data + ((y)*(ri)->w + (x)) * 3)
+#define RI_PIXEL32(ri,x,y) ((ri)->data + ((y)*(ri)->w + (x)))
static inline Rgb ri_rgb(const RgbImage *ri, int x, int y) {
- const unsigned char *rip= RI_PIXEL(ri,x,y);
- return (rip[0] << 16) |
- (rip[1] << 8) |
- (rip[2] );
+ return *RI_PIXEL32(ri,x,y);
}
/*----- from structure.c -----*/
-void find_structure(CanonImage *im, int *max_relevant_y_r);
+typedef struct PageStruct PageStruct;
+
+void find_structure(const CanonImage *im,
+ PageStruct **pagestruct_r, /* caller must free() */
+ int *max_relevant_y_r,
+ Point *commod_focus_point_r,
+ Point *commod_page_point_r,
+ Point *commod_focuslast_point_r);
+void store_current_page(CanonImage *ci /*pointer saved*/,
+ PageStruct *pagestruct, /*freed*/
+ RgbImage *rgb /*freed*/);
+void adjust_colours(CanonImage *ci, const RgbImage *rgb);
+
+void select_page(int page);
+
Rect find_sunshine_widget(void);
void canon_colour_prepare(void);
-void find_islandname(RgbImage *ri);
+void find_islandname(void);
void check_correct_commodities(void);
void read_screenshots(void);
void read_one_screenshot(void);
/*----- from convert.c -----*/
extern FILE *screenshot_file;
-extern void fetch_with_rsync(const char *stem);
+void fetch_with_rsync(const char *stem);
+void fetch_with_rsync_gz(const char *stem);
void vwarning(const char *fmt, va_list) FMT(1,0);
void warning(const char *fmt, ...) FMT(1,2);
};
extern enum flags o_flags;
+enum mode {
+ mf_findwindow= 00001,
+ mf_screenshot= 00010,
+ mf_readscreenshot= 00020,
+ mf_analyse= 00100,
+ mfm_special= 07000,
+
+ mode_findwindow= 00001,
+ mode_screenshot= 00011,
+ mode_analyse= 00120,
+ mode_showcharset= 01000,
+
+ mode_all= 00111,
+};
+extern enum mode o_mode;
+
extern const char *o_ocean, *o_pirate;
extern int o_quiet;
void take_one_screenshot(void);
#define MAX_PAGES 1000
-extern CanonImage *page_images[MAX_PAGES];
+
+extern const CanonImage *page_images[MAX_PAGES];
+extern const RgbImage *page0_rgbimage;
extern int npages;
extern const char *ocean, *pirate;