/* Global variables: */ /* direction indicates whether we should use fptr or bptr to */ /* move to the "next" point on the line */ /* first_read flag to indicate that we haven't read from input */ /* file yet */ /* last_read flag to indicate we have reached EOF on input */ /* row_length length of each row of the raster map (i.e., number of */ /* columns) */ /* n_rows number of rows in the raster map */ /* row_count number of the row just read in--used to prevent reading */ /* beyond end of the raster map */ /* equivs pointer to allocated equivalence table made by */ /* write_equiv() */ /* areas pointer to allocated array of area information passed */ /* from bound.c */ /* total_areas number of distinct areas found */ /* Entry points: */ /* write_line write a line out to the digit files */ /* write_boundary write a line out to the digit files */ /* write_area make table of area mappings and write dlg label file */ #define BACKWARD 1 #define FORWARD 2 #define OPEN 1 #define END 2 #define LOOP 3 #define SMOOTH 1 #define NO_SMOOTH 0 #define CATNUM 0 #define CATLABEL 1 extern int data_type; extern int data_size; extern struct Map_info Map; extern int input_fd; /* input_fd input raster map descriptor */ extern struct line_cats *Cats; extern struct Cell_head cell_head; extern int direction; extern int first_read, last_read; extern int input_fd; extern int row_length, row_count, n_rows; extern int total_areas; extern int n_alloced_ptrs; extern int smooth_flag; /* this is 0 for no smoothing, 1 for smoothing of lines */ extern int value_flag; /* use raster values as categories */ extern struct Categories RastCats; extern int has_cats; /* Category labels available */ extern struct field_info *Fi; extern dbDriver *driver; extern dbString sql, label; struct COOR { struct COOR *bptr, *fptr; /* pointers to neighboring points */ int row, col, node; /* row, column of point; node flag */ int val; /* CELL value */ double dval; /* FCELL/DCELL value */ double right, left; /* areas to right and left of line */ }; struct line_hdr { struct COOR *left; struct COOR *right; struct COOR *center; }; #define NULPTR ((struct COOR *) NULL) /* area_table - structure to store stuff associated with each */ /* area number */ struct area_table { int free; /* this entry is not taken yet */ double cat; /* category number for this area */ int row; /* row and column of point where the */ int col; /* area is widest */ int width; /* and width there */ }; /* equiv_table - structure in which to compile equivalences between area */ /* numbers */ struct equiv_table { int mapped; /* is this area number mapped? */ int where; /* if so, where */ int count; /* if not, number mapped here */ int length; int *ptr; /* and pointer to them */ }; /* lines.c */ int alloc_lines_bufs(int); int extract_lines(void); /* lines_io.c */ int write_line(struct COOR *); /* areas.c */ int alloc_areas_bufs(int); int extract_areas(void); int more_equivs(void); /* areas_io.c */ int write_boundary(struct COOR *); int write_area(struct area_table *, struct equiv_table *, int, int); /* points.c */ int extract_points(int); /* util.c */ struct COOR *move(struct COOR *); struct COOR *find_end(struct COOR *, int, int *, int *); int at_end(struct COOR *); int read_row(void *); void insert_value(int, int, double); int free_ptr(struct COOR *); /* set_error_handler.c */ void set_error_handler(struct Map_info *, dbDriver **);