1 #include <stdlib.h>
2 #include <grass/gis.h>
3 #include <grass/raster.h>
4 #include <grass/glocale.h>
5 #include "local_proto.h"
6
7 static int blank_line();
8
9 static char *error_prefix;
10 static int first_read, last_read;
11 static char cell_name[256];
12 static int in_file_d;
13 static int raster_size, row_length, row_count, n_rows;
14 static RASTER_MAP_TYPE map_type;
15
16
o_io_init(void)17 int o_io_init(void)
18 {
19 error_prefix = "ps.map";
20 n_rows = PS.w.rows;
21 row_length = PS.w.cols;
22
23 return 0;
24 }
25
o_read_row(void * buf)26 int o_read_row(void *buf)
27 {
28 void *ptr;
29
30 ptr = buf;
31 if (last_read)
32 return (0);
33 if (first_read) {
34 blank_line(buf);
35 first_read = 0;
36 }
37 else {
38 if (row_count >= n_rows) {
39 last_read = 1;
40 blank_line(buf);
41 }
42 else {
43 Rast_set_null_value(ptr, 1, map_type);
44 ptr = G_incr_void_ptr(ptr, raster_size);
45
46 Rast_get_row(in_file_d, ptr, row_count++, map_type);
47
48 ptr = G_incr_void_ptr(ptr, raster_size * (row_length + 1));
49 Rast_set_null_value(ptr, 1, map_type);
50 }
51 }
52 return (row_length + 2);
53 }
54
blank_line(void * buf)55 static int blank_line(void *buf)
56 {
57 Rast_set_null_value(buf, row_length + 2, map_type);
58
59 return 0;
60 }
61
o_open_file(char * cell)62 RASTER_MAP_TYPE o_open_file(char *cell)
63 {
64 /* open raster map */
65 sscanf(cell, "%s", cell_name);
66 in_file_d = Rast_open_old(cell_name, "");
67
68 map_type = Rast_get_map_type(in_file_d);
69 raster_size = Rast_cell_size(map_type);
70 first_read = 1;
71 last_read = 0;
72 row_count = 0;
73 o_alloc_bufs(row_length + 2, raster_size);
74 return (map_type);
75 }
76
o_close_file(void)77 int o_close_file(void)
78 {
79 Rast_close(in_file_d);
80
81 return 0;
82 }
83
84 #ifdef DEBUG
xmalloc(int size,char * label)85 char *xmalloc(int size, char *label)
86 {
87 char *addr, *G_malloc();
88
89 addr = G_malloc(size);
90 fprintf(stdout, "MALLOC: %8d %7d %s\n", addr, size, label);
91 return (addr);
92 }
93
xfree(char * addr,char * label)94 int xfree(char *addr, char *label)
95 {
96 fprintf(stdout, "FREE: %8d %s\n", addr, label);
97 G_free(addr);
98
99 return 0;
100 }
101
xrealloc(char * addr,int size,char * label)102 char *xrealloc(char *addr, int size, char *label)
103 {
104 char *addr2, *G_realloc();
105
106 addr2 = G_realloc(addr, size);
107 fprintf(stdout, "REALLOC: %8d %7d (%8d) %s\n", addr2, size, addr,
108 label);
109 return (addr2);
110 }
111 #endif
112