123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- /*
- ****************************************************************************
- *
- * MODULE: Vector library
- *
- * AUTHOR(S): Original author CERL, probably Dave Gerdes.
- * Update to GRASS 5.7 Radim Blazek.
- *
- * PURPOSE: Lower level functions for reading/writing/manipulating vectors.
- *
- * COPYRIGHT: (C) 2001 by the GRASS Development Team
- *
- * This program is free software under the GNU General Public
- * License (>=v2). Read the file COPYING that comes with GRASS
- * for details.
- *
- *****************************************************************************/
- #include <stdio.h>
- #include <grass/Vect.h>
- /* Test portable r/w functions */
- #define D_TEST 1.3333
- #define L_TEST 123456789
- #define S_TEST 12345
- #define C_TEST 123
- int
- main (int argc, char **argv)
- {
- int i, j;
- int err = 0;
- int byte_order;
- struct Port_info port;
- GVFILE fp;
-
- double db, td[] = { -(PORT_DOUBLE_MAX), -(D_TEST), -(PORT_DOUBLE_MIN),
- 0, PORT_DOUBLE_MIN, D_TEST, PORT_DOUBLE_MAX };
- float fb, tf[] = { -(PORT_FLOAT_MAX), -(D_TEST), -(PORT_FLOAT_MIN),
- 0, PORT_FLOAT_MIN, D_TEST, PORT_FLOAT_MAX };
- long lb, tl[] = { PORT_LONG_MIN, -(L_TEST), 0, L_TEST, PORT_LONG_MAX };
- int ib, ti[] = { PORT_INT_MIN, -(L_TEST), 0, L_TEST, PORT_INT_MAX };
- short sb, ts[] = { PORT_SHORT_MIN, -(S_TEST), 0, S_TEST, PORT_SHORT_MAX };
- char cb, tc[] = { PORT_CHAR_MIN, -(C_TEST), 0, C_TEST, PORT_CHAR_MAX };
-
- if (NULL == (fp.file = fopen ("test.tmp", "wb+")))
- {
- fprintf (stderr, "ERROR, cannot open test.tmp file.\n");
- return (1);
- }
- fp.loaded = 0;
- dig_set_cur_port (&port);
-
- byte_order = ENDIAN_LITTLE;
- for ( i = 0; i < 2; i++ )
- {
- dig_init_portable ( &(port), byte_order );
- for (j=0; j < 7; j++)
- {
- dig_fseek (&fp, 0, SEEK_CUR);
- fprintf (fp.file, "double ");
- dig__fwrite_port_D ( &(td[j]), 1, &fp);
- dig_fseek (&fp, -(PORT_DOUBLE), SEEK_CUR);
- dig__fread_port_D (&db, 1, &fp);
- dig_fflush(&fp);
- if ( db != td[j] )
- {
- fprintf (stderr, "ERROR in read/write portable double, byte_order = %d\n", byte_order);
- fprintf (stderr, " Written: %.16e3E\n Read : %.16e3E\n", td[j], db);
- err = 1;
- }
- }
- for (j=0; j < 7; j++)
- {
- dig_fseek (&fp, 0, SEEK_CUR);
- fprintf (fp.file, "float ");
- dig__fwrite_port_F ( &(tf[j]), 1, &fp);
- dig_fseek (&fp, -(PORT_FLOAT), SEEK_CUR);
- dig__fread_port_F (&fb, 1, &fp);
- dig_fflush(&fp);
- if ( fb != tf[j] )
- {
- fprintf (stderr, "ERROR in read/write portable float, byte_order = %d\n", byte_order);
- fprintf (stderr, " Written: %.8e3E\n Read : %.8e3E\n", tf[j], fb);
- err = 1;
- }
- }
- for (j=0; j < 5; j++)
- {
- dig_fseek (&fp, 0, SEEK_CUR);
- fprintf (fp.file, "long ");
- dig__fwrite_port_L ( &(tl[j]), 1, &fp);
- dig_fseek (&fp, -(PORT_LONG), SEEK_CUR);
- dig__fread_port_L (&lb, 1, &fp);
- dig_fflush(&fp);
- if ( lb != tl[j] )
- {
- fprintf (stderr, "ERROR in read/write portable long, byte_order = %d\n", byte_order);
- fprintf (stderr, " Written: %ld\n Read : %ld\n", tl[j], lb);
- err = 1;
- }
- }
-
- for (j=0; j < 5; j++)
- {
- dig_fseek (&fp, 0, SEEK_CUR);
- fprintf (fp.file, "int ");
- dig__fwrite_port_I ( &(ti[j]), 1, &fp);
- dig_fseek (&fp, -(PORT_INT), SEEK_CUR);
- dig__fread_port_I (&ib, 1, &fp);
- dig_fflush(&fp);
- if ( ib != ti[j] )
- {
- fprintf (stderr, "ERROR in read/write portable int, byte_order = %d\n", byte_order);
- fprintf (stderr, " Written: %d\n Read : %d\n", ti[j], ib);
- err = 1;
- }
- }
-
- for (j=0; j < 5; j++)
- {
- dig_fseek (&fp, 0, SEEK_CUR);
- fprintf (fp.file, "short ");
- dig__fwrite_port_S ( &(ts[j]), 1, &fp);
- dig_fseek (&fp, -(PORT_SHORT), SEEK_CUR);
- dig__fread_port_S (&sb, 1, &fp);
- dig_fflush(&fp);
- if ( sb != ts[j] )
- {
- fprintf (stderr, "ERROR in read/write portable short, byte_order = %d\n", byte_order);
- fprintf (stderr, " Written: %d\n Read : %d\n", ts[j], sb);
- err = 1;
- }
- }
- for (j=0; j < 5; j++)
- {
- dig_fseek (&fp, 0, SEEK_CUR);
- fprintf (fp.file, "char ");
- dig__fwrite_port_C ( &(tc[j]), 1, &fp);
- dig_fseek (&fp, -(PORT_CHAR), SEEK_CUR);
- dig__fread_port_C (&cb, 1, &fp);
- dig_fflush(&fp);
- if ( cb != tc[j] )
- {
- fprintf (stderr, "ERROR in read/write portable char, byte_order = %d\n", byte_order);
- fprintf (stderr, " Written: %d\n Read : %d\n", tc[j], cb);
- err = 1;
- }
-
- }
- byte_order = ENDIAN_BIG;
- }
- fclose ( fp.file );
-
- return ( err );
- }
|