+int conf_map_part_width = 5;
+int conf_map_part_height = 5;
+int num_map_parts_row;
+int num_map_parts_col;
+int num_map_parts;
+
+void make_graph(void);
+void label_graph(void);
+void join_edge(struct graph_edge *e, int dir);
+void bfs(uns longline);
+void make_segments(void);
+
+int overlaps(struct placement *p1, struct placement *p2);
+int get_overlap(struct placement *p);
+int individual_overlap(struct individual *individual);
+
+void make_population(void);
+bool shall_terminate(void);
+void breed(void);
+void mutate(void);
+void elite(void);
+void rank_population(void);
+void plan_individual(struct individual *individual);
+
+void make_bitmap(struct variant *v, struct symbol *sym);
+void make_bitmap_icon(struct variant *v, struct sym_icon *si);
+void make_bitmap_point(struct variant *v, struct sym_point *sp);
+void make_bitmap_label(struct variant *v, struct sym_text *text);
+
+void cut_edge(struct graph_edge *e, double dist);
+struct request_line *make_new_line(void);
+struct request_section *make_new_section(struct request_line *rl);
+struct request_segment *make_new_segment(struct request_section *rls, struct symbol *sym);
+
+void dump_bitmaps(struct individual *individual);
+void dump_graph(void);
+void bfs2(void);
+void bfs_edge(struct graph_edge *e, struct graph_node *node, struct graph_node *anode, enum edge_dir dir);
+void bfs_wrapper(void);
+void oldbfs(void);
+void dump_longlines(void);
+void dump_linelabel_requests(void);
+void dump_individual(struct individual *individual);
+void print_label(struct symbol *sym);
+
+double gen_movement(void);
+void gen_coords(struct placement *p);
+void gen_coords_point(struct placement *p);
+void gen_coords_segment(struct placement *p);
+void gen_coords_area(struct placement *p);
+
+struct map_part **get_map_parts(struct placement *p);
+void update_map_parts(struct placement *p);
+
+void make_segments_old(void);
+
+void labeller_cleanup(void);
+
+struct individual **perform_crossover(struct individual *parent1, struct individual *parent2);
+void perform_mutation(struct individual *individual);
+
+void hide_segment_labels(struct individual *individual);
+void init_placement(struct placement *p, struct individual *individual, struct request *r);
+void init_individual(struct individual *i);
+struct map_part **get_parts(struct placement *symbol, struct individual *individual);
+
+int randint(int min, int max);
+
+struct placement **get_closure(struct placement *placement, struct individual *parent1, struct individual *parent2);
+void copy_symbols(struct placement **closure, struct individual *parent, struct individual *child);
+void move_symbol(struct placement *p);
+void move_symbol_point(struct placement *p);
+
+struct placement **get_overlapping(struct placement *p);
+void filter(struct placement **list, bool *pred);
+
+int flip(int a, int b);
+double randdouble(void);
+
+void cleanup(void);
+
+void copy_individual(struct individual *src, struct individual *dest);
+
+int max2(int a, int b);
+int min2(int a, int b);
+int max4(int a, int b, int c, int d);
+int min4(int a, int b, int c, int d);
+
+struct placement dummy_placement;
+
+int max2(int a, int b)
+{
+ return (a > b ? a : b);
+}
+
+int min2(int a, int b)
+{
+ return (a < b ? a : b);
+}
+
+int max4(int a, int b, int c, int d)
+{
+ return max2(max2(a, b), max2(c, d));
+}
+
+int min4(int a, int b, int c, int d)
+{
+ return min2(min2(a, b), min2(c, d));
+}
+
+void print_label(struct symbol *sym)
+{
+ switch (sym->type)
+ {
+ case SYMBOLIZER_TEXT: ;
+ struct sym_text *st = (struct sym_text *) sym;
+ printf("%s\n", osm_val_decode(st->text));
+ default:
+ // FIXME
+ ;
+ }
+}
+