00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include <string.h>
00021 #include <grass/gis.h>
00022 #include <grass/Vect.h>
00023
00024 int
00025 dig__write_head ( struct Map_info *Map )
00026 {
00027 unsigned char buf[10];
00028 long length = GV_COOR_HEAD_SIZE;
00029
00030 G_debug ( 1, "dig__write_head()");
00031
00032 dig_set_cur_port (&(Map->head.port));
00033 dig_fseek ( &(Map->dig_fp), 0L, 0);
00034
00035
00036 buf[0] = Map->head.Version_Major;
00037 buf[1] = Map->head.Version_Minor;
00038 buf[2] = Map->head.Back_Major;
00039 buf[3] = Map->head.Back_Minor;
00040
00041 buf[4] = Map->head.port.byte_order;
00042 if (0 >= dig__fwrite_port_C ( buf, 5, &(Map->dig_fp) )) return (0);
00043
00044
00045 if (0 >= dig__fwrite_port_L ( &length, 1, &(Map->dig_fp) )) return (0);
00046
00047
00048 buf[0] = Map->head.with_z;
00049 if (0 >= dig__fwrite_port_C ( buf, 1, &(Map->dig_fp) )) return (0);
00050
00051
00052 G_debug ( 1, "write coor size (%ld) to head", Map->head.size);
00053 if (0 >= dig__fwrite_port_L ( &(Map->head.size), 1, &(Map->dig_fp) )) return (0);
00054
00055 G_debug (2, "coor body offset %d", dig_ftell( &(Map->dig_fp) ));
00056 return (1);
00057 }
00058
00059
00060 int
00061 dig__read_head ( struct Map_info *Map )
00062 {
00063 unsigned char buf[10];
00064 struct Port_info port;
00065
00066 dig_fseek ( &(Map->dig_fp), 0L, 0);
00067
00068
00069 if (0 >= dig__fread_port_C ( buf, 5, &(Map->dig_fp) )) return (0);
00070 Map->head.Version_Major = buf[0];
00071 Map->head.Version_Minor = buf[1];
00072 Map->head.Back_Major = buf[2];
00073 Map->head.Back_Minor = buf[3];
00074 Map->head.port.byte_order = buf[4];
00075
00076 G_debug (2, "Coor header: file version %d.%d , supported from GRASS version %d.%d",
00077 Map->head.Version_Major, Map->head.Version_Minor,
00078 Map->head.Back_Major, Map->head.Back_Minor );
00079
00080 G_debug (2, " byte order %d", Map->head.port.byte_order );
00081
00082
00083 if ( Map->head.Version_Major > GV_COOR_VER_MAJOR || Map->head.Version_Minor > GV_COOR_VER_MINOR ) {
00084
00085
00086 if ( Map->head.Back_Major > GV_COOR_VER_MAJOR || Map->head.Back_Minor > GV_COOR_VER_MINOR ) {
00087
00088 G_fatal_error ( "Vector 'coor' format version %d.%d is not supported by this version of GRASS. "
00089 "Update your GRASS.", Map->head.Version_Major, Map->head.Version_Minor);
00090 return (-1);
00091 }
00092
00093 G_warning ( "Your GRASS version does not fully support vector format %d.%d."
00094 " Consider to upgrade GRASS.",
00095 Map->head.Version_Major, Map->head.Version_Minor );
00096 }
00097
00098 dig_init_portable ( &port, Map->head.port.byte_order);
00099 dig_set_cur_port (&port);
00100
00101
00102 if (0 >= dig__fread_port_L ( &(Map->head.head_size), 1, &(Map->dig_fp) )) return (0);
00103 G_debug (2, " header size %d", Map->head.head_size );
00104
00105
00106 if (0 >= dig__fread_port_C ( buf, 1, &(Map->dig_fp) )) return (0);
00107 Map->head.with_z = buf[0];
00108 G_debug (2, " with_z %d", Map->head.with_z );
00109
00110
00111 if (0 >= dig__fread_port_L ( &(Map->head.size), 1, &(Map->dig_fp) )) return (0);
00112 G_debug (2, " coor size %d", Map->head.size );
00113
00114
00115
00116 dig_fseek ( &(Map->dig_fp), Map->head.head_size, SEEK_SET );
00117
00118 return (1);
00119 }
00120
00121
00122