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