00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include <stdio.h>
00021 #include <grass/Vect.h>
00022
00023
00024
00025 #define D_TEST 1.3333
00026 #define L_TEST 123456789
00027 #define S_TEST 12345
00028 #define C_TEST 123
00029
00030 int
00031 main (int argc, char **argv)
00032 {
00033 int i, j;
00034 int err = 0;
00035 int byte_order;
00036 struct Port_info port;
00037 GVFILE fp;
00038
00039 double db, td[] = { -(PORT_DOUBLE_MAX), -(D_TEST), -(PORT_DOUBLE_MIN),
00040 0, PORT_DOUBLE_MIN, D_TEST, PORT_DOUBLE_MAX };
00041 float fb, tf[] = { -(PORT_FLOAT_MAX), -(D_TEST), -(PORT_FLOAT_MIN),
00042 0, PORT_FLOAT_MIN, D_TEST, PORT_FLOAT_MAX };
00043 long lb, tl[] = { PORT_LONG_MIN, -(L_TEST), 0, L_TEST, PORT_LONG_MAX };
00044 int ib, ti[] = { PORT_INT_MIN, -(L_TEST), 0, L_TEST, PORT_INT_MAX };
00045 short sb, ts[] = { PORT_SHORT_MIN, -(S_TEST), 0, S_TEST, PORT_SHORT_MAX };
00046 char cb, tc[] = { PORT_CHAR_MIN, -(C_TEST), 0, C_TEST, PORT_CHAR_MAX };
00047
00048
00049 if (NULL == (fp.file = fopen ("test.tmp", "wb+")))
00050 {
00051 fprintf (stderr, "ERROR, cannot open test.tmp file.\n");
00052 return (1);
00053 }
00054 fp.loaded = 0;
00055
00056 dig_set_cur_port (&port);
00057
00058 byte_order = ENDIAN_LITTLE;
00059 for ( i = 0; i < 2; i++ )
00060 {
00061 dig_init_portable ( &(port), byte_order );
00062 for (j=0; j < 7; j++)
00063 {
00064 fprintf (fp.file, "double ");
00065 dig__fwrite_port_D ( &(td[j]), 1, &fp);
00066 dig_fseek (&fp, -(PORT_DOUBLE), SEEK_CUR);
00067 dig__fread_port_D (&db, 1, &fp);
00068 dig_fflush(&fp);
00069 if ( db != td[j] )
00070 {
00071 fprintf (stderr, "ERROR in read/write portable double, byte_order = %d\n", byte_order);
00072 fprintf (stderr, " Written: %.16e3E\n Read : %.16e3E\n", td[j], db);
00073 err = 1;
00074 }
00075 }
00076 for (j=0; j < 7; j++)
00077 {
00078 fprintf (fp.file, "float ");
00079 dig__fwrite_port_F ( &(tf[j]), 1, &fp);
00080 dig_fseek (&fp, -(PORT_FLOAT), SEEK_CUR);
00081 dig__fread_port_F (&fb, 1, &fp);
00082 dig_fflush(&fp);
00083 if ( fb != tf[j] )
00084 {
00085 fprintf (stderr, "ERROR in read/write portable float, byte_order = %d\n", byte_order);
00086 fprintf (stderr, " Written: %.8e3E\n Read : %.8e3E\n", tf[j], fb);
00087 err = 1;
00088 }
00089 }
00090
00091 for (j=0; j < 5; j++)
00092 {
00093 fprintf (fp.file, "long ");
00094 dig__fwrite_port_L ( &(tl[j]), 1, &fp);
00095 dig_fseek (&fp, -(PORT_LONG), SEEK_CUR);
00096 dig__fread_port_L (&lb, 1, &fp);
00097 dig_fflush(&fp);
00098 if ( lb != tl[j] )
00099 {
00100 fprintf (stderr, "ERROR in read/write portable long, byte_order = %d\n", byte_order);
00101 fprintf (stderr, " Written: %ld\n Read : %ld\n", tl[j], lb);
00102 err = 1;
00103 }
00104 }
00105
00106 for (j=0; j < 5; j++)
00107 {
00108 fprintf (fp.file, "int ");
00109 dig__fwrite_port_I ( &(ti[j]), 1, &fp);
00110 dig_fseek (&fp, -(PORT_INT), SEEK_CUR);
00111 dig__fread_port_I (&ib, 1, &fp);
00112 dig_fflush(&fp);
00113 if ( ib != ti[j] )
00114 {
00115 fprintf (stderr, "ERROR in read/write portable int, byte_order = %d\n", byte_order);
00116 fprintf (stderr, " Written: %d\n Read : %d\n", ti[j], ib);
00117 err = 1;
00118 }
00119 }
00120
00121 for (j=0; j < 5; j++)
00122 {
00123 fprintf (fp.file, "short ");
00124 dig__fwrite_port_S ( &(ts[j]), 1, &fp);
00125 dig_fseek (&fp, -(PORT_SHORT), SEEK_CUR);
00126 dig__fread_port_S (&sb, 1, &fp);
00127 dig_fflush(&fp);
00128 if ( sb != ts[j] )
00129 {
00130 fprintf (stderr, "ERROR in read/write portable short, byte_order = %d\n", byte_order);
00131 fprintf (stderr, " Written: %d\n Read : %d\n", ts[j], sb);
00132 err = 1;
00133 }
00134 }
00135 for (j=0; j < 5; j++)
00136 {
00137 fprintf (fp.file, "char ");
00138 dig__fwrite_port_C ( &(tc[j]), 1, &fp);
00139 dig_fseek (&fp, -(PORT_CHAR), SEEK_CUR);
00140 dig__fread_port_C (&cb, 1, &fp);
00141 dig_fflush(&fp);
00142 if ( cb != tc[j] )
00143 {
00144 fprintf (stderr, "ERROR in read/write portable char, byte_order = %d\n", byte_order);
00145 fprintf (stderr, " Written: %d\n Read : %d\n", tc[j], cb);
00146 err = 1;
00147 }
00148
00149
00150 }
00151 byte_order = ENDIAN_BIG;
00152 }
00153
00154 fclose ( fp.file );
00155
00156 return ( err );
00157 }
00158
00159